开创DX11宏图霸业!镭HD5870权威评测
第二章 DirectCompute:不止是通用计算
此前在测试阶段,微软将DirectX 11中包含的GPU通用计算称为Compute Shader或DirectX Compute,而在近期的正式版本中又改名为Direct Compute,一字(X)之差何必呢?显然,微软为了将GPU通用计算和主要是3D应用的DirectX区别开,进一步凸出Direct Compute的重要性并与OpenCL分庭抗力,由此足以见得微软对GPU通用计算的重视程度。
DirectCompute主要针对GPU计算,但由此可以衍生出一些在图形渲染方面的特殊应用,因此笔者将其单列一章,对一些重要技术进行详细介绍。
第二章/第一节 DirectCompute与Stream/CUDA/OpenCL的关系
提起GPU通用计算,自然会让人想到NVIDIA的CUDA、ATI的Stream以及开放式的OpenCL标准,再加上微软推出的DirectCompute,四种技术标准令人眼花缭乱,他们之间的竞争与从属关系也比较模糊。
首先我们来明确一下概念:
-
OpenCL类似于OpenGL,是由整个业界共同制定的开放式标准,能够对硬件底层直接进行操作,相对来说比较灵活,也很强大,但开发难度较高;
-
DirectCompute类似于DirectX,是由微软主导的通用计算API,与Windows集成并偏向于消费领域,在易用性和兼容性方面做得更出色一些;
-
CUDA和Stream更像是图形架构或并行计算架构,NVIDIA和ATI对自己的GPU架构自然最了解,因此会提供相应的驱动、开发包甚至是现成的应用程序,通过半开放的形式授权给程序员使用。
其中ATI最先提出GPGPU的概念,Folding@Home和AVIVO是当年的代表作,但在被AMD收购后GPGPU理念搁浅;此后NVIDIA后来者居上,首次将CUDA平台推向市场,在这方面投入了很大的精力,四处寻求合作伙伴的支持,并希望CUDA能够成为通用计算的标准开发平台。
在NVIDIA大力推广CUDA之初,由于OpenCL和DirectCompute标准尚未定型,NVIDIA不得不自己开发一套SDK来为程序员服务,这套基于C语言的开发平台为半开放式标准,只能用于NVIDIA自家GPU,因此并未得到业界的认可,AMD认为CUDA是封闭式标准,不会有多少前途,AMD自家的Stream虽然是完全开放的,但由于资源有限,对程序员帮助不大,因此未能得到大量使用。
于是在去年由苹果牵头,以苹果OpenCL草案为基础,联合业界各大企业共同完成了标准制定工作。随后Khronos Group成立相关工作组,工作组的26个成员来自各行各业,且都是各自领域的领导者,具体包括3DLABS、Activision Blizzard、AMD、苹果、ARM、Barco、博通、Codeplay、EA、爱立信、飞思卡尔、HI、IBM、Intel、Imagination、Kestrel Institute、摩托罗拉、Movidia、诺基亚、NVIDIA、QNX、RapidMind、三星、Seaweed、TAKUMI、德州仪器、瑞典于默奥大学。
OpenCL标准一经成立,IT三巨头Intel、NVIDIA和AMD都争先恐后的加入支持。AMD由于自家Stream推广不利、支持OpenCL并不意外;Intel即将发布的Larrbee GPU一大卖点就是强大的计算能力,支持OpenCL有百利而无一害;NVIDIA虽然在大力推广CUDA开发平台,但无奈势单力薄,小有所成但前途未卜,OpenCL虽然与CUDA C语言有交集但并不冲突,是相辅相成的互补关系,NVIDIA自然也大力支持。
OpenCL组织中唯独微软不在其列,微软有自己的如意算盘。经过多年的发展,DirectX凭借快速更新换代策略、相对轻松的开发与移植方式,在与OpenGL的交战中已全面占据上风,OpenGL的传统强项——专业绘图领域也在被DirectX不断的蚕食。因此微软打算用相同的策略来对抗尚未站住根基的OpenCL,于是DirectCompute诞生了。
就如同GPU能同时支持DirectX与OpenGL那样,NVIDIA和AMD对DirectCompute和OpenCL都提供了无差别支持,真正的GPU通用计算之战,不在CUDA与Stream之间,而是OpenCL与DirectCompute之争,DX11时代才刚刚开始……