0

サンプルファイルを使用してCuSolverRf サンプルを実行すると、プログラムをスムーズに実行できます。ただし、自分のファイルに挿入すると、手順 8 の後にエラーが発生します。.mtxlap2D_5pt_n100.mtxlap3D_7pt_n20.mtx.mtx

「cuSolverRF.ccp:649 code=2 で CUDA エラーが発生しました...」

問題をここまで絞り込みました。

checkCudaErrors(cusolverRfSetupHost(
    rowsA, nnzA, 
    h_csrRowPtrA, h_csrColIndA, h_csrValA,
    nnzL, 
    h_csrRowPtrL, h_csrColIndL, h_csrValL, 
    nnzU, 
    h_csrRowPtrU, h_csrColIndU, h_csrValU, 
    h_P, 
    h_Q, 
    cusolverRfH));

どちらにジャンプしますか

    void check(T result, char const *const func, const char *const file, int const line)
{
    if (result)
    {
        fprintf(stderr, "CUDA error at %s:%d code=%d(%s) \"%s\" \n",
                file, line, static_cast<unsigned int>(result), _cudaGetErrorEnum(result), func);
        DEVICE_RESET
        // Make sure we call CUDA Device Reset before exiting
        exit(EXIT_FAILURE);
    }
}

私の質問は、「結果」がどのように導き出されるかです。問題を克服するために何ができるか、または何が間違っていますか?

追加情報: 私の行列は 196530 x 196530 で、2530798 nnz です。

4

1 に答える 1

2

エラー コード2は次のCUSOLVER_STATUS_ALLOC_FAILEDとおりです。

cuSOLVER のドキュメントを引用します。

cuSolver ライブラリ内でリソースの割り当てに失敗しました。これは通常、cudaMalloc() の失敗が原因です。修正するには: 関数呼び出しの前に、以前に割り当てられたメモリの割り当てを可能な限り解除します。

これは、おそらく GPU のメモリを超えているため、マトリックスのメモリを割り当てることができなかったことを意味します。(ドキュメントに記載されているように) メモリの割り当てを解除するか、より小さい入力行列を使用するか、より多くのメモリを備えた GPU を使用してください。

于 2016-08-22T08:29:38.293 に答える