CUDA是什么样的?它是为了什么?有什么好处?以及如何开始?

时间:2011-03-06 16:27:32

标签: cuda nvidia gpu-programming

我有兴趣在一些新技术下开发,我正在考虑尝试CUDA。现在......他们的文档太技术性,无法提供我正在寻找的答案。另外,我想听听那些已经有过CUDA经验的人的答案。

基本上我的问题是标题中的问题:

  

究竟是什么? (它是一个框架吗?还是一个API?什么?)

     

它是为了什么? (还有什么不仅仅是编程到GPU吗?)

     

它是什么样的?

     

针对CUDA编程而不是编程到CPU有什么好处?

     

用CUDA开始编程的好地方是什么?

2 个答案:

答案 0 :(得分:28)

CUDA汇集了几件事:

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

CUDA的目的是编写可在兼容的大规模并行SIMD架构上运行的代码:这包括几种GPU类型以及非GPU硬件,如nVidia Tesla。大规模并行硬件每秒可以运行比CPU大得多的操作,具有相当类似的财务成本,在允许它的情况下可以提高50倍或更高的性能。

CUDA优于早期方法的一个好处是可以使用通用语言,而不必使用像素和顶点着色器来模拟通用计算机。该语言基于C,附带一些额外的关键字和概念,这使得非GPU程序员可以轻松获取。

这也表明nVidia愿意在他们的硬件上支持通用并行化:它现在看起来不像“乱搞GPU”,更像是“使用供应商支持的技术”,这使得它的采用在非技术利益相关者面前更容易。

要开始使用CUDA,请下载SDK,阅读手册(严肃地说,如果您已经知道C,那么 很复杂)并购买CUDA兼容硬件(您可以首先使用模拟器,但性能是最终的一点,如果你真的可以尝试你的代码,那就更好了。)

答案 1 :(得分:1)

(免责声明:我在2008年的一个学期项目中只使用过CUDA,因此事情可能会发生变化。)CUDA是一个开发工具链,用于创建可在nVidia GPU上运行的程序,以及用于控制此类程序的API。来自CPU的程序。

GPU编程与CPU编程的好处是,对于一些高度可并行化的问题,您可以获得大量加速(大约快两个数量级)。但是,许多问题很难或不可能以适合并行化的方式制定。

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