Cuda cuSolverRf样本状态alloc失败

Cuda cuSolverRf样本状态alloc失败,cuda,malloc,cusolver,Cuda,Malloc,Cusolver,使用示例.mtx文件lap2D\u 5pt\u n100.mtx和lap3D\u 7pt\u n20.mtx运行可使程序平稳运行。但是,当我在自己的.mtx文件中插入时,在步骤8之后出现错误: “cuSolverRF.ccp处的CUDA错误:649代码=2…” 我把问题缩小到这里: checkCudaErrors(cusolverRfSetupHost( rowsA, nnzA, h_csrRowPtrA, h_csrColIndA, h_csrValA, nnzL,

使用示例
.mtx
文件
lap2D\u 5pt\u n100.mtx
lap3D\u 7pt\u n20.mtx
运行可使程序平稳运行。但是,当我在自己的
.mtx
文件中插入时,在步骤8之后出现错误:

“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);
    }
}
void检查(T结果、字符常量*常量函数、常量字符*常量文件、int常量行)
{
如果(结果)
{
fprintf(标准,“CUDA错误在%s:%d代码=%d(%s)\%s\”\n”,
文件、行、静态类型转换(结果)、cudaGetErrorEnum(结果)、函数;
设备复位
//确保在退出前调用CUDA设备重置
退出(退出失败);
}
}
我的问题是“结果”是如何得出的?我能做些什么来克服这个问题,或者我做错了什么


附加信息:我的矩阵是196530乘196530,北纬2530798

错误代码
2
对应于
CUSOLVER\u STATUS\u ALLOC\u FAILED

在cuSolver库中分配资源失败。这是 通常由cudamaloc()故障引起。 要更正:在函数调用之前,请先取消分配 尽可能多地分配内存


这意味着无法为矩阵分配内存,可能是因为GPU内存已超出。尝试释放内存(如文档中所述),使用较小的输入矩阵,或使用具有更多内存的GPU。

错误代码
2
对应于
CUSOLVER\u STATUS\u ALLOC\u FAILED

在cuSolver库中分配资源失败。这是 通常由cudamaloc()故障引起。 要更正:在函数调用之前,请先取消分配 尽可能多地分配内存


这意味着无法为矩阵分配内存,可能是因为GPU内存已超出。尝试释放内存(如文档中所述),使用较小的输入矩阵,或使用具有更多内存的GPU。

我尝试了如上所述的释放内存,但没有任何效果。在这一点上,解除分配不会删除GPU上存储的所有值吗?@ceeely是的,它会删除,但可能您在GPU内存中存储了cuSOLVER不需要的值(即上一步中的值)。在上下文中,我对GPU内存部分有怀疑,因为我使用的是旧GPU(Nvidia Quadro 4000)。如果这是原因,我想现在真的是时候进行急需的升级了。还有一件事:为了将来参考,您知道“result”值是如何创建的吗?@ceeely:这是
cusolverRfSetupHost
调用的返回值,通过
checkCudaErrors
预处理器宏传递,如前所述,我尝试取消分配,但没有任何效果。在这一点上,解除分配不会删除GPU上存储的所有值吗?@ceeely是的,它会删除,但可能您在GPU内存中存储了cuSOLVER不需要的值(即上一步中的值)。在上下文中,我对GPU内存部分有怀疑,因为我使用的是旧GPU(Nvidia Quadro 4000)。如果这是原因,我想现在确实是进行急需的升级的时候了。还有一件事:为了将来参考,您知道“result”值是如何创建的吗?@ceeely:它是通过
checkCudaErrors
预处理器宏传递的
cusolverRfSetupHost
调用的返回值