在GPU系统上BLAS / LAPACK或其他线性代数例程的最快可用实现是什么?


11

例如,nVidia拥有CUBLAS,可保证7-14倍加速。天真地,这远远不及nVidia的任何GPU卡的理论吞吐量。在GPU上加速线性代数有哪些挑战,并且已经有更快的线性代数路由?

Answers:


9

至于其他实现,我无法回答您问题的后半部分,但我可以提供有关挑战的一些见解。作为参考,我个人在具有2GB内存的nVidia GTX 560 Ti上使用了ViennaCL作为基准。

在中端i5上的串行代码上,我看到了大约40倍的密集矩阵乘法的加速。对于矢量标量乘法运算,我看到了高达1000倍的加速比。房间中的800磅大猩猩是内存带宽。对于大多数商用GPU,您将使用PCIe之类的东西,将吞吐量限制为大约6GB / s。就我而言,虽然计算速度快了40倍,但三个矩阵副本(两个复制到GPU,一个返回)与在CPU上执行计算所需的时间一样长。

那么,任何用于GPU线性代数的通用库的问题都将是它们无法真正重用GPU上的对象,因为它们不知道您将如何处理它们。因此,每次调用计算内核都可能需要将其复制到GPU,然后再将结果复制回去。这将吞噬大部分收益。

如果可以重用矩阵之类的对象,则可以编写更高级别的算法,以避免尽可能多的内存管理,但是很难有效地执行此操作。

我希望这会有所帮助,而且我敢肯定,这里还有其他人,他们对此很有经验,但是这些都是我短暂进入GPU计算过程中获得的经验和印象。


3
这就是为什么您希望对象在GPU上生存很长时间,而不是急切地将其复制回CPU。例如,PETSc矩阵和向量包含指示CPU和/或GPU是否当前的标志。GPU上的操作会将CPU版本标记为脏,反之亦然。如果您在肮脏的地方请求内存,则透明地进行复制,但是如果所有接触大型数据结构的算法组件都可以在同一地方执行,则这种情况很少见。
杰德·布朗

5

让我只关注CUDA和BLAS。

主机BLAS实施的加速不是评估吞吐量的好指标,因为它取决于太多因素,尽管我同意加速通常是人们关心的问题。

如果您查看NVIDIA发布基准测试结果,并考虑到Tesla M2090具有1331 Gigaflops(单精度)和665 Gigaflops(双精度)的峰值性能,您会发现对于SGEMM和DGEMM,我们测得的吞吐量接近理论值的60%,相当不错。

2mnkm×kk×n

至于持续的浮点吞吐量,我认为应该在不考虑数据和结果传输时间的情况下计算触发器,这使得加速比较变得困难。此外,由于最佳性能适用于大型矩阵,因此必须考虑矩阵大小。

底线:由于必须考虑GPU初始化,数据传输时间等因素,现实应用程序的加速可能与线性代数例程中的峰值测量性能大不相同。

因此,我不会回答您有关最快的库的问题,因为除非定义了精确的指标和问题,否则这个问题是没有意义的。综上所述,我认为cuBLASMAGMA是一个很好的起点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.