CUDA C编程(二十九)CUDA函数库的性能研究
通常情况下,考虑到性能方面的表现,我们会选择在CUDA中运行应用程序。因此,如果在GPU执行上所得到的性能加速不尽人意,那么CUDA库的使用对我们来说就是没有意义的。接下来主要介绍CUDA库与标准库性能对比的文献。记住,对于所有性能测试,你的试验结果可能会因为编译器、硬件或其他环境的不同而不同。
cuSPARSE 与 MKL 的 比 较
可以说,数学核心库(MKL)是稀疏线性代数的黄金准则。MKL使用向量指令在多核CPU上手动优化的执行密集和稀疏线性代数。目前有大量对各种计算内核中的MKL和cuSPARSE进行比较的文献资料。
随着CUDA5.0版本的发布,NVIDIA在多个计算内核和多个数据集上对cuSPARSE和MKL进行了全面的性能比较。通过在18个不同的数据集上执行稀疏矩阵-稠密向量乘法,研究人员发现,与MKL相比,cuSPARSE的性能有1.1~3.1倍的提升。最后,当比较cuSPARSE和MKL之间的三对角解法时,取得了高达17倍的加速结果,这一结果取决于数据集的大小和原始数据的类型。
对于发布的CUDA 6.0而言,NVIDIA对CUDA库进行了类似的性能比较、结果表明,在计算速度和性能上,稀疏矩阵-稠密向量乘法是三对角解法、不完全LU和Cholesky预调节器的1.8~5.4倍,总体有了很大提升。显然,cuSPARSE库是高度可用的,它保留了预期的GPU硬件优势并进行了改进。
cuBLAS 与 MKL BLAS 的 比 较
由于MKL还包括BLAS例程的手动优化版本,这对于cuBLAS来说也是一个可以比较的地方。在CUDA 5.0的性能报告中,是在整个BLAS Level 3程序范围内对cuBLAS进行评估的。相对于MKL的加速结果,大约从2.7倍到8.7倍不等。对ZGEMM的性能表现进行深入研究,说明在512×512到4096×4096大小的矩阵范围内,cuBLAS比MKL有显著的性能优势。
在CUDA 6.0性能报告中,NVIDIA指出了最新的MKL BLAS加速了6~17倍。对ZGEMM来说,与MKL相比,cuBLAS也有类似的性能改进。随着多GPU cuBLAS-XT库的引进,NVIDIA在多个GPU上展示了cuBLAS的可扩展性。
cuFFT 与 FFTW 及 MKL 的 比 较
FFTW库在多核CPU上拥有性能优异的一维和多维FFT,宣称其性能“通常优于其他公开的FFT软件,甚至可以与供应商调试的代码相抗衡”。很明显,FFTW的主要目标是性能优化,因此,对cuFFT来说,它是一个很好的比较对象,MKL库也支持FFT。
NVIDIA的CUDA 5.0报告显示,FFT的性能表现取决于数据规模,范围从低至30 GFLOPS到高达250 GFLOPS。在单核系统报告中,FFTW的性能估计大约从1 GFLOPS到5.5 GFLOPS。由以上结果推断得出,20个CPU核心等价于一个GPU运行cuFFT。如果在相同数据大小的情况下,比较cuFFT最佳性能大约是250 GFLOPS和FFTW的最佳性能大约是5 GFLOPS,那么cuFFT的结果更优:50个CPU核心等价于一个GPU的计算性能。
NVIDIA报告指出,使用CUDA 6.0,在一维单精度复杂FFT上达到700 GFLOPS的性能加速是可能的,双精度则可超过250GFLOPS。报告还强调,在大范围的数据集上也能保持性能优势。
素手挽辰风: 大佬老老老老老
chu___xin: 大佬,求源码!! 非常感谢,1552576371@qq.com
chu___xin: 大佬,求源码,1552576371@qq.com,非常感谢
xiaofengclouder: 如果早两年看到这篇文章我也不至于放弃了这么久 。。。
一入程序无退路: c文件是cs后缀还是cpp后缀?