ArrayFire C++稀疏矩阵乘法触发访问违例问题求助
ArrayFire稀疏矩阵乘法触发af.dll访问违例(错误码0xC0000005)
问题描述
使用ArrayFire处理稀疏矩阵时,af.dll内部触发访问违例(错误码0xC0000005),该问题在CUDA和CPU后端均可复现。执行稀疏矩阵与自身相乘,或与非稀疏矩阵相乘时均会失败。
测试代码
af::info(); af_print(af::randu(5, 4)); float v[] = {5, 8, 3, 6}; int r[] = {0, 0, 2, 3, 4}; int c[] = {0, 1, 2, 1}; const int M = 4, N = 4, nnz = 4; af::array vals = af::array(af::dim4(nnz), v); af::array row_ptr = af::array(af::dim4(M + 1), r); af::array col_idx = af::array(af::dim4(nnz), c); af_print(vals); af_print(row_ptr); af_print(col_idx); // Create sparse array (CSR) from af::arrays containing values, // row pointers, and column indices. auto sparseM = af::sparse(M, N, vals, row_ptr, col_idx, AF_STORAGE_CSR); af_print(sparseM); auto res = sparseM * sparseM; af_print(res);
环境配置
- 操作系统:Windows 11
- 编译工具链:Visual Studio Build tool 2022 + VSCode CMake
- 硬件设备:NVIDIA GTX 1050 Ti 及 Intel UHD Graphics 630 双GPU
- ArrayFire版本:v3.8.3
报错详情
代码执行到auto res = sparseM * sparseM;时触发访问违例,调试调用栈指向af.dll中的乘法运算符实现。
已尝试方案
- 切换CUDA、GPU、OpenCL后端,问题未解决
- 更换稀疏矩阵存储格式,报错时机有差异,但核心问题依旧存在
内容的提问来源于stack exchange,提问作者Daniel Rohrbach
相关产品推荐
相关产品推荐

