正文内容 评论(0)
年初的时候,有好事者在Nexus 4/10的安卓4.2系统中发现了OpenCL驱动的痕迹,并证实基本可用,但并没有Google官方的支持。即便如此,也让人看到了移动平台通用加速计算的曙光。
现在安卓4.3已经降临Nexus 4/7/10,OpenCL的情况又如何呢?很不幸,Google把它们给彻底删掉了。
我们知道,OpenCL是一种并行和异构计算API标准,得到了AMD、Intel、NVIDIA、苹果等的大力支持,ARM、Imagination、高通的移动GPU也都宣称已经做好了支持OpenCL的准备,但一直没有相应的驱动。
Google始终都对OpenCL兴趣不大,因为他们更想在安卓上推广自己的RenderScript,它和OpenCL的关系有点类似Java之于C+汇编。
按照设想,RenderScript可以在任何安卓设备之间移植,无需考虑底层硬件,程序员也不用关心硬件细节,比如它不允许你选择特定的代码在CPU、GPU还是DPS上运行,完全由驱动自动决定。这显然大大增强了可移植性,编程也更简单,只不过可能会牺牲一些性能,不如低级语言优化代码,此外还缺乏与图形的交互,并且不支持Android NDK。
其实两种语言是互补的。OpenCL展现了更多硬件细节,对于高级程序员是个强大的工具,可以充分优化、发挥异构系统的计算性能,但是使用难度比较大,需要仔细编程。
根据Google工程师的非官方说法,Google主要是担心经验不足的程序员不能正确使用OpenCL,比如有人可能在某个机型上测试、优化了代码,但在其它设备上可能会很糟糕,更何况安卓设备五花八门,做到一一优化几乎是不可能的,和硬件无关的RenderScirpt这时候就体现出优势来了。
看起来Google宁可牺牲部分设备的最佳性能,也要保证整个平台的一致性。
此外,NVIDIA一直在努力将CUDA带往移动平台,开发了CUDA on ARM,明年的下代Tegra处理器也将支持CUDA,但是Google现在这样的态度恐怕非常不利。