我对开发一些新技术很感兴趣,想尝试一下 CUDA。但是它们的文档过于技术化,没有提供我所需要的答案。此外,我也想从已经有 CUDA 经验的人那里听到这些答案。
基本上,我的问题如下:
CUDA 究竟是什么?(是框架还是 API?)
它有什么用途?(除了将程序编写到 GPU 上,还有其他用途吗?)
它怎么样?
与编写 CPU 相比,使用 CUDA 编程有什么好处?
从哪里开始学习 CUDA 编程比较好?
CUDA包含以下几个方面:
CUDA的目的是编写可在兼容的大规模并行SIMD架构上运行的代码:这包括多种GPU类型以及非GPU硬件,如nVidia Tesla。大规模并行硬件可以每秒运行比CPU更多的操作,并且成本相对较低,因此在适用的情况下,可实现50倍或更高的性能提升。
CUDA相对于早期方法的一项优点是,它提供了一种通用语言,而不是使用像素和顶点着色器来模拟通用计算机。该语言基于C语言,具有一些附加的关键字和概念,使得非GPU程序员能够轻松掌握。
这也表明nVidia愿意在其硬件上支持通用并行化:它现在听起来不像是“用GPU进行hack”,而更像是“使用供应商支持的技术”,这使得在非技术利益相关者的存在下,其采用更容易。
要开始使用CUDA,请下载SDK,阅读手册(如果您已经了解C语言,则不会太复杂),并购买CUDA兼容硬件(您可以先使用模拟器,但由于性能是最终目标,因此最好实际尝试您的代码)。
(免责声明:我仅在2008年的一个学期项目中使用过CUDA,因此自那时以来可能已经有所改变。) CUDA是创建可以在nVidia GPU上运行的程序的开发工具链,同时还是控制这些程序的API。
与CPU编程相比,GPU编程的好处在于对于某些高度可并行化问题,您可以获得 巨大 的加速(约快两个数量级)。然而,许多问题很难或不可能以适合并行化的方式进行公式化。
从某种意义上说,CUDA相当简单,因为您可以使用常规C语言创建程序。但是,为了实现良好的性能,必须考虑很多事情,包括Tesla GPU架构的许多低级细节。