I am trying to get to know the cuSparse library. In my simple code, the cusparseSnnz function returns status 6, which is CUSPARSE_STATUS_INTERNAL_ERROR. I think the CUDA driver and cuSparse library are installed correctly. I would really appreciate it if anyone could help me. Thanks.
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;
source share