CUDA是什么?它的作用是什么?有哪些好处?如何入门?

30

我对开发一些新技术很感兴趣,想尝试一下 CUDA。但是它们的文档过于技术化,没有提供我所需要的答案。此外,我也想从已经有 CUDA 经验的人那里听到这些答案。

基本上,我的问题如下:

CUDA 究竟是什么?(是框架还是 API?)

它有什么用途?(除了将程序编写到 GPU 上,还有其他用途吗?)

它怎么样?

与编写 CPU 相比,使用 CUDA 编程有什么好处?

从哪里开始学习 CUDA 编程比较好?

2个回答

43

CUDA包含以下几个方面:

  • 大规模并行硬件,旨在运行通用(非图像)代码,并具备相应的驱动程序。
  • 基于C语言的编程语言,用于编写该硬件的代码,以及其他编程语言可以用作目标的汇编语言。
  • 软件开发工具包,包括库、各种调试、分析和编译工具,以及CPU端编程语言调用GPU端代码的绑定。

CUDA的目的是编写可在兼容的大规模并行SIMD架构上运行的代码:这包括多种GPU类型以及非GPU硬件,如nVidia Tesla。大规模并行硬件可以每秒运行比CPU更多的操作,并且成本相对较低,因此在适用的情况下,可实现50倍或更高的性能提升。

CUDA相对于早期方法的一项优点是,它提供了一种通用语言,而不是使用像素和顶点着色器来模拟通用计算机。该语言基于C语言,具有一些附加的关键字和概念,使得非GPU程序员能够轻松掌握。

这也表明nVidia愿意在其硬件上支持通用并行化:它现在听起来不像是“用GPU进行hack”,而更像是“使用供应商支持的技术”,这使得在非技术利益相关者的存在下,其采用更容易。

要开始使用CUDA,请下载SDK,阅读手册(如果您已经了解C语言,则不会太复杂),并购买CUDA兼容硬件(您可以先使用模拟器,但由于性能是最终目标,因此最好实际尝试您的代码)。


15
请记住,CUDA并不能使每个程序/算法受益:CPU适合在相对较小的操作数量(即<10个线程/进程)中执行复杂/不同的操作,而当GPU可以在大量线程/数据点上执行简单/相同的操作时,它才能发挥全部功效(即> 10,000)。这就是为什么它在例如视频解码/编码方面如此出色:这些都是对大量像素(720p中几乎有一百万个像素)执行相同简单操作的情况。 - dtech

3

(免责声明:我仅在2008年的一个学期项目中使用过CUDA,因此自那时以来可能已经有所改变。) CUDA是创建可以在nVidia GPU上运行的程序的开发工具链,同时还是控制这些程序的API。

与CPU编程相比,GPU编程的好处在于对于某些高度可并行化问题,您可以获得 巨大 的加速(约快两个数量级)。然而,许多问题很难或不可能以适合并行化的方式进行公式化。

从某种意义上说,CUDA相当简单,因为您可以使用常规C语言创建程序。但是,为了实现良好的性能,必须考虑很多事情,包括Tesla GPU架构的许多低级细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接