Cuda Cusp中的实标度稀疏矩阵向量乘法?

Cuda Cusp中的实标度稀疏矩阵向量乘法?,cuda,gpu,sparse-matrix,matrix-multiplication,cusp-library,Cuda,Gpu,Sparse Matrix,Matrix Multiplication,Cusp Library,在cusp中,有一个乘法来计算spmv(稀疏矩阵向量乘法),该乘法采用减法和组合: template <typename LinearOperator, typename MatrixOrVector1, typename MatrixOrVector2, typename UnaryFunction, typename BinaryFunction1, ty

在cusp中,有一个乘法来计算spmv(稀疏矩阵向量乘法),该乘法采用减法和组合:

 template <typename LinearOperator,
             typename MatrixOrVector1,
             typename MatrixOrVector2,
             typename UnaryFunction,
             typename BinaryFunction1,
             typename BinaryFunction2>
    void multiply(const LinearOperator&  A,
                  const MatrixOrVector1& B,
                  MatrixOrVector2& C,
                  UnaryFunction  initialize,
                  BinaryFunction1 combine,
                  BinaryFunction2 reduce);
我得到了下面的答案

device coo_matrix_view
sparse matrix <6, 7> with 13 entries
              0              0        (1)
              0              1        (1)
              1              1        (1)
              1              2        (1)
              2              2        (1)
              2              4        (1)
              2              6        (1)
              3              3        (1)
              3              4        (1)
              3              5        (1)
              4              5        (1)
              5              5        (1)
              5              6        (1)
x array
array1d <7>

        (1)
        (1)
        (1)
        (1)
        (1)
        (1)
        (1)
 y array, y = A * x
array1d <6>
        (4)
        (4)
        (6)
        (6)
        (2)
        (631)
所以我不确定这种联合和减少的替换是否可以适应其他稀疏矩阵格式,比如coo。或者我上面写的代码调用乘法是不正确的。 你能给我一些帮助吗?任何信息都会有帮助


谢谢大家!

通过对您的示例的代码和指令插入的非常简短的阅读,这似乎是CUSP中的一些严重缺陷导致了这个用例的问题。该代码仅在组合运算符为乘法的情况下意外正常工作,因为它对零元素执行的伪操作不会影响还原操作(即,它只是对大量附加零求和)

device coo_matrix_view
sparse matrix <6, 7> with 13 entries
              0              0        (1)
              0              1        (1)
              1              1        (1)
              1              2        (1)
              2              2        (1)
              2              4        (1)
              2              6        (1)
              3              3        (1)
              3              4        (1)
              3              5        (1)
              4              5        (1)
              5              5        (1)
              5              6        (1)
x array
array1d <7>

        (1)
        (1)
        (1)
        (1)
        (1)
        (1)
        (1)
 y array, y = A * x
array1d <6>
        (4)
        (4)
        (6)
        (6)
        (2)
        (631)
[9,
9,
10,
10,
8,
9]