浅谈出现在新 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 应该也能用上了。