我尝试使用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/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 ]
这解释了我得到的输出。