在GPU或CPU上进行稀疏矩阵乘法?

5
你认为哪个更快,速度有多大的提升:在GPU上进行稀疏矩阵(CSR)乘法(与向量相乘)还是在CPU上进行(多线程)?

Bell等人在论文《CUDA上高效的稀疏矩阵-向量乘法》中给出了答案:在GPU上进行计算更快。 - Dirk
4个回答

5
这取决于矩阵的大小和需要执行的迭代次数。这是因为您需要将矩阵数据从CPU内存复制到GPU内存,并从GPU复制回结果到CPU。如果您只对矩阵执行一次迭代,最好在CPU上执行而不是在GPU上执行。此外,GPU会受到启动时间的影响。因此,如果您需要执行更多的迭代,则选择GPU,否则我的建议是选择CPU。同样,矩阵的大小也会影响性能,因为需要进行数据复制。

2

这里可以找到有关CPU和GPU上稀疏矩阵-向量乘法的性能结果。对于CSR、CSR-Vector、CSR-Adaptive、ELL、COO、SCOO和HYB矩阵格式,衡量了在GPU上的性能。矩阵来自SuiteSparse矩阵集合(以前是佛罗里达大学稀疏矩阵集合)。在最终的图表中,可以找到单线程、多线程和MKL CSR的结果。

HYB矩阵格式的平均加速比约为8(最大加速比约为38),适用于具有超过10000个非零元素的浮点矩阵。但是,正如评论中指出的那样,大型矩阵上的加速效果更好(具有超过100000个非零元素的矩阵为14)。


0
我的猜测是,在GPU实现方面可能不会有太大的优势,因为您没有那种适合进行并行处理的均匀数据结构。

嗯,我认为你是对的,但通常有一些情况下使用GPU会更好。比如并行进行许多矩阵运算。在CPU上,您受到核心数量的限制,这些核心通常比GPU上的少。然而,GPU上的双精度数学性能通常不如浮点运算快。所以这也取决于具体情况。 - GorillaPatch
@GorillaPatch:是的,除了最新的nVidia GPU之外,其他大部分GPU的双精度性能都相当糟糕或根本不存在,即使是最新的GPU,其双精度性能仍然比单精度慢2倍。要在GPU上获得巨大的优势,理想情况下需要使用单精度浮点数并且您的算法需要高度可并行化。 - Paul R

0

我认为veda说得很对。虽然我并不是这方面的专家,但我相信将GPU投入工作会有一定的开销,如果计算量不够大,则GPU处理的收益会因开销而失去。然而,如果你有像角色骨架这样需要大量矩阵相乘的东西,那么GPU就更适合了。我目前也在为我的一个项目研究这些事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接