安卓平台下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是主函数。




明天实际添加一个灰度转换的例子。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值