普通Cuda对CuBLAS?

时间:2014-09-14 17:30:07

标签: cuda cublas

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

2 个答案:

答案 0 :(得分:13)

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

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

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

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

答案 1 :(得分:9)

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

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