FindBLAS

查找已安装的 Basic Linear Algebra Subprograms (BLAS) Fortran 库,该库实现了 BLAS 线性代数接口

find_package(BLAS [...])

必须启用 CCXXFortran 中的至少一种语言。

导入的目标

此模块提供以下 导入目标

BLAS::BLAS

在 3.18 版本中新增。

封装用于使用 BLAS 的库和使用要求的目标,仅在找到 BLAS 时可用。

结果变量

此模块定义了以下变量

BLAS_FOUND

布尔值,指示是否找到了实现 BLAS 接口的库。

BLAS_LINKER_FLAGS

必需的链接器标志(不包括 -l-L)的未缓存列表。

BLAS_LIBRARIES

要链接以使用 BLAS 的库(使用完整路径名)的未缓存列表(如果编译器隐式链接 BLAS,则可能为空)。

BLAS95_LIBRARIES

要链接以使用 BLAS95 接口的库(使用完整路径名)的未缓存列表。

BLAS95_FOUND

布尔值,指示是否找到了实现 BLAS95 接口的库。

输入变量

可以设置以下变量来影响此模块的行为:

BLA_STATIC

如果为 ON,则将使用静态链接。

BLA_VENDOR

设置为 BLAS/LAPACK 供应商 中的一个,以仅从指定供应商搜索 BLAS。如果未设置,则考虑所有供应商。

BLA_F95

如果为 ON,则模块尝试查找 BLAS95 接口。

BLA_PREFER_PKGCONFIG

3.11 版本新增。

如果设置,将首先使用 pkg-config 搜索 BLAS 库,如果找到一个,则优先选择它。

BLA_PKGCONFIG_BLAS

在 3.25 版本中新增。

如果设置,pkg-config 方法将查找此模块名称,而不是仅查找 blas

BLA_SIZEOF_INTEGER

3.22 版本新增。

指定 BLAS/LAPACK 库的整数大小。

4

搜索具有 32 位整数接口的 BLAS/LAPACK。

8

搜索具有 64 位整数接口的 BLAS/LAPACK。

ANY

搜索任何 BLAS/LAPACK。最有可能找到的是具有 32 位整数接口的 BLAS/LAPACK。

BLA_THREAD

在 4.1 版本中新增。

指定 BLAS/LAPACK 线程模型。

SEQ

顺序模型。

OMP

OpenMP 模型。

ANY

搜索任何 BLAS/LAPACK,如果两者都可用,最有可能找到 OMP

目前仅支持 NVIDIA NVPL。

BLAS/LAPACK 供应商

Generic

通用参考实现。

ACML, ACML_MP, ACML_GPU

AMD Core Math Library。

AOCL, AOCL_mt

在 3.27 版本中新增。

AMD 优化 CPU 库。

Apple, NAS

Apple BLAS (Accelerate) 和 Apple NAS (vecLib)。

Arm, Arm_mp, Arm_ilp64, Arm_ilp64_mp

在 3.18 版本中新增。

Arm Performance Libraries。

ATLAS

自动调优线性代数软件。

CXML, DXML

Compaq/Digital 扩展数学库。

EML, EML_mt

在 3.20 版本中添加。

Elbrus 数学库。

FLAME

3.11 版本新增。

BLIS Framework。

FlexiBLAS

3.19 版本新增。

Fujitsu_SSL2, Fujitsu_SSL2BLAMP, Fujitsu_SSL2SVE, Fujitsu_SSL2BLAMPSVE

在 3.20 版本中添加。

Fujitsu SSL2 串行和并行 blas/lapack,支持 SVE 指令。

Goto

GotoBLAS。

IBMESSL, IBMESSL_SMP

IBM 工程和科学子程序库。

Intel

Intel MKL 32 位和 64 位过时版本。

Intel10_32

Intel MKL v10 32 位,带线程代码。

Intel10_64lp

Intel MKL v10+ 64 位,带线程代码,lp64 模型。

Intel10_64lp_seq

Intel MKL v10+ 64 位,顺序代码,lp64 模型。

Intel10_64ilp

3.13 版本新增。

Intel MKL v10+ 64 位,带线程代码,ilp64 模型。

Intel10_64ilp_seq

3.13 版本新增。

Intel MKL v10+ 64 位,顺序代码,ilp64 模型。

Intel10_64_dyn

在 3.17 版本中添加。

Intel MKL v10+ 64 位,单个动态库。

libblastrampoline

3.30 版本新增。

一个使用 PLT 蹦床的 BLAS/LAPACK 解复用库。

NVPL

在 4.1 版本中新增。

NVIDIA Performance Libraries。

NVHPC

3.21 版本新增。

NVIDIA HPC SDK。

OpenBLAS

3.6 版本新增。

PhiPACK

Portable High Performance ANSI C (PHiPAC)。

SCSL, SCSL_mp

Scientific Computing Software Library。

SGIMATH

SGI Scientific Mathematical Library。

SunPerf

Sun Performance Library。

Intel MKL

要使用 Intel MKL 的 BLAS 实现,项目必须至少启用一种 CCXX 语言。在命令行中设置 BLA_VENDOR 为 Intel MKL 变体,例如 -DBLA_VENDOR=Intel10_64lp,或者在项目代码中设置。

set(BLA_VENDOR Intel10_64lp)
find_package(BLAS)

为了构建使用 Intel MKL 的项目,最终用户必须首先建立一个 Intel MKL 环境。

Intel oneAPI

源文件 Intel 全局环境脚本。

. /opt/intel/oneapi/setvars.sh

或者,源文件 MKL 组件环境脚本。

. /opt/intel/oneapi/mkl/latest/env/vars.sh
Intel Classic

源文件 Intel 全局环境脚本。

. /opt/intel/bin/compilervars.sh intel64

或者,源文件 MKL 组件环境脚本。

. /opt/intel/mkl/bin/mklvars.sh intel64

上述环境脚本会将 MKLROOT 环境变量设置为 MKL 安装的根目录。它们还将运行时库的位置添加到您平台的动态库加载器环境变量(例如 LD_LIBRARY_PATH)。这对于链接到 MKL 的程序运行是必需的。

注意

从 Intel oneAPI 2021.2 开始,仅加载 MKL 组件并不能使所有其依赖项可用。特别是,iomp5 库必须单独可用,或者通过也加载编译器组件环境来提供。

. /opt/intel/oneapi/compiler/latest/env/vars.sh

示例

查找 BLAS 并将其链接到项目目标。

find_package(BLAS)
target_link_libraries(example PRIVATE BLAS::BLAS)