1.基於Android的CPU+GPU異構編程開發。目前主要有以下平臺:
1.OpenCL
廣泛應用於桌面系統和大規模並行計算的底層API。最近主流芯片廠商的旗艦或者準旗艦芯片都開始支持OpenCL1.1或者1.2標準,包括高通、三星、聯發科、瑞芯微等廠商的芯片,都可以找到OpenCL支持。
2.庫達
目前只有NVIDIA自己的Tegra K1芯片級設備(NVIDIA Shield)支持CUDA,所以支持範圍比較窄。
3.渲染腳本(RS)
Google推廣的異構編程的目的是平臺幫妳選擇運行的處理器,也就是說妳不知道妳的程序運行在CPU還是GPU上,這是由系統的驅動決定的。想法很美好,但現實是開發者並不買rs的賬。大家都覺得RS的性能不可控,靈活性太差,缺少文檔也飽受詬病。另外,芯片廠商對rs的優化壹般都處於比較低的水平,導致RS在實際應用中很少使用。
第二,由於OpenCL的普及,以下部分只針對OpenCL。
目前支持OpenCL的設備和芯片
1.支持OpenCL的GPU
高通幾乎所有的GPU,包括但不限於以下GPU(adre no 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的驅動已經被刪除;值得註意的是,據國外博客報道,可以將相應的OpenCL驅動推回到設備上,重啟OpenCL支持。詳見maxlv.net的頁面。)
三星銀河S4,S5,S6,Note 3,Note 4。
LG G2、G3、G4
HTC One M7、M8、M9
小米使用高通芯片的手機和平板電腦。
魅族M1 Note
臺積電P90HD
等等,等等,等等。。。
如果不確定手頭的設備是否支持OpenCL,可以使用OpenCL-Z Android進行檢測。該軟件可以顯示OpenCL設備的詳細信息,並運行微基準來檢測設備的計算能力。
三、需要掌握的知識:
1.簡單的GPU基礎知識
2.OpenCL並行編程
3.安卓NDK知識
4.Android JNI界面的編程
5.Android程序開發的簡單知識
四、開發的步驟(這只是步驟的簡化版,只說明操作,不做解釋):
1.編寫OpenCL的C/C++程序,實現GPU的核心計算代碼。
2.用安卓NDK編譯之前寫的C/C++代碼。在這個階段,您可以在純C/C++環境中工作。可以編寫主函數來測試實現的功能,用NDK把代碼編譯成可執行代碼(BUILD_EXECUTABLE),然後用ADB把可執行程序推送到設備上運行。運行可執行程序要求設備具有root權限。如果沒有root權限,可以通過Native Program Launcher(androidative Launcher github,可能需要翻墻)這個工具在設備上執行二進制代碼。
3.最後壹次測試後,功能基本正常。開始編寫JNI界面。
4.開始編寫Android應用程序,並使用JNI封裝本機功能。將C/C++代碼編譯成動態鏈接庫。
5.在Android程序中,以靜態方式加載上壹步編譯好的動態鏈接庫。
6.在需要的地方(比如點擊按鈕事件)調用相應的原生函數,實現相應的功能。