越玩越有趣 – OpenCL 與行動裝置的未來!
先節錄一下 OpenCL 在維基百科的介紹
OpenCL (Open Computing Language,開放計算語言) 是一個為異構平台編寫程式的框架,此異構平台可由 CPU , GPU 或其他型別的處理器組成。 OpenCL 由一門用於編寫 kernels (在 OpenCL 裝置上執行的函式)的語言(基於 C99 )和一組用於定義並控制平台的 API 組成。 OpenCL 提供了基於任務分割和資料分割的並列計算機制。
OpenCL 類似於另外兩個開放的工業標準 OpenGL 和 OpenAL ,這兩個標準分別用於三維圖形和電腦音訊方面。 OpenCL 擴充了 GPU 圖形生成之外的能力。 OpenCL 由非盈利性技術組織 Khronos Group 掌管。
最近對 OpenCL 很有興趣,常利用空閒時間看這方面相關的東西,所以跟大家分享一下個人的一些淺見。因為想講的東西很多,所以就打算把他寫成肥皂劇的劇本,看看會不會有人改編成電視劇,第一集就先介紹一些來龍去脈的東東,希望點閱率會不錯,不要被腰斬 。
第一集暖身就來介紹兩件事, OpenCL 的由來,以及 2012 年底前支援的狀況。
- OpenCL 的由來
隨著 CPU 時脈對於效能的貢獻進入高原期,眾多軟硬體開發商將目光移向平行運算跟 GPU Computing 中。其中 Apple 聯合 AMD、IBM、Intel 跟 nVidia合作,在 2008 年提出一個支援異質運算的 API 給 Khronos 組織,這一個組織就是成功推動 OpenGL 的組織,希望藉由這專案能讓軟體開發人員可以將需要平行處理的高運算量程式碼用 OpenCL 寫好,然後可以在 CPU 或是 GPU 甚至是支援 OpenCL 的 DSP 上運算,達到一碼跑天下的境界。目前最新的是 2011 年 11 月的 OpenCL 1.2 版本。
- 到 2012 年底為止支援 OpenCL 的裝置
介紹完由來,現在拉回來告訴大家有哪些裝置或公司對 OpenCL 情義相挺,以及目前我收集到的近況。
- x86 系統:x86 的世界有分 CPU 的廠商跟作 GPU 的廠商,以及兩邊都做的廠商。只做 CPU 廠商中最有名的當然首推 Intel。 Intel 的 CPU 在 Core i3, i5, i7 就有支援 OpenCL ,但是在 Ivy Bridge 才有讓 Intel HD Graphics 支援 OpenCL 。 而講到 GPU,最有名的當然就是 nVidia,大家都知道 nVidia 也有推自己的 GPU Computing — CUDA ,所以你要使用 nVidia 的 OpenCL SDK 其實是要裝 CUDA 的 SDK 的,然後就可同時實現兩種願望。 最後壓軸的是 AMD ,他是腳踏兩條船的代表,旗下有 CPU 跟 GPU 的技術,所以他開始推 APU,希望靠這瀨尿牛丸來一展身手,可惜出師未捷,就遇到 PC 業界的寒冬,一整個慘兮兮,否則我個人認為 AMD 可以說是推 OpenCL 最認真的廠商。 AMD 還有舉辦 AMD OpenCL Coding Competition,可惜只辦了一屆就沒有再持續下去,比如 2012 年的比賽看來就胎死腹中了。不然 Innovation Challenge 的第一名還有兩萬美金可以撈…總之,希望 AMD 可以振作起來囉!
附帶一提, x86 的 OpenCL 要注意的是 memory bus 的速度,因為 GPU 的記憶體和 RAM 的溝通很花時間,所以 x86 版本除了 AMD 的 APU 之外都要特別小心這件事,之後再來和大家分享 APU ,希望在我研究完之前 AMD 不要倒掉 。
- ARM 的世界:ARM 的世界目前比較積極推 OpenCL 的屬推 ARM 的 Mali GPU 跟 Qualcomm 的 Adreno GPU 。目前在行動裝置上已經可以找到 Qualcomm S4 Pro ( Nexus 4就是用這個晶片組) 有硬體支援 OpenCL。SDK (Software development Kit) 目前應該是還在作,相關文件還不齊全,希望在 2013 年可以有較多的行動裝置支援 OpenCL。此外, Android 有推 RenderScript 這東西但目前只能支援在 CPU 上,尚不支援在 GPU 上運作,不過他的意圖跟 OpenCL 有不少相近之處,所以我個人倒很好奇在 Android 的 OpenCL 支援會是怎樣發展。另外因為 ARM 系統一般是 CPU 跟 GPU 共用記憶體,所以這方面的溝通成本應該會比較低。
因為 SDK 的提供,2013 年起已經可以在行動裝置上開發 OpenCL 的程式,個人保守估計在 2015 應該會是 OpenCL 在行動裝置上大放異彩的時候,之後再跟大家介紹一些 OpenCL 的 coding 如何撰寫,以及其他 Open Source Project 囉!
References:
http://en.wikipedia.org/wiki/OpenCL
http://zh.wikipedia.org/wiki/Intel_HD_Graphics