安卓平臺下ARM Mali OpenCL編程-GPU信息檢測

 對於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庫。

    

[cpp] view plain copy
  1. void *getCLHandle(){  
  2.             void *res = NULL;  
  3.             res = dlopen("/system/vendor/lib/libOpenCL.so",RTLD_LAZY);   /*Adreno GPU */  
  4.             if(res==NULL){  
  5.                 res = dlopen("/system/vendor/lib/libPVROCL.so",RTLD_LAZY);  /*PowerVR GPU*/  
  6.             }  
  7.             if(res==NULL){    
  8.                 res = dlopen("/system/vendor/lib/egl/libGLES_mali.so",RTLD_LAZY);   /*mali GPU*/  
  9.             }  
  10.             if(res==NULL){  
  11.                     printf("No OpenCL library in your Phone ");  
  12.             }  
  13.             return res;  
  14. }  
如上是我的實現方式。

做了一個小的測試軟件,直接在編譯成可執行程序,adb push到手機端運行。

[cpp] view plain copy
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE    := opencl  
  6. LOCAL_SRC_FILES := OpenCL_phone.c opera_Init.c  test.c  
  7. LOCAL_C_INCLUDES := include  
  8. include $(BUILD_EXECUTABLE)  
如上是我例子的Android.mk文件。OpenCL_phone.c是dlopen OpenCL庫的一些處理。opera_Init.c是對OpenCL選擇平臺,設備,創建上下文等之類的操作,test.c是主函數。




明天實際添加一個灰度轉換的例子。


發佈了220 篇原創文章 · 獲贊 222 · 訪問量 166萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章