【问题标题】:cusparse sparse-dense multiplication x4 larger cost over x100 more timecusparse 稀疏密集乘法 x4 更大的成本超过 x100 更多的时间
【发布时间】:2014-03-28 08:50:10
【问题描述】:

使用 cusparse,我首先尝试了以下大小的稀疏密集乘法:

C1 [8692 x 8692] = A1 [8692 x 7000 sparse] x B1 [7000 x 8692]

只需 0.3 秒。然后我又做了一个,尺寸如下:

C2 [8820 x 8820] = A2 [8820 x 32000 sparse] x B2 [32000 x 8820]

所需时间取决于稀疏矩阵中的内容,但范围从 30 秒到 90 秒不等。我能做些什么来加速它吗?如果可以减少运行时间,我可以以不同的方式切分矩阵,但我不确定这里的性能问题是什么。

稀疏矩阵 A1 和 A2 以 CSR 格式存储,它们的稀疏模式确实很差,但同样糟糕。下面的两张图分别显示了非零元素在 A1 和 A2 中的位置。两种情况下每列的非零元素都被控制为固定在 127。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    根据矩阵的稀疏模式,您应该将矩阵 A1 分成两部分,矩阵 A11 包含大约前 8000 行,A12 包含剩余的行,并使用 csrmv 两次。这样,cusparse 将为每行的线程数选择更好的启发式方法。

    您还应该考虑将 CUSPARSE 6.0 csrmv2 中的新版本与转置案例一起使用。您需要先转置 B (使用 cublasgeam )并执行:

    C = A1 * (B')'

    转置的情况要好得多,因为对 B 的访问都被合并了。

    另一种选择是加密 A1(使用 cusparsecsr2dense )并使用 cublas

    【讨论】:

    • 非常感谢!我会试试的。您是说 cusparse 6 中的 csrmm2 吗?转置矩阵 B 总是更好吗?
    猜你喜欢
    • 2016-11-05
    • 2014-01-31
    • 2013-07-09
    • 1970-01-01
    • 2021-01-31
    • 2013-05-26
    • 1970-01-01
    • 2015-12-17
    • 2015-07-19
    相关资源
    最近更新 更多