【问题标题】:CUSPARSE_STATUS_INTERNAL_ERROR with cuSparse cusparseSnnz function带有 cuSparse cusparseSnnz 函数的 CUSPARSE_STATUS_INTERNAL_ERROR
【发布时间】:2012-10-06 02:16:36
【问题描述】:

我正在尝试熟悉 cuSparse 库。在我的简单代码中,函数 cusparseSnnz 返回状态 6,即 CUSPARSE_STATUS_INTERNAL_ERROR。我认为正确安装了 CUDA 驱动程序和 cuSparse 库。如果有人可以帮助我,我将不胜感激。谢谢。

cusparseStatus_t status;
cusparseHandle_t handle=0;
cusparseMatDescr_t descr=0;

status = cusparseCreate(&handle);
if (status != CUSPARSE_STATUS_SUCCESS) {
    cout << "CUSPARSE Library initialization failed" << endl;
}
status = cusparseCreateMatDescr(&descr);
if (status != CUSPARSE_STATUS_SUCCESS) {
    cout << "Matrix descriptor initialization failed" << endl;
}
status = cusparseSetMatType(descr, CUSPARSE_MATRIX_TYPE_GENERAL);
if (status != CUSPARSE_STATUS_SUCCESS) {
    cout << "cusparseSetMatType failed" << endl;
}
status = cusparseSetMatIndexBase(descr, CUSPARSE_INDEX_BASE_ZERO);
if (status != CUSPARSE_STATUS_SUCCESS) {
    cout << "cusparseSetMatIndexBase failed" << endl;
}
int nnzPerRow[2];
int nnzTotal;
float tempf[6];
tempf[0] = 1.0;
tempf[1] = 0.0;
tempf[2] = 3.4;
tempf[3] = 0.0;
tempf[4] = 2.2;
tempf[5] = 8.6;
float* d_Temp;
cudaMalloc((void**)&d_Temp, sizeof(float)*6);
cudaMemcpy(d_Temp, tempf, sizeof(float)*6, cudaMemcpyHostToDevice);
status = cusparseSnnz(handle, CUSPARSE_DIRECTION_ROW, 2, 3, descr, d_Temp, 2, nnzPerRow, &nnzTotal);
if (status != CUSPARSE_STATUS_SUCCESS) {
    cout << "nnz calculation failed" << endl;
    cout << "status = " << status << endl;
}
cout << "nnzPerRow[0] = " << nnzPerRow[0] << endl;
cout << "nnzPerRow[1] = " << nnzPerRow[1] << endl;

【问题讨论】:

    标签: cuda sparse-matrix


    【解决方案1】:

    我刚刚发现出了什么问题。 nnzPerRow 需要位于设备中。

    int nnzPerRow[2]; 
    

    应该如下:

    int* nnzPerRow=0;
    checkCudaErrors(cudaMalloc((void**)&nnzPerRow, sizeof(int)*2));
    

    【讨论】:

      猜你喜欢
      • 2015-12-30
      • 2020-07-13
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      相关资源
      最近更新 更多