2

我需要计算以下矩阵数学:
D * A
其中 D 是密集的,A 是稀疏的,采用 CSC 格式。
cuSPARSE 允许乘以稀疏 * 密集,其中稀疏矩阵采用 CSR 格式。

在一个相关问题之后,我可以简单地通过转置 A 将 CSC“转换”为 CSR。
我还可以计算 (A^T * D^T)^T,因为我可以处理转置的结果。
在这种方法中,我还可以避免“转置”A,因为 CSR^T 是 CSC。

唯一的问题是 cuSPARSE 在这个操作中不支持转置 D,所以我必须事先转置它,或者将它转换为 CSR,这完全是浪费,因为它非常密集。

有什么解决方法吗?
谢谢。

4

1 回答 1

1

我找到了解决方法。
我在整个代码中将内存访问更改为 D 。
如果 D 是一个 mxn 矩阵,并且我以前通过 访问它D[j * m + i],现在我通过 访问它D[i * n + j],这意味着我将其设为行优先而不是列优先。
cuSPARSE 需要列优先格式的矩阵,并且由于行优先转置是列优先,我可以将 D 作为假转置传递给 cuSPARSE 函数,而无需进行转置。

于 2013-07-14T05:44:26.120 回答