GPU编程
如果你数据中心的服务器有GPU,那么在编写服务器应用程序时就应该将其考虑进去,但利用GPU不是一个简单的任务,需要在CPU和GPU之间做好协调,不是引用几个现成的库,写几行代码就可以搞定的。
电子游戏是大量使用浮点运算的很好示例,但游戏并非浮点运算的唯一用途,凡是与可视化相关的领域几乎都会牵扯到浮点运算,如医学成像,三维成像,科学成像,石油和天然气勘探可视化,娱乐,广告和金融建模等。
这个过程被称为GPGPU计算,或通用GPU计算,需要通过编程将本该由CPU处理的计算任任务交由 GPU处理,很多时候,这意味着要重写代码,Nvidia使用CUDA开发语言来处理。
CUDA是一种类似于C的编程语言,用它可以开发在Nvidia GPU上并行运行的应用程序,与x86处理器不一样,应用程序不只并行运行2,4或8个线程,而是数百个线程。
Nvidia的付出也得到了回报,现在全世界有超过350所大学已经开设了CUDA开发课程,但如果只有Nvidia一家公司有这个干劲,最终也可能是徒劳的。
OpenCL项目是OpenGL的一个分支,它为3D显卡提供了一个图形库(在很大程度上可以取代微软的DirectX),苹果公司是OpenCL框架的创立者,OpenCL框架用于编写跨CPU、GPU和其它处理器执行的程序,OpenCL包括一个编写内核和API的语言,它们可用于基于任务和基于数据的并行编程。
OpenCL与CUDA相比有优势也有弱点,首先,它支持多处理器计算,而CUDA只支持Nvidia GPU;OpenCL可以让任何应用程序访问GPU,且不用重写代码,而CUDA必须用C为Nvidia GPU重写代码;OpenCL支持任何输入/输出处理器,因此它也支持安腾、Sun UltraSparc和ARM嵌入式处理器。
OpenCL框架比CUDA技术更新,因此缺少很多CUDA具有的特性,也没有CUDA成熟,最值得注意的是,CUDA拥有快速傅里叶变换内核(FFT),但OpenCL没有,FFT算法是一个复杂的算法,在高级科学计算和图像处理领域有着广泛的应用。
这两个框架都有各自的优缺点,CUDA凭借Nvidia的强力支撑已经占领了绝大多数市场,而 OpenCL也不弱,它由标准化组织管理,但从目前来看还是一事无成,我们是将自己绑定到Nvidia还是等待标准更新?有点举棋不定。
除了CUDA和OpenCL外,还有第三个竞争对手,那就是微软的 DirectCompute,DirectCompute是DirectX 11 API库中的一个组件,我们在Windows 7中可以找到它,和OpenCL一样,它可以让应用程序使用GPU的计算能力。由于它仅在DirectX 11中,因此使用DirectCompute有些限制,首先,它只能运行在Windows 7计算机上,因为微软没有为其它系统准备DirectX,市场上也没有那么多DirectX 11显卡,ATI现在处于领先地位,但Nvidia也正努力追赶,目前,DirectCompute还未被服务器厂商正式利用。
- 第3页:GPU编程
- 第4页:应用模式