FindBLAS

查找基本线性代数子程序 (BLAS) 库

此模块查找已安装的 Fortran 库,该库实现了 BLAS 线性代数接口

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

输入变量

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

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。

导入目标

此模块定义以下 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

Compaq/Digital 扩展数学库

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 trampoline 的 BLAS/LAPACK 解复用库

NVHPC

在 3.21 版本中新增。

NVIDIA HPC SDK

OpenBLAS

在 3.6 版本中新增。

PhiPACK

可移植高性能 ANSI C (PHiPAC)

SCSL, SCSL_mp

科学计算软件库

SGIMATH

SGI 科学数学库

SunPerf

Sun 性能库

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