mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
Merge topic 'FindBLAS-LAPACK-docs'
5bf1651452
Find{BLAS,LAPACK}: Revise and extend Intel MKL usage documentation8585a12bd9
Find{BLAS,LAPACK}: Move enabled language requirement to top of documentation6a7c055f96
Find{BLAS,LAPACK}: Revise formatting of intro docs43b581367d
Find{BLAS,LAPACK}: Move implementation note from docs to comments3beac78a13
Find{BLAS,LAPACK}: Revise imported targets documentation layout6f305cd5fd
Find{BLAS,LAPACK}: Factor out vendor documentation Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6218
This commit is contained in:
@@ -8,11 +8,11 @@ FindBLAS
|
||||
Find Basic Linear Algebra Subprograms (BLAS) library
|
||||
|
||||
This module finds an installed Fortran library that implements the
|
||||
BLAS linear-algebra interface (see http://www.netlib.org/blas/).
|
||||
`BLAS linear-algebra interface`_.
|
||||
|
||||
The approach follows that taken for the ``autoconf`` macro file,
|
||||
``acx_blas.m4`` (distributed at
|
||||
http://ac-archive.sourceforge.net/ac-archive/acx_blas.html).
|
||||
At least one of the ``C``, ``CXX``, or ``Fortran`` languages must be enabled.
|
||||
|
||||
.. _`BLAS linear-algebra interface`: http://www.netlib.org/blas/
|
||||
|
||||
Input Variables
|
||||
^^^^^^^^^^^^^^^
|
||||
@@ -23,68 +23,8 @@ The following variables may be set to influence this module's behavior:
|
||||
if ``ON`` use static linkage
|
||||
|
||||
``BLA_VENDOR``
|
||||
If set, checks only the specified vendor, if not set checks all the
|
||||
possibilities. List of vendors valid in this module:
|
||||
|
||||
* ``Goto``
|
||||
* ``FlexiBLAS``
|
||||
* ``OpenBLAS``
|
||||
* ``FLAME``
|
||||
* ``ATLAS PhiPACK``
|
||||
* ``CXML``
|
||||
* ``DXML``
|
||||
* ``SunPerf``
|
||||
* ``SCSL``
|
||||
* ``SGIMATH``
|
||||
* ``IBMESSL``
|
||||
* ``Intel10_32`` (intel mkl v10 32 bit, threaded code)
|
||||
* ``Intel10_64lp`` (intel mkl v10+ 64 bit, threaded code, lp64 model)
|
||||
* ``Intel10_64lp_seq`` (intel mkl v10+ 64 bit, sequential code, lp64 model)
|
||||
* ``Intel10_64ilp`` (intel mkl v10+ 64 bit, threaded code, ilp64 model)
|
||||
* ``Intel10_64ilp_seq`` (intel mkl v10+ 64 bit, sequential code, ilp64 model)
|
||||
* ``Intel10_64_dyn`` (intel mkl v10+ 64 bit, single dynamic library)
|
||||
* ``Intel`` (obsolete versions of mkl 32 and 64 bit)
|
||||
* ``ACML``
|
||||
* ``ACML_MP``
|
||||
* ``ACML_GPU``
|
||||
* ``Apple``
|
||||
* ``NAS``
|
||||
* ``Arm``
|
||||
* ``Arm_mp``
|
||||
* ``Arm_ilp64``
|
||||
* ``Arm_ilp64_mp``
|
||||
* ``EML``
|
||||
* ``EML_mt``
|
||||
* ``Fujitsu_SSL2`` (Fujitsu serial blas / lapack)
|
||||
* ``Fujitsu_SSL2BLAMP`` (Fujitsu parallel blas / lapack)
|
||||
* ``NVHPC``
|
||||
* ``Generic``
|
||||
|
||||
.. versionadded:: 3.6
|
||||
``OpenBLAS`` support.
|
||||
|
||||
.. versionadded:: 3.11
|
||||
``FLAME`` support.
|
||||
|
||||
.. versionadded:: 3.13
|
||||
Added ILP64 MKL variants (``Intel10_64ilp``, ``Intel10_64ilp_seq``).
|
||||
|
||||
.. versionadded:: 3.17
|
||||
Added single dynamic library MKL variant (``Intel10_64_dyn``).
|
||||
|
||||
.. versionadded:: 3.18
|
||||
Arm Performance Libraries support (``Arm``, ``Arm_mp``, ``Arm_ilp64``,
|
||||
``Arm_ilp64_mp``).
|
||||
|
||||
.. versionadded:: 3.19
|
||||
``FlexiBLAS`` support.
|
||||
|
||||
.. versionadded:: 3.20
|
||||
Elbrus Math Library support (``EML``, ``EML_mt``).
|
||||
Fujitsu SSL2 Library support (``Fujitsu_SSL2``, ``Fujitsu_SSL2BLAMP``)
|
||||
|
||||
.. versionadded:: 3.21
|
||||
NVHPC support
|
||||
Set to one of the :ref:`BLAS/LAPACK Vendors` to search for BLAS only
|
||||
from the specified vendor. If not set, all vendors are considered.
|
||||
|
||||
``BLA_F95``
|
||||
if ``ON`` tries to find the BLAS95 interfaces
|
||||
@@ -98,13 +38,12 @@ The following variables may be set to influence this module's behavior:
|
||||
Imported targets
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
.. versionadded:: 3.18
|
||||
|
||||
This module defines the following :prop_tgt:`IMPORTED` target:
|
||||
This module defines the following :prop_tgt:`IMPORTED` targets:
|
||||
|
||||
``BLAS::BLAS``
|
||||
The libraries to use for BLAS, if found.
|
||||
.. versionadded:: 3.18
|
||||
|
||||
The libraries to use for BLAS, if found.
|
||||
|
||||
Result Variables
|
||||
^^^^^^^^^^^^^^^^
|
||||
@@ -124,31 +63,168 @@ This module defines the following variables:
|
||||
``BLAS95_FOUND``
|
||||
library implementing the BLAS95 interface is found
|
||||
|
||||
.. _`BLAS/LAPACK Vendors`:
|
||||
|
||||
BLAS/LAPACK Vendors
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``Generic``
|
||||
Generic reference implementation
|
||||
|
||||
``ACML``, ``ACML_MP``, ``ACML_GPU``
|
||||
AMD Core Math Library
|
||||
|
||||
``Apple``, ``NAS``
|
||||
Apple BLAS (Accelerate), and Apple NAS (vecLib)
|
||||
|
||||
``Arm``, ``Arm_mp``, ``Arm_ilp64``, ``Arm_ilp64_mp``
|
||||
.. versionadded:: 3.18
|
||||
|
||||
Arm Performance Libraries
|
||||
|
||||
``ATLAS``
|
||||
Automatically Tuned Linear Algebra Software
|
||||
|
||||
``CXML``, ``DXML``
|
||||
Compaq/Digital Extended Math Library
|
||||
|
||||
``EML``, ``EML_mt``
|
||||
.. versionadded:: 3.20
|
||||
|
||||
Elbrus Math Library
|
||||
|
||||
``FLAME``
|
||||
.. versionadded:: 3.11
|
||||
|
||||
BLIS Framework
|
||||
|
||||
``FlexiBLAS``
|
||||
.. versionadded:: 3.19
|
||||
|
||||
``Fujitsu_SSL2``, ``Fujitsu_SSL2BLAMP``
|
||||
.. versionadded:: 3.20
|
||||
|
||||
Fujitsu SSL2 serial and parallel blas/lapack
|
||||
|
||||
``Goto``
|
||||
GotoBLAS
|
||||
|
||||
``IBMESSL``
|
||||
IBM Engineering and Scientific Subroutine Library
|
||||
|
||||
``Intel``
|
||||
Intel MKL 32 bit and 64 bit obsolete versions
|
||||
|
||||
``Intel10_32``
|
||||
Intel MKL v10 32 bit, threaded code
|
||||
|
||||
``Intel10_64lp``
|
||||
Intel MKL v10+ 64 bit, threaded code, lp64 model
|
||||
|
||||
``Intel10_64lp_seq``
|
||||
Intel MKL v10+ 64 bit, sequential code, lp64 model
|
||||
|
||||
``Intel10_64ilp``
|
||||
.. versionadded:: 3.13
|
||||
|
||||
Intel MKL v10+ 64 bit, threaded code, ilp64 model
|
||||
|
||||
``Intel10_64ilp_seq``
|
||||
.. versionadded:: 3.13
|
||||
|
||||
Intel MKL v10+ 64 bit, sequential code, ilp64 model
|
||||
|
||||
``Intel10_64_dyn``
|
||||
.. versionadded:: 3.17
|
||||
|
||||
Intel MKL v10+ 64 bit, single dynamic library
|
||||
|
||||
``NVHPC``
|
||||
.. versionadded:: 3.21
|
||||
|
||||
NVIDIA HPC SDK
|
||||
|
||||
``OpenBLAS``
|
||||
.. versionadded:: 3.6
|
||||
|
||||
``PhiPACK``
|
||||
Portable High Performance ANSI C (PHiPAC)
|
||||
|
||||
``SCSL``
|
||||
Scientific Computing Software Library
|
||||
|
||||
``SGIMATH``
|
||||
SGI Scientific Mathematical Library
|
||||
|
||||
``SunPerf``
|
||||
Sun Performance Library
|
||||
|
||||
.. _`Intel MKL`:
|
||||
|
||||
Intel MKL
|
||||
^^^^^^^^^
|
||||
|
||||
To use the Intel MKL implementation of BLAS, a project must enable at least
|
||||
one of the ``C`` or ``CXX`` languages. Set ``BLA_VENDOR`` to an Intel MKL
|
||||
variant either on the command-line as ``-DBLA_VENDOR=Intel10_64lp`` or in
|
||||
project code:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
set(BLA_VENDOR Intel10_64lp)
|
||||
find_package(BLAS)
|
||||
|
||||
In order to build a project using Intel MKL, and end user must first
|
||||
establish an Intel MKL environment:
|
||||
|
||||
Intel oneAPI
|
||||
Source the full Intel environment script:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
. /opt/intel/oneapi/setvars.sh
|
||||
|
||||
Or, source the MKL component environment script:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
. /opt/intel/oneapi/mkl/latest/env/vars.sh
|
||||
|
||||
Intel Classic
|
||||
Source the full Intel environment script:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
. /opt/intel/bin/compilervars.sh intel64
|
||||
|
||||
Or, source the MKL component environment script:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
. /opt/intel/mkl/bin/mklvars.sh intel64
|
||||
|
||||
The above environment scripts set the ``MKLROOT`` environment variable
|
||||
to the top of the MKL installation. They also add the location of the
|
||||
runtime libraries to the dynamic library loader environment variable for
|
||||
your platform (e.g. ``LD_LIBRARY_PATH``). This is necessary for programs
|
||||
linked against MKL to run.
|
||||
|
||||
.. note::
|
||||
|
||||
C, CXX or Fortran must be enabled to detect a BLAS library.
|
||||
C or CXX must be enabled to use Intel Math Kernel Library (MKL).
|
||||
As of Intel oneAPI 2021.2, loading only the MKL component does not
|
||||
make all of its dependencies available. In particular, the ``iomp5``
|
||||
library must be available separately, or provided by also loading
|
||||
the compiler component environment:
|
||||
|
||||
For example, to use Intel MKL libraries and/or Intel compiler:
|
||||
.. code-block:: shell
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
set(BLA_VENDOR Intel10_64lp)
|
||||
find_package(BLAS)
|
||||
|
||||
Hints
|
||||
^^^^^
|
||||
|
||||
``MKLROOT``
|
||||
.. versionadded:: 3.15
|
||||
|
||||
Set this environment variable to a directory that contains an MKL
|
||||
installation, or add the directory to the dynamic library loader environment
|
||||
variable for your platform (``LIB``, ``DYLD_LIBRARY_PATH`` or
|
||||
``LD_LIBRARY_PATH``).
|
||||
. /opt/intel/oneapi/compiler/latest/env/vars.sh
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
# The approach follows that of the ``autoconf`` macro file, ``acx_blas.m4``
|
||||
# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_blas.html).
|
||||
|
||||
# Check the language being used
|
||||
if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED))
|
||||
if(BLAS_FIND_REQUIRED)
|
||||
|
@@ -8,11 +8,11 @@ FindLAPACK
|
||||
Find Linear Algebra PACKage (LAPACK) library
|
||||
|
||||
This module finds an installed Fortran library that implements the
|
||||
LAPACK linear-algebra interface (see http://www.netlib.org/lapack/).
|
||||
`LAPACK linear-algebra interface`_.
|
||||
|
||||
The approach follows that taken for the ``autoconf`` macro file,
|
||||
``acx_lapack.m4`` (distributed at
|
||||
http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html).
|
||||
At least one of the ``C``, ``CXX``, or ``Fortran`` languages must be enabled.
|
||||
|
||||
.. _`LAPACK linear-algebra interface`: http://www.netlib.org/lapack/
|
||||
|
||||
Input Variables
|
||||
^^^^^^^^^^^^^^^
|
||||
@@ -23,58 +23,8 @@ The following variables may be set to influence this module's behavior:
|
||||
if ``ON`` use static linkage
|
||||
|
||||
``BLA_VENDOR``
|
||||
If set, checks only the specified vendor, if not set checks all the
|
||||
possibilities. List of vendors valid in this module:
|
||||
|
||||
* ``FlexiBLAS``
|
||||
* ``OpenBLAS``
|
||||
* ``FLAME``
|
||||
* ``Intel10_32`` (intel mkl v10 32 bit, threaded code)
|
||||
* ``Intel10_64lp`` (intel mkl v10+ 64 bit, threaded code, lp64 model)
|
||||
* ``Intel10_64lp_seq`` (intel mkl v10+ 64 bit, sequential code, lp64 model)
|
||||
* ``Intel10_64ilp`` (intel mkl v10+ 64 bit, threaded code, ilp64 model)
|
||||
* ``Intel10_64ilp_seq`` (intel mkl v10+ 64 bit, sequential code, ilp64 model)
|
||||
* ``Intel10_64_dyn`` (intel mkl v10+ 64 bit, single dynamic library)
|
||||
* ``Intel`` (obsolete versions of mkl 32 and 64 bit)
|
||||
* ``ACML``
|
||||
* ``Apple``
|
||||
* ``NAS``
|
||||
* ``Arm``
|
||||
* ``Arm_mp``
|
||||
* ``Arm_ilp64``
|
||||
* ``Arm_ilp64_mp``
|
||||
* ``EML``
|
||||
* ``EML_mt``
|
||||
* ``Fujitsu_SSL2`` (Fujitsu serial blas / lapack)
|
||||
* ``Fujitsu_SSL2BLAMP`` (Fujitsu parallel blas / lapack)
|
||||
* ``NVHPC``
|
||||
* ``Generic``
|
||||
|
||||
.. versionadded:: 3.6
|
||||
``OpenBLAS`` support.
|
||||
|
||||
.. versionadded:: 3.11
|
||||
``FLAME`` support.
|
||||
|
||||
.. versionadded:: 3.13
|
||||
Added ILP64 MKL variants (``Intel10_64ilp``, ``Intel10_64ilp_seq``).
|
||||
|
||||
.. versionadded:: 3.17
|
||||
Added single dynamic library MKL variant (``Intel10_64_dyn``).
|
||||
|
||||
.. versionadded:: 3.18
|
||||
Arm Performance Libraries support (``Arm``, ``Arm_mp``, ``Arm_ilp64``,
|
||||
``Arm_ilp64_mp``).
|
||||
|
||||
.. versionadded:: 3.19
|
||||
``FlexiBLAS`` support.
|
||||
|
||||
.. versionadded:: 3.20
|
||||
Elbrus Math Library support (``EML``, ``EML_mt``).
|
||||
Fujitsu SSL2 Library support (``Fujitsu_SSL2``, ``Fujitsu_SSL2BLAMP``)
|
||||
|
||||
.. versionadded:: 3.21
|
||||
NVHPC support
|
||||
Set to one of the :ref:`BLAS/LAPACK Vendors` to search for BLAS only
|
||||
from the specified vendor. If not set, all vendors are considered.
|
||||
|
||||
``BLA_F95``
|
||||
if ``ON`` tries to find the BLAS95/LAPACK95 interfaces
|
||||
@@ -88,11 +38,11 @@ The following variables may be set to influence this module's behavior:
|
||||
Imported targets
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
.. versionadded:: 3.18
|
||||
|
||||
This module defines the following :prop_tgt:`IMPORTED` target:
|
||||
This module defines the following :prop_tgt:`IMPORTED` targets:
|
||||
|
||||
``LAPACK::LAPACK``
|
||||
.. versionadded:: 3.18
|
||||
|
||||
The libraries to use for LAPACK, if found.
|
||||
|
||||
Result Variables
|
||||
@@ -113,19 +63,28 @@ This module defines the following variables:
|
||||
``LAPACK95_FOUND``
|
||||
library implementing the LAPACK95 interface is found
|
||||
|
||||
.. note::
|
||||
Intel MKL
|
||||
^^^^^^^^^
|
||||
|
||||
C, CXX or Fortran must be enabled to detect a BLAS/LAPACK library.
|
||||
C or CXX must be enabled to use Intel Math Kernel Library (MKL).
|
||||
To use the Intel MKL implementation of LAPACK, a project must enable at least
|
||||
one of the ``C`` or ``CXX`` languages. Set ``BLA_VENDOR`` to an Intel MKL
|
||||
variant either on the command-line as ``-DBLA_VENDOR=Intel10_64lp`` or in
|
||||
project code:
|
||||
|
||||
For example, to use Intel MKL libraries and/or Intel compiler:
|
||||
.. code-block:: cmake
|
||||
|
||||
.. code-block:: cmake
|
||||
set(BLA_VENDOR Intel10_64lp)
|
||||
find_package(LAPACK)
|
||||
|
||||
In order to build a project using Intel MKL, and end user must first
|
||||
establish an Intel MKL environment. See the :module:`FindBLAS` module
|
||||
section on :ref:`Intel MKL` for details.
|
||||
|
||||
set(BLA_VENDOR Intel10_64lp)
|
||||
find_package(LAPACK)
|
||||
#]=======================================================================]
|
||||
|
||||
# The approach follows that of the ``autoconf`` macro file, ``acx_lapack.m4``
|
||||
# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html).
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_LOADED)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake)
|
||||
else()
|
||||
|
Reference in New Issue
Block a user