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

Ped*_*C88 25 cuda nvidia gpu-programming

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

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

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

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

它是什么样的?

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

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

Vic*_*let 33

CUDA汇集了几件事:

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

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

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

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

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

  • 不要忘记CUDA不能使每个程序/算法受益:CPU能够以相对较小的数量(即<10个线程/进程)执行复杂/不同的操作,而GPU的全部功能在释放时可以很简单/大量线程/数据点上的相同操作(即> 10.000).这就是为什么它在例如视频解码/编码方面如此优秀:那些在大量像素上的相同简单操作(在720p中几乎一百万) (11认同)