CUDA CSR Matrix-Matrix产品自行转置

问题描述 投票:-1回答:2

我有一个非常大的,非常稀疏的最小二乘设计矩阵(A),我想自己乘以,如下:N = A ^ T * A,其中A和N以CSR格式存储。显然,A的行数多于列数。我通常直接逐行地形成N,但是在CSR的情况下,我必须首先形成图形,以便确定N的哪些元素是非零的。我可以做到这一点(甚至有一些旧的c代码),但我希望得到一个开发较少的解决方案。我正在使用CUDA,所以这可以在GPU或CPU上完成,在那里我可以看到使用GPU的优势。我已经勾勒出一个算法,但希望这个问题已经解决了。除了直接的A * x = l QR求解器(其中A =(m,n)),我在CUDA工具箱中找不到任何东西。谷歌也不是很有帮助。

我正在使用C ++。

有没有人有这方面的经验?

c++ cuda sparse-matrix blas csr
2个回答
3
投票

订购general COO sparse matrix into CSR/CSC format,特别是transposition / conversion between CSR and CSC formats是相对便宜的操作,并且在cuSPARSE library中很容易获得。

在将矩阵A从CSR格式转换为CSC之后,您可以轻松应用平凡算法来计算N = A ^ T * A. 通过让每个线程处理A的一列来生成一个输出,这也可以很容易地与CUDA并行化。


1
投票

刚刚注意到CUDA工具包中的cuSparse实际上有一个csr-gemm,它支持在任一矩阵上进行转置。我不知道我是怎么忽视这一点的。见https://docs.nvidia.com/cuda/cusparse/index.html#cusparse-lt-t-gt-csrgemm。看起来像最简单的解决方案......

© www.soinside.com 2019 - 2024. All rights reserved.