【问题标题】:cuSPARSE dense times sparsecuSPARSE 稠密次稀疏
【发布时间】:2013-07-09 15:13:32
【问题描述】:

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

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

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

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

【问题讨论】:

  • 可能您已经知道这一点,但您可以使用geam 函数转置cublas 中的密集矩阵。
  • 这是一个独立的操作,还是您在A' * D * A 的行中做某事?
  • 运算是 X - D * A 其中 X & D 非常密集,A 非常稀疏

标签: cuda sparse-matrix


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 2014-01-31
    • 2015-12-17
    • 1970-01-01
    • 2019-12-13
    • 2016-11-05
    • 2014-09-15
    • 2015-06-23
    • 1970-01-01
    相关资源
    最近更新 更多