正在查找 LAPACK/BLAS 错误代码的列表
Looking for a List of LAPACK/BLAS Error code
我正在使用 LAPACK 的 zheev(在英特尔 MKL 中)。我得到了int INFO=99
。我一直在互联网上搜索这对应的内容,但我找不到包含所有整数错误代码及其含义列表的文档。
有人有 LAPACK/BLAS 错误代码完整列表的链接吗?或者如果你有一个离线的,你可以复制粘贴作为答案吗?
根据 documentation of LAPACK, the output INFO
reports two kinds of error. On the one hand, if INFO<0
, parameter -INFO
has an illegal value. Parameters are numbered as 1,2,3,... : no 0 (Fortran). For instance, the size of the matrix is negative. On the other hand, INFO>0
reports a computational failure.
实际失败的原因在提示错误的例程的注释中描述。例如,对于zheev()
,它是这样写的:
0: if INFO = i, the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero.
查看 zheev()
的来源,矩阵被缩放,简化为三角形式,然后不需要特征向量并调用 dsterf()
,或者计算特征向量并调用 zungtr()
以形成从反射器开始的酉矩阵 Q,调用 zsteqr()
计算三对角矩阵的特征值和特征向量。因此,输出 INFO 由 dsterf()
或 zsteqr()
设置。
关于zsteqr()
, the value of INFO is incremented at line 536, each time an error remains non-null after the maximum number of iterations. Some cases potentially leading to failure of QR iterations are reported in section 1.3.6 Failure of Global convergence in Numerical Methods for General and Structured Eigenvalue Problems by Daniel Kressner. Nevertheless, the errors are often due to programming error列为:
错误的数组类型。例如,zheev()
需要复数双精度数组,即 Fortran 中的 DOUBLE COMPLEX
或 COMPLEX*16
。如果使用 COMPLEX*8
,它可能会导致未定义的行为,并且可能会导致正信息。
数组(矩阵和向量)可能在 运行 LAPACK 例程之前已损坏。对于zheev()
,可能是由数组中的INF或NaN引起的。
调用例程时出现编程错误。例如,参数 LDA
是数组 A
的前导维度。检查 LDA >= max(1,N) 和 returns INFO=-5
如果不强制执行此条件。然而,没有什么能阻止程序员分配和数组 A
或大小 n*n
并指定 LDA=2*n
,这将导致未定义的行为,因为将使用超出范围的数组索引。同样,可能的行为是返回 INFO=99
.
最后,LAPACK 语言的 LAPACKE 包装器 C/C++ 自动关心工作数组的分配。因此,它还定义了错误代码,例如 LAPACK_WORK_MEMORY_ERROR
和 LAPACK_TRANSPOSE_MEMORY_ERROR
,在 info
中返回,在 lapacke.h 中返回:
#define LAPACK_WORK_MEMORY_ERROR -1010
#define LAPACK_TRANSPOSE_MEMORY_ERROR -1011
不要犹豫,在 Whosebug 上提问,报告错误和一段重要的代码,以及对不良行为的描述。理想情况下,这段代码是重现错误的示例代码。但是一段显示数组分配和输入值的代码就足够了。
我正在使用 LAPACK 的 zheev(在英特尔 MKL 中)。我得到了int INFO=99
。我一直在互联网上搜索这对应的内容,但我找不到包含所有整数错误代码及其含义列表的文档。
有人有 LAPACK/BLAS 错误代码完整列表的链接吗?或者如果你有一个离线的,你可以复制粘贴作为答案吗?
根据 documentation of LAPACK, the output INFO
reports two kinds of error. On the one hand, if INFO<0
, parameter -INFO
has an illegal value. Parameters are numbered as 1,2,3,... : no 0 (Fortran). For instance, the size of the matrix is negative. On the other hand, INFO>0
reports a computational failure.
实际失败的原因在提示错误的例程的注释中描述。例如,对于zheev()
,它是这样写的:
0: if INFO = i, the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero.
查看 zheev()
的来源,矩阵被缩放,简化为三角形式,然后不需要特征向量并调用 dsterf()
,或者计算特征向量并调用 zungtr()
以形成从反射器开始的酉矩阵 Q,调用 zsteqr()
计算三对角矩阵的特征值和特征向量。因此,输出 INFO 由 dsterf()
或 zsteqr()
设置。
关于zsteqr()
, the value of INFO is incremented at line 536, each time an error remains non-null after the maximum number of iterations. Some cases potentially leading to failure of QR iterations are reported in section 1.3.6 Failure of Global convergence in Numerical Methods for General and Structured Eigenvalue Problems by Daniel Kressner. Nevertheless, the errors are often due to programming error列为:
错误的数组类型。例如,
zheev()
需要复数双精度数组,即 Fortran 中的DOUBLE COMPLEX
或COMPLEX*16
。如果使用COMPLEX*8
,它可能会导致未定义的行为,并且可能会导致正信息。数组(矩阵和向量)可能在 运行 LAPACK 例程之前已损坏。对于
zheev()
,可能是由数组中的INF或NaN引起的。调用例程时出现编程错误。例如,参数
LDA
是数组A
的前导维度。检查 LDA >= max(1,N) 和 returnsINFO=-5
如果不强制执行此条件。然而,没有什么能阻止程序员分配和数组A
或大小n*n
并指定LDA=2*n
,这将导致未定义的行为,因为将使用超出范围的数组索引。同样,可能的行为是返回INFO=99
.
最后,LAPACK 语言的 LAPACKE 包装器 C/C++ 自动关心工作数组的分配。因此,它还定义了错误代码,例如 LAPACK_WORK_MEMORY_ERROR
和 LAPACK_TRANSPOSE_MEMORY_ERROR
,在 info
中返回,在 lapacke.h 中返回:
#define LAPACK_WORK_MEMORY_ERROR -1010
#define LAPACK_TRANSPOSE_MEMORY_ERROR -1011
不要犹豫,在 Whosebug 上提问,报告错误和一段重要的代码,以及对不良行为的描述。理想情况下,这段代码是重现错误的示例代码。但是一段显示数组分配和输入值的代码就足够了。