0

我正在尝试使用 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}

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

4

1 回答 1

1

好吧,似乎 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 ]

这解释了我得到的输出。

于 2017-12-28T04:28:08.327 回答