安卓平台下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库。

 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到手机端运行。

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是主函数。

转自:http://blog.csdn.net/wcj0626/article/details/44930221

时间: 2024-07-31 05:05:35

安卓平台下ARM Mali OpenCL编程-GPU信息检测(转)的相关文章

安卓平台ARM Mali OpenCL例子-灰度转换

手头一块RK3288的板子,在板子上测试了一张1080p的彩色图灰度转换的OpenCL例子.OpenCL没有任何优化.例子请移步这里. 该例子是编译成安卓平台下的可执行程序. 进入jni文件夹,进行如下操作: 对于我的环境,是把可执行文件,kernel.cl和图片push到设备的//mnt/sdcard/opencl/gray路径下.请自行选择. adb连接设备后,执行效果如下图: 对于统计的GPU的时间为:数据来回拷贝时间+kernels执行时间. 在源码中,用时间去统计了kernel执行时间

在idea2018和vs2017平台下JNI编程调用C++算法(2)-调用嵌套dll实践

背景 我之所以采用JNI是由于我要实现一个java系统,java系统需调用C++核心程序.而目前的需求是不想破坏C++核心程序的独立性.因此想把JNI调用的接口写在C++核心程序之外.这就需要 首先将C++核心程序生成内层dll 在外层包装一层JNI接口调用内层dll 再将外层C++生成外层dll后,java调用外层dll. 那么JNI支持这种嵌套dll调用吗?经验告诉我肯定能,但是程序员从来不敢想当然,那就让我们试一试,顺便理清思路吧. 上篇文章介绍了在idea2018和vs2017两大平台下

ios及android两个平台下x264编译脚本

今年做了一些音视频编解码工作,此前做图形.图像类工作多一些,做了音视频编解码才知道,这项工作还是很有趣.很神奇的.比如采集几十M的视频数据,经过编码存储后,文件体积仅仅有几十K大小,这当中就需要x264来发挥神奇了.下面将手机端ios及android两个平台下x264编译脚本分享出来,希望对正在做相关工作的同学有帮助.x264源码地址:http://www.videolan.org/developers/x264.html 1. ios平台下x264编译.这个编译脚本修改自:https://gi

[转帖]Android平台下OpenGL初步

原文请看 Android平台下OpenGL初步 本文只关注于如何一步步实现在Android平台下运用OpenGl. 1.GLSurfaceView GLSurfaceView是Android应用程序中实现OpenGl画图的重要组成部分.GLSurfaceView中封装了一个Surface.而android平台下关于图像的现实,差不多都是由Surface来实现的 2.Renderer 有了GLSurfaceView之后,就相当于我们有了画图的纸.现在我们所需要做的就是如何在这张纸上画图.所以我们需

[转]Windows平台下Makefile学习笔记

Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安装VS2010,我想在VS2008下编译这些代码):另一方面源码在服务器端编译的话,使用IDE的方式编译还是不太方便. 本文主要分为三部分:第一部分讲述namke工具使用makefile的用法:第二部分讲述makefile的主要语法:

Windows平台下React-Native开发环境搭建

React-Native是由Facebook开发的开源框架,主要用于开发原生APP,是新一代的在移动APP用户体验和Web开发效率间建立平衡点的新型技术.React-Native可以利用JavaScript语言快速开发出高质量的原生应用,正如其设计目标:“Learn Once,write anywhere”,程序员通过一次学习RN的核心技术便可以快速开发出IOS和Android移动应用.大大降低学习成本.由于Facebook的工程师团队大部分使用Mac进行开发,所以现阶段React-Native

Matlab平台下Nvidia显卡和Intel I7 CPU的并行计算性能比较:第一次测试

目的 : 1. 使用比较好的高端游戏平台(不很贵),测试在Matlab平台下Nvidia显卡和Intel I7 CPU做并行计算的性能 2.解决如下问题 (1) 性能是1-2倍差距,还是5-20倍差距,还是50-100倍差距? (2)要考虑并行计算的话 ,需不需要在有限预算下配高端游戏显卡,还是以配更好的CPU为主? (3)信号处理的算法(非信息处理)的应用背景下,程序的编写简便和运行速度那个重要? 平台  CPU:I7 4790K 显卡:GTX 970 内存:8G 其余都一样 (去淘宝找I7

不同平台下int类型、指针类型的数据大小

不同平台下int类型.指针类型的数据大小 对于int类型数据和指针类型数据的大小,是非常基础的问题. 在一个具体的平台上,确定他们最好的办法就是使用sizeof(type)对其进行判断,返回当前数据类型的大小. 在不同的平台下,int类型和指针类型的数据类型大小时怎样的呢?如果要给出一个统一的答案,自然不可能集齐每个平台,一个个地去试,我们必须从底层进行分析. 数据总线和地址总线 计算机内的数据总线是CPU与外设进行数据交换的通路,而地址总线则是CPU用于寻址的通路. 数据总线的位数决定了CPU

《ARM 嵌入式系统编程与优化》之 Linux/ARM 嵌入式平台

Linux/ARM 嵌入式平台是<ARM 嵌入式系统编程与优化>的第一章. 好好学学硬件,然后深入一下 Linux,修炼好自己的内功. ARM 处理器不是独立芯片产品,而是具有多样性和异质性嵌入式片上系统(SOC)的集成部件,是可以针对各种特定产品实现定制化的部件. 除了处理器内核外,典型的片上系统还包含: 一系列不同的存储接口(例如同步动态随机存储器.闪存等) 通信接口(USB.蓝牙.WiFi 等) 图形.视频专用处理器(例如图形处理单元,GPU) ARM 处理器包含了片上系统的“计算”部分