基於Android的CPU+GPU的異構編程開發,目前主要有以下幾種平臺

著作權歸作者所有。
商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
作者:藍山sd
鏈接:http://www.zhihu.com/question/20958771/answer/44916992
來源:知乎

1. OpenCL
在桌面系統和大規模並行計算領域被普遍使用的一種底層API。最近一段時間,主流的芯片廠商的旗艦或準旗艦芯片都開始支持OpenCL1.1或者1.2標準,包括高通,三星, 聯發科,Rockchip等廠商的芯片,都可以找到OpenCL的支持。

2. CUDA
目前只有NVIDIA自己出的基於Tegra K1芯片的設備(NVIDIA Shield)支持CUDA,所以支持的面比較窄。

3. RenderScript (RS)
Google力推的異構編程,宗旨是由平臺幫你選擇運行的處理器,也就是說你是不知道你的程序跑在CPU還是GPU上的,這是由系統的驅動來決定的。想法是美好的,可現實是開發者並不買RS的帳, 大家覺得RS的性能不可控,靈活性太差,其文檔之缺乏也被人詬病;此外,芯片廠商對於RS的優化都還普遍處於比較低階的水平,這些都導致了RS在實際應用中很少被用到。

由於OpenCL的普及程度,以下部分只針對OpenCL展開。

目前支持OpenCL的設備和芯片
1. 支持OpenCL的GPU
  • 高通幾乎全系的GPU, 包括但不限於以下GPU (Adreno 305, 320, 330, 405, 420, 430, 530 ...)
  • ARM Mali的6系和7系GPU, 比如T628, T760
  • 2014年以來較新的Imagination PowerVR GPU,比如G6430
2. 支持OpenCL的芯片。以下是一個很粗略地列舉了主要的支持OpenCL的芯片。
  • 高通8064, 8974(驍龍800,801), 8084(驍龍805), 8994(驍龍810)等
  • 三星 Exynos獵戶座 5420, 5433 (內置ARM Mali GPU)
  • 聯發科 MT6752 (內置ARM Mali T760 GPU)
  • 瑞芯微 RK3288 (內置ARM Mali GPU)
3. 支持OpenCL的手機和平板。 這個就數不勝數了,下面只隨手給出幾個例子以供參考。(注意:Google Nexus系列的手機或平板,雖然硬件上支持OpenCL,但因爲刪掉了OpenCL的驅動程序,所以基本都不支持OpenCL;值得注意的是,據國外blog上報道,可以將相應的OpenCL驅動推送回設備以重新開啓OpenCL的支持, 詳見maxlv.net 的頁面
  • 三星 Galaxy S4, S5, S6, Note 3, Note 4
  • LG G2, G3, G4
  • HTC One M7, M8, M9
  • 小米使用高通芯片的手機和平板
  • 魅族M1 Note
  • 臺積電P90HD
  • 等等等等。。。。
如果不確定手頭的設備是否支持OpenCL, 可以使用OpenCL-Z Android進行檢測,這款軟件可以顯示詳細的OpenCL的設備信息,同時運行micro-benchmark檢測設備的計算能力。下載鏈接:

需要掌握的知識:
1. 簡單的GPU基本知識
2. OpenCL並行程序設計
3. Android NDK知識
4. Android JNI接口的編寫
5. 簡單的Android程序開發知識

開發的步驟(篇幅所限,這裏只是步驟的精簡版本,只闡述操作,不進行解釋):
1. 編寫OpenCL的C/C++程序實現GPU的核心計算代碼
2. 用Android NDK編譯之前寫的C/C++代碼。這一階段可以在純C/C++環境下工作,可以編寫main函數測試實現的功能,用NDK將代碼編譯爲可執行的代碼(BUILD_EXECUTABLE), 然後用ADB將可執行程序推送到設備上運行。運行可執行程序要求設備具有root權限,如果沒有root權限,可以通過Native Program Launcher (AndroidNativeLauncher · GitHub,可能需要翻牆) 這一工具在設備上執行二進制代碼。
3. 上一階段測試結束,功能基本正常。開始編寫JNI接口。
4. 開始編寫Android應用程序,使用JNI封裝native函數。編譯C/C++代碼成動態鏈接庫。
5. 在Android程序裏,以靜態方式加載上一步編譯的動態鏈接庫。
6. 在需要的地方(比如點擊按鈕事件),調用相應的native函數,即可實現相應的功能。

以上步驟可能看着有些抽象,不用擔心,跟着下面幾個教程走一邊,你就會明白每一步在做什麼。

推薦幾個教程:
1. Sony Mobile的OpenCL教程(英文): Boost the performance of your Android app with OpenCL
2. Intel的Android上的OpenCL教程(中英文版都有):安卓* - 教程:基於 Android* 操作系統的 OpenCL™ 入門
3. CSDN的一篇博文:Android平臺利用OpenCL框架實現並行開發初試

這幾個教程都是有非常詳細的說明,並且附有源代碼,非常適合入門。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章