我在CUDA程序中有CSR格式的稀疏矩阵。当我尝试使用CUSP :: convert()将其转换为HYB格式时,我得到一个空矩阵-(0行,0 cols和0项)。如果我打印转换后的矩阵的ELL和COO分量,则会得到ELL部分的0个条目。所有条目均打印在COO部分下方。我知道这可能是由于矩阵的稀疏模式造成的,但是为什么我要为HYB格式的汇总矩阵获取 <0,0>的条目为0 。此外,我已经观察到我尝试过的每个矩阵的这种行为。
以下程序重现了该问题。
#include <cusp/csr_matrix.h>
#include <cusp/gallery/poisson.h>
#include <cusp/multiply.h>
#include <cusp/print.h>
#include <stdio.h>
int main()
{
cusp::csr_matrix<int,double,cusp::device_memory> A_csr;
cusp::hyb_matrix<int,double,cusp::device_memory> A_hyb;
//Create a sparse 5*5 test matrix
cusp::gallery::poisson5pt(A_csr, 5, 1);
//Convert the test matrix to HYB format
cusp::convert(A_csr, A_hyb);
printf("\n A in CSR format\n");
cusp::print(A_csr);
printf("\n A in HYB format\n");
cusp::print(A_hyb); //prints an empty matrix
printf("\n ELL component of A in HYB format\n");
cusp::print(A_hyb.ell); //prints an empty matrix
printf("\n COO component of A in HYB format\n");
cusp::print(A_hyb.coo); //prints all the entries of A
}
我得到以下输出
A in CSR format
sparse matrix <5, 5> with 13 entries
0 0 (4)
0 1 (-1)
1 0 (-1)
1 1 (4)
1 2 (-1)
2 1 (-1)
2 2 (4)
2 3 (-1)
3 2 (-1)
3 3 (4)
3 4 (-1)
4 3 (-1)
4 4 (4)
A in HYB format
sparse matrix <0, 0> with 0 entries
ELL component of A in HYB format
sparse matrix <5, 5> with 0 entries
COO component of A in HYB format
sparse matrix <5, 5> with 13 entries
0 0 (4)
0 1 (-1)
1 0 (-1)
1 1 (4)
1 2 (-1)
2 1 (-1)
2 2 (4)
2 3 (-1)
3 2 (-1)
3 3 (4)
3 4 (-1)
4 3 (-1)
4 4 (4)
如果有人在我的转换过程中确定了 问题 ,或者建议了其他一些 功能来自动从CSR / CUSP库的COO到HYB格式 ? cuSparse具有这样的功能,但是会产生不透明的对象。此外,cuSparse不具有HYB格式的矩阵的矩阵乘法功能。