你怎么看?什么会更快,多快:在 GPU 或 CPU(多线程)上进行稀疏矩阵 (CSR) 乘法(使用向量)?
4 回答
它取决于矩阵的大小和需要执行的迭代次数。这是因为您需要将矩阵数据从 CPU 内存复制到 GPU 内存,并将结果从 GPU 复制回 CPU。如果您只想对矩阵执行一次迭代,那么在 CPU 上执行总是比在 GPU 上执行要好。此外,GPU 会受到启动时间的影响。所以,如果你有更多的迭代要执行,那么就选择 GPU,否则我的选择将是 CPU。同样,由于数据复制,矩阵的大小也会影响性能。
我的猜测是,GPU 实现不会有太大的胜利,因为你没有那种适合于并行处理的同构数据结构。
我认为《吠陀》一针见血。我绝不是这方面的专家,但我相信让 gpu 工作会产生开销,如果计算量不够大,那么 gpu 处理的胜利就会被开销所损失。但是,如果您有类似角色骨架的东西,其中有很多矩阵相乘,那么这将更适合 gpu。我目前也在为我的一个项目研究这些东西。
在这里,您可以找到一些在 CPU 和 GPU 上的稀疏矩阵向量乘法的性能结果。针对 CSR、CSR-Vector、CSR-Adaptive、ELL、COO、SCOO、HYB 矩阵格式测量 GPU 上的性能。这些矩阵取自SuiteSparse Matrix Collection(以前的佛罗里达大学稀疏矩阵集合)。在最终图中,您可以找到单线程、多线程和 MKL CSR 的结果。
对于具有超过 10000 个非零元素的浮点矩阵,HYB 矩阵格式的平均加速约为 8(最大加速约为 38)。但是,正如评论中所注意到的,大矩阵的加速比更好(对于超过 100000 个非零元素的矩阵,加速比为 14)。