cusparseSdense2csr 转换

cusparseSdense2csr conversion

我正在尝试使用 cusparseSdense2csr API 将密集矩阵转换为稀疏矩阵,密集矩阵如下:

[ 0 1  0 3  0
  0 6  0 8  0
  0 11 0 13 0
  0 16 0 18 0 ]

预期的结果稀疏矩阵应为:

csrValA = {1,3,6,8,11,13,16,18}
csrRowPtrA = {0,2,4,6,8}
csrColIndA = {1,3,1,3,1,3,1,3}

但我得到的输出是

csrValA = {8,16,1,13,6,18,3,11}
csrRowPtrA = {0,2,4,6,8}
csrColIndA = {2,4,0,3,1,4,0,2}

为什么会这样?背后的原因是什么?

好吧,cusparse 似乎以列主格式存储密集矩阵。 我在相同

的文档中找到了它

http://docs.nvidia.com/cuda/cusparse/index.html#dense-format2

因此,尽管我们的输入矩阵如问题中所述,但 cusparse 将此密集矩阵以列主要格式存储在内存中。所以理想情况下,我们在内存中的输入矩阵变成类似于这样的东西:

[ 0  0  8  0  16
  1  0  0  13 0
  0  6  0  0  18
  3  0  11 0  0 ]

这解释了我得到的输出。