
浅谈出现在新Mac OS中的OpenCL
关于OpenCL,除了时刻关注新闻的Geek外,估计大部分人都会从新的MacOS中见到这个名词,虽然现在MacOS还没出来。但是实际上 OpenCL(Open Computing Language)的概念,或者用另一个大众耳熟能详的名字–通用计算,已经为大家了解。潜移默化的,我们已经知道可以用GPU,用PS3去算 Folding@HOME计算;可以用GPU去加速视频解压缩等等。马上,连Adobe也开始支持GPU进行PDF、PS的加速。这对于释放那块比CPU还要复杂昂贵的GPU芯片的性能来说,真是可喜可贺的事情。毕竟谁也不愿意花上成百上千块钱买块只能玩3D游戏的电热片。
复杂的OpenCL文档俺就不翻译了,其实很多代码俺也看不懂。这里简单说说OpenCL和过去通用计算的不同,和实现方法。
之前的通用计算绝大多数都是通过显卡的GPU(PS3除外),但是OpenCL在开发之初就针对整个IT范围内的高性能处理器。也就是说不但在 PC中跨硬件架构,而且跨硬件平台。如果今后的高性能处理器都能遵循OpenCL协议规范,那么今后就不需要为AMD 5850显卡和PS4游戏机单独开发Folding@HOME计算程序了。
值得注意的是,OpenCL还囊括了掌上设备。实际上目前掌上设备的处理核心SOC已经集成了ARM、2D、3D、Media等等处理模块,不同的应用程序调用不同的部分,和PC在原理上无异。虽然相比PC,SOC能够关闭耗电巨大的3D、media模块,但同时这部分的强大处理能力也浪费了。而加入OpenCL后的掌上设备,在性能上将会面临一次飞跃。
OpenCL通过类似虚拟机这样的系统抽象方法来实现通用加速计算:
<!–[if gte mso 9]> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <![endif]–><!–[if gte mso 9]> <![endif]—>
将系统中各个处理器,或者处理核心看作一个个处理单元。每个处理单元既能够自行处理数据,又可以通过OpenCL内核进行相互交流,提高工作效率。而建立在OpenCL内核之外的应用程序面对的是一个抽象对象,自身并不需要去关心调用的是CPU还是GPU,只需要将待处理数据甩给OpenCL内核就可以了。如下图,OpenCL内核将系统中存储器抽象成一个全局内存模型。如笔者的电脑有4G内存,1G显存,那么OpenCL子程序看到的可能就是一个有5G存储器的抽象系统模型。
目前三大顶级处理器公司都已经宣布支持OpenCL,但是个人打算各不相同:
Nvidia自己的CUDA通用计算平台已经初具规模,但是如果得不到同行的支持,靠自己推广,一来难度大,二来见效慢。现在有了OpenCL,Nvidia的推广工作省下了很多麻烦。而且Nvidia已经准备将CUDA升级为OpenCL的高级套件。也就是说普通应用使OpenCL,专业(利润增长点)领域还是靠 CUDA,反正两者都是基于C语言,移植升级都不是问题。
AMD(前身ATI)算是第一家用GPU不务正业的公司,从早期的DVD加速到 Folding。不过受困财务问题和研发力度,通用计算上落后Nvidia了。现在有了OpenCL,AMD又可以潜心研究自己的事情了,推广的事情丢给 Khronos吧(OpenCL的管理组织,还管理OpenGL)
Intel估计心有不甘。懂点技术的人都觉得intel正在捣鼓的Larrabee怎么看怎么不像显卡。将几个X86核心集成在一起,插在PCIE上面,谁也不知道基于这个全新架构的3D游戏什么时候出来。所以俺早就断定Larrabee显卡不过是个烟雾弹,intel醉翁之意就在通用计算。3D加速卡能攒多少钱?ATI把自己卖了,Nvidia要是没有芯片组估计也很艰难。所以这么多年,看着GPU 市场的血雨腥风,intel自己安稳的慢慢耕耘集成显卡这个一亩三分田。但是intel明显能够嗅到通用计算的钱景,而且如果将来通用计算使得GPU称霸 PC,这对靠CPU立家的intel将是致命伤。(越和Nvidia炒得起劲,越说明自己没底气。)所以Larrabee就是intel自家的通用计算平台。可惜了可惜了,intel还没捣鼓出 来,OpenCL就来了。如果intel不支持,将来世界就不是它的了。
最后,软软(Microsoft)居然没有支持OpenCL。这很不正常呵。看看哪个“歪门邪教”里没有软软的名字?俺干脆再做一次猜想,软软也在闭门(或者和intel私通)玩通用计算,可能准备集成在DX11或者DX12中。intel不支持OpenCL可能很危险,但是软软可不怕,谁让他家有窗窗。到时候来个原厂配件嘛,反正这事软软也干多了,大不了赔钱嘛!
OpenCL什么时候能用上?如果想今年用上,去买台带有最新OS的Mac就行。不过考虑到经济危机问题,还是等等吧,2010年,PC应该也能用上了。