2013年8月10日 星期六

Android 4.3又把OpenCL給刪了






年初的時候,有好事者在Nexus 4/10的 Android 4.2系統中發現了OpenCL驅動的痕跡,並證實基本可用,但並沒有Google官方的支援。即便如此,也讓人看到了流動平台通用加速計算的曙光。

現在 Android 4.3已經降臨Nexus 4/7/10,OpenCL的情況又如何呢?很不幸,Google把它們給徹底刪掉了。

我們知道,OpenCL是一種並行和異構計算API標準,得到了AMD、Intel、NVIDIA、 Apple 等的大力支援,ARM、Imagination、高通的流動GPU也都宣稱已經做好了支援OpenCL的準備,但一直沒有相應的驅動。

Google始終都對OpenCL興趣不大,因為他們更想在 Android 上推廣自己的RenderScript,它和OpenCL的關係有點類似Java之於C+彙編。

按照設想,RenderScript可以在任何 Android 設備之間移植,無需考慮底層硬件,程式員也不用關心硬件細節,比如它不允許你選擇特定的代碼在CPU、GPU還是DPS上運行,完全由驅動自動決定。這顯然大大增強了可移植性,編程也更簡單,只不過可能會犧牲一些性能,不如低級語言優化代碼,此外還缺乏與圖形的交互,並且不支援Android NDK。

其實兩種語言是互補的。OpenCL展現了更多硬件細節,對於高級程式員是個強大的工具,可以充分優化、發揮異構系統的計算性能,但是使用難度比較大,需要仔細編程。

根據Google工程師的非官方說法,Google主要是擔心經驗不足的程式員不能正確使用OpenCL,比如有人可能在某個機型上測試、優化了代碼,但在其它設備上可能會很糟糕,更何況 Android 設備五花八門,做到一一優化幾乎是不可能的,和​​硬件無關的RenderScirpt這時候就體現出優勢來了。

看起來Google寧可犧牲部分設備的最佳性能,也要保證整個平台的一致性。

此外,NVIDIA一直在努力將CUDA帶往流動平台,開發了CUDA on ARM,明年的下代Tegra處理器也將支援CUDA,但是Google現在這樣的態度恐怕非常不利。



. Android 4.3又把OpenCL給刪了
http://digital1010.blogspot.com/2013/08/android-43opencl.html