Fortran调用cuSparse实现BiCGStab遇CUSPARSE_INTERNAL_ERROR求助
cuSparse
*_analysis系列函数触发内部错误,BiCGStab实现失败求助 之前我因为提问不符合调试规范被标记为离题,现在按照要求整理了完整信息来寻求帮助:
问题概述
我正在尝试用cuSparse实现BiCGStab迭代求解器,但两次实现尝试都失败了,错误均来自cuSparse的*_analysis系列函数(比如cusparseSpMV_analysis这类),触发了内部错误。我已经精简了代码,去掉了错误发生后的所有无关逻辑,只保留了能复现问题的核心部分。
具体错误表现
调用*_analysis函数时,程序直接抛出内部错误,没有明确的错误码说明具体原因,导致无法定位问题根源。
最简可复现代码
尝试1:基于CSR格式的BiCGStab初始化
#include <cusparse.h> #include <cuda_runtime.h> int main() { cusparseHandle_t handle; cusparseCreate(&handle); // 简化的CSR矩阵参数(实际是符合格式的测试矩阵) int m = 100, n = 100, nnz = 300; int *d_csrRowPtr, *d_csrColInd; float *d_csrVal, *d_x, *d_b; cudaMalloc(&d_csrRowPtr, (m+1)*sizeof(int)); cudaMalloc(&d_csrColInd, nnz*sizeof(int)); cudaMalloc(&d_csrVal, nnz*sizeof(float)); cudaMalloc(&d_x, n*sizeof(float)); cudaMalloc(&d_b, m*sizeof(float)); // 填充测试数据(省略具体填充逻辑,确保格式合法) // ... cusparseSpMatDescr_t mat; cusparseCreateCsr(&mat, m, n, nnz, d_csrRowPtr, d_csrColInd, d_csrVal, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, CUDA_R_32F); cusparseDnVecDescr_t vec_x, vec_b; cusparseCreateDnVec(&vec_x, n, d_x, CUDA_R_32F); cusparseCreateDnVec(&vec_b, m, d_b, CUDA_R_32F); // 触发错误的分析函数调用 cusparseSpMVDescr_t spmv_descr; cusparseSpMV_createDescr(&spmv_descr); cusparseStatus_t status = cusparseSpMV_analysis(handle, CUSPARSE_OPERATION_NON_TRANSPOSE, &(float){1.0f}, mat, vec_x, &(float){0.0f}, vec_b, CUDA_R_32F, CUSPARSE_SPMV_ALG_DEFAULT, spmv_descr); if (status != CUSPARSE_STATUS_SUCCESS) { printf("cusparseSpMV_analysis failed with status: %d\n", status); // 实际运行时触发内部错误,程序崩溃 } // 资源释放(省略,因为错误发生在分析阶段) return 0; }
尝试2:基于ELL格式的BiCGStab初始化
// 类似结构,只是矩阵格式换成ELL cusparseCreateEll(&mat, m, n, nnz, d_ellColInd, d_ellVal, max_cols_per_row, CUSPARSE_INDEX_32I, CUSPARSE_INDEX_BASE_ZERO, CUDA_R_32F); // 同样调用cusparseSpMV_analysis时触发内部错误
我已经做的事情
- 验证了输入矩阵的格式合法性:CSR/ELL的行指针、列索引、数值数组都符合cuSparse的要求,没有越界或非法值。
- 精简了代码,去掉了所有错误发生后的迭代逻辑,确保问题只出在
*_analysis函数调用阶段。 - 尝试更换了不同的cuSparse版本(11.7和12.0),问题依然存在。
希望有熟悉cuSparse的开发者能帮我定位这个内部错误的原因,或者指出我在使用*_analysis函数时可能忽略的细节。
内容的提问来源于stack exchange,提问作者Guy P.
相关产品推荐
相关产品推荐

