LAPACKE#

LAPACKE API 是一组 LAPACK 的 C 接口。对于每个主要的标准 LAPACK 例程 <fname>,都有两个对应的 LAPACKE 函数:LAPACKE_<fname>(高层级)和 LAPACKE_<fname>_work(中层级)。有关更详细的描述,请参见下表。

LAPACKE 接口类型#

接口类型

命名约定

描述

高层级

LAPACKE_<fname>

为 LAPACK 临时工作数组和转置执行必要的内存分配。如果未禁用,则对输入数组执行 NaN 检查。

中层级

LAPACKE_<fname>_work

LAPACK 工作数组由用户分配,库管理转置的内存。不对输入数组执行 NaN 检查。

作用于矩阵的 LAPACK 例程将在其对应的 LAPACKE 接口上有一个额外的参数 matrix_layout,以指示矩阵是列优先 (LAPACK_COL_MAJOR) 还是行优先 (LAPACK_ROW_MAJOR) 布局。

info 参数由 LAPACKE 函数返回,而不是作为参数传递。除了通常的 LAPACK 错误代码之外,还添加了两个额外的错误代码用于错误处理

LAPACKE 附加错误代码#

错误代码 (info)

描述

LAPACK_WORK_MEMORY_ERROR

没有足够的内存来分配 LAPACK 工作数组。

LAPACK_TRANSPOSE_MEMORY_ERROR

没有足够的内存来分配转置所需的缓冲区。

注意

即使 LAPACKE 是一个 C 接口,返回和使用的索引也是从 1 开始的索引,而不是从 0 开始的索引。

有关 LAPACKE 函数签名和对应 Fortran LAPACK 例程的描述,请参见 LAPACK。有关 LAPACKE 的更多详细信息,请查看 Netlib 文档

NaN 检查#

默认情况下,LAPACKE 接口检查输入的 NaN。如果找到 NaN,则返回值 info 将指示哪个输入是错误的。可以通过将环境变量 LAPACKE_NANCHECK 设置为 0 或使用函数 LAPACKE_set_nancheck```LAPACKE_set_nancheck` 在运行时禁用 NaN 检查操作。

注意

NaN 检查可能会显着影响 LAPACKE 函数的性能。如果已知输入没有 NaN,请考虑禁用它。

LAPACKE_get_nancheck()#

int LAPACKE_get_nancheck(void)#

返回当前的 NaN 检查行为。

  • 0:禁用 NaN 检查。

  • 1:启用 NaN 检查。

LAPACKE_set_nancheck()#

void LAPACKE_set_nancheck(int flag)#

设置由 flag 指示的当前 NaN 检查行为。

  • 0:禁用 NaN 检查。

  • 1:启用 NaN 检查。

或者,也可以使用环境变量 LAPACKE_NANCHECK 来禁用 NaN 检查。