Normal Cuda Vs CuBLAS?



只是好奇。CuBLAS是一个用于基本矩阵计算的库。但是,一般来说,这些计算也可以很容易地用普通的Cuda代码编写,而无需使用CuBLAS。那么,CuBLAS库和您自己的用于矩阵计算的Cuda程序之间的主要区别是什么?

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

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

老实说,在这一点上,我可能一方面可以数出有多少开发人员真正实现了他们自己的密集线性代数例程,而不是调用cuBLAS。当您学习CUDA时,这是一个很好的练习,但对于生产代码,通常最好使用库。

(披露:我负责CUDA图书馆团队)

选择使用库而不是编写自己的实现有几个原因。三,我脑海中浮现:

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

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

最新更新