普通Cuda对CuBLAS?

Fon*_*007 5 cuda cublas

只是好奇心.CuBLAS是用于基本矩阵计算的库.但是,这些计算通常也可以很容易地用普通的Cuda代码编写,而不使用CuBLAS.那么CuBLAS库和你自己的Cuda程序在矩阵计算方面的主要区别是什么?

小智 16

我们强烈建议开发人员在适当时使用cuBLAS(或cuFFT,cuRAND,cuSPARSE,推力,NPP)有很多原因:

  • 我们验证了每个支持的硬件平台的正确性,包括我们知道即将发布但尚未发布的硬件平台.对于复杂的例程,完全有可能出现在一个架构(甚至一个芯片)上但不在其他架构上的错误.甚至可以通过更改编译器,运行时等来实现.
  • 我们在相同的平台上测试我们的库以获得性能回归.
  • 如果您发现错误,我们可以修复代码中的错误.我们很难用你的代码做到这一点:)
  • 我们一直在寻找哪些可重用和有用的功能可以被引入库中 - 这为您节省了大量的开发时间,并通过编写更高级别的API使您的代码更易于阅读.

老实说,在这一点上,我可以一方面指望那些实际上实现他们自己的密集线性代数例程而不是调用cuBLAS的开发人员.当你学习CUDA时,这是一个很好的练习,但对于生产代码,通常最好使用库.

(披露:我经营CUDA图书馆团队)

  • 那么请提供源代码,否则由于cuBLAS中的错误导致出现问题非常耗时 (11认同)
  • 另外,cuBLAS 函数不再可以从内核启动(从 cuda 10.0 开始)?那么它的用处就少了很多。[链接到论坛帖子](https://devtalk.nvidia.com/default/topic/1046849/cuda-programming-and-performance/cublas-call-from-kernel-in-cuda-10-0/) (2认同)

Jez*_*Jez 9

您选择使用库而不是编写自己的实现有几个原因.三,脱离我的头顶:

  1. 你不必写它.当别人为你做的时候为什么要工作?
  2. 它将被优化.NVIDIA支持的库如cuBLAS可能会针对所有当前的GPU代进行优化,后续版本将针对后代进行优化.虽然大多数BLAS操作看起来实现起来相当简单,但为了获得最佳性能,您必须针对硬件进行优化(这不是GPU独有的).例如,SGEMM的简单实现可能比优化版本慢很多倍.
  3. 他们倾向于工作.您可能没有机会遇到库中的错误,那么您将在自己的实现中创建一个错误,当您在将来更改某个参数或其他参数时,它会咬你.

上面的内容不仅仅与cuBLAS有关:如果你有一个方法,在一个支持良好的库中,你可能会节省大量的时间,并使用相对于使用自己的实现获得很多性能.