簡體   English   中英

當稀疏矩陣變得太大時,通過 Eigen 的 Cholmod 失敗(Int 溢出錯誤)

[英]Cholmod via Eigen fails when sparse matrix becomes too large (Int Overflow error)

我正在嘗試在基於 Eigen 庫 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 索引溢出但我不知道如何修復它,我嘗試了更小的矩陣並且效果很好。 我還嘗試將_StorageIndexint更改為 Eigen 定義( Eigen::SparseMatrix<double,0,long int > SPaMtr long int中稀疏矩陣 A 的 long int,但我有這個編譯錯誤: cannot convert argument 3 from 'const long *' to 'const int *'

當我解決一個 30Mx30M 線性系統時,我遇到了同樣的問題。 我根據你的解釋解決了這個問題。 首先,您應該檢查 memory 是否足夠。 然后,您可以為程序中的每個稀疏矩陣轉換索引存儲的類型,例如 SparseMatrix<double, ColMajor, long int>。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM