如何解决当稀疏矩阵变得太大时,Cholmod 通过 Eigen 失败Int Overflow 错误
我正在尝试在基于 Eigen libary c++ 的项目中使用 Cholmod 超节点求解器解决 Ax=b
(我通过 Eigen 调用 cholmod),A
是一个维度为 5Mx5M 的稀疏矩阵,我有这些错误运行时:
CHOLMOD error: problem too large. file: C:\suitesparse\SuiteSparse\CHOLMOD\Include\../Supernodal/cholmod_super_symbolic.c line: 683
CHOLMOD error: argument missing. file: C:\suitesparse\SuiteSparse\CHOLMOD\Include\../Cholesky/cholmod_factorize.c line: 121
这是文件 cholmod_super_symbolic.c line: 683
中 cholmod 源代码的一部分,我认为第二个错误是由于第一个。
if (ssize < 0 ||(find_xsize && xxsize > Int_max))
{
/* Int overflow,clear workspace and return.
QR factorization will not use xxsize,so that error is ignored.
For Cholesky factorization,however,memory of space xxsize
will be allocated,so this is a failure. Both QR and Cholesky
fail if ssize overflows. */
ERROR (CHOLMOD_TOO_LARGE,"problem too large") ;
FREE_WORKSPACE ;
return (FALSE) ;
}
我想可能是因为 int 索引溢出,但我不知道如何修复它,我尝试了较小的矩阵并且效果很好。此外,我试图将特征定义(_StorageIndex
)中稀疏矩阵 A 的 int
从 long int
更改为 Eigen::SparseMatrix<double,long int > SPaMtr
,但我有这个编译错误:{{1} }.
解决方法
我在求解 30Mx30M 线性系统时遇到了同样的问题。我根据你的解释解决了这个问题。首先,您应该检查内存是否足够。然后,您可以为程序中的每个稀疏矩阵转换索引存储的类型,例如 SparseMatrix
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。