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