安卓平臺下ARM Mali OpenCL程式設計-GPU資訊檢測
阿新 • • 發佈:2019-01-28
對於ARM Mali GPU,目前是支援OpenCL1.1,所以我們可以利用OpenCL來加速我們的計算。
一直以來,對於Mali GPU的OpenCL程式設計,一直沒有環境來測試。好不容易弄到一個華為Mate7,卻因為華為沒有提供OpenCL driver(小道訊息,華為下半年開始將會有OpenCL Drivert提供,拭目以待吧)。目前測試過的手機有魅族MX4 pro T628是帶有OpenCL Driver,這個還得多虧三星的獵戶座晶片。對於安卓手機如果手機是Mali GPU(如果是T6xx以下GPU,請無視,因為不支援OpenCL,例如華為P7使用的是Mali-450 ),如果您不確定是否有驅動(BTW:關於驅動問題詢問過ARM的工作人員,需要找晶片提供商,而不是ARM),可以去豌豆莢下載OpenCL
Info的小軟體,該軟體基本囊括了目前移動平臺所有GPU的檢測。
扯了一堆的廢話,當前我的平臺是瑞芯的RK3288。對於Mali GPU,OpenCL Driver驅動對應系統"/system/vendor/lib/egl/libGLES_mali.so" 。
對於常規的例子,請移步這裡,這是我寫的一個關於高通平臺下的OpenCL例子,修改一下便可使用。而為了軟體相容不同廠家的GPU,在NDK Native code中dlopen載入OpenCL庫。
如上是我的實現方式。void *getCLHandle(){ void *res = NULL; res = dlopen("/system/vendor/lib/libOpenCL.so",RTLD_LAZY); /*Adreno GPU */ if(res==NULL){ res = dlopen("/system/vendor/lib/libPVROCL.so",RTLD_LAZY); /*PowerVR GPU*/ } if(res==NULL){ res = dlopen("/system/vendor/lib/egl/libGLES_mali.so",RTLD_LAZY); /*mali GPU*/ } if(res==NULL){ printf("No OpenCL library in your Phone "); } return res; }
做了一個小的測試軟體,直接在編譯成可執行程式,adb push到手機端執行。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := opencl
LOCAL_SRC_FILES := OpenCL_phone.c opera_Init.c test.c
LOCAL_C_INCLUDES := include
include $(BUILD_EXECUTABLE)
如上是我例子的Android.mk檔案。OpenCL_phone.c是dlopen OpenCL庫的一些處理。opera_Init.c是對OpenCL選擇平臺,裝置,建立上下文等之類的操作,test.c是主函式。
明天實際新增一個灰度轉換的例子。