FindBLAS¶
查找基本线性代数子程序 (BLAS) 库
此模块查找已安装的 Fortran 库,该库实现了 BLAS 线性代数接口。
必须至少启用 C
、CXX
或 Fortran
语言中的一种。
输入变量¶
可以设置以下变量来影响此模块的行为:
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 支持此功能。
导入的目标¶
此模块定义了以下 IMPORTED
目标
BLAS::BLAS
在 3.18 版本中新增。
如果找到,用于 BLAS 的库。
结果变量¶
此模块定义了以下变量
BLAS_FOUND
实现了 BLAS 接口的库已找到
BLAS_LINKER_FLAGS
所需链接器标志的未缓存列表(不包括
-l
和-L
)。BLAS_LIBRARIES
用于链接 BLAS 的库的未缓存列表(使用完整路径名)(如果编译器隐式链接 BLAS,则可能为空)
BLAS95_LIBRARIES
用于链接 BLAS95 接口的库的未缓存列表(使用完整路径名)
BLAS95_FOUND
实现了 BLAS95 接口的库已找到
BLAS/LAPACK 供应商¶
通用
通用参考实现
ACML
、ACML_MP
、ACML_GPU
AMD 核心数学库
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 性能库
ATLAS
自动调整线性代数软件
CXML
、DXML
康柏/数字扩展数学库
EML
、EML_mt
在 3.20 版本中添加。
Elbrus 数学库
FLAME
3.11 版本新增。
BLIS 框架
FlexiBLAS
3.19 版本新增。
Fujitsu_SSL2
、Fujitsu_SSL2BLAMP
、Fujitsu_SSL2SVE
、Fujitsu_SSL2BLAMPSVE
在 3.20 版本中添加。
富士通 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 性能库
NVHPC
3.21 版本新增。
NVIDIA HPC SDK
OpenBLAS
3.6 版本新增。
PhiPACK
便携式高性能 ANSI C (PHiPAC)
SCSL
、SCSL_mp
科学计算软件库
SGIMATH
SGI 科学数学库
SunPerf
Sun 性能库
Intel MKL¶
要使用 BLAS 的 Intel MKL 实现,项目必须至少启用 C
或 CXX
语言中的一种。在命令行上将 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