CUDA是什么样的?这是干什么用的?有什么好处?如何开始?

CUDA是什么样的?这是干什么用的?有什么好处?如何开始?,cuda,nvidia,gpu,Cuda,Nvidia,Gpu,我对一些新技术的开发很感兴趣,我想尝试一下CUDA。现在。。。他们的文档太技术化了,没有提供我想要的答案。另外,我想听听那些已经有过CUDA经验的人的回答 基本上,我的问题都在标题中: CUDA到底是什么?(它是一个框架?还是一个API?什么?) 这是干什么用的?(除了对GPU进行编程之外,还有其他事情吗?) 它是什么样子的 对CUDA编程而不是对CPU编程有什么好处 什么是开始使用CUDA编程的好地方 (免责声明:我在2008年只在一个学期的项目中使用过CUDA,所以从那以后情况可能会发生变化

我对一些新技术的开发很感兴趣,我想尝试一下CUDA。现在。。。他们的文档太技术化了,没有提供我想要的答案。另外,我想听听那些已经有过CUDA经验的人的回答

基本上,我的问题都在标题中:

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

这是干什么用的?(除了对GPU进行编程之外,还有其他事情吗?)

它是什么样子的

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

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

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

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


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

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中几乎有一百万像素)上,这些都是相同的简单操作