0

使用示例文件运行CuSolverRf 示例,并允许程序顺利运行。但是,当我插入自己的文件时,在第 8 步之后出现错误:.mtxlap2D_5pt_n100.mtxlap3D_7pt_n20.mtx.mtx

“cuSolverRF.ccp 处的 CUDA 错误:649 代码 = 2...”

我已将问题缩小到这里:

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 回答