关闭

ARM嵌入式系统上OpenCL测试

标签: ARMOpenCLembeddedNXPiMX6
1201人阅读 评论(0) 收藏 举报

By Toradex Giovanni Bauermeister

1). 简介

相比曾经,如今科技设备对处理性能和速度要求越来越高。为了应对这种技术需求,许多公司发明了不少方法来获得更好的处理性能。例如苹果公司,发明了 Open Computing Language (OpenCL)。2008年6月,苹果公司向 Khronos Group 提交了 OpenCL 工作建议。历经五个月的研发,OpenCL 1.0 于 2008 年 11 月发布。

 

OpenCL 是为个人电脑、服务器、移动设备以及嵌入式设备的多核系统提供并行编程开发的底层 API。OpenCL的编程语言类似于 C 语言。其可以用于包含 CPU、GPU 以及来自主流制造商如NXP®、NVIDIA®、Intel®、AMD、IBM 等的处理器的异构平台。OpenCL 旨在提高应用软件如游戏、娱乐以及科研和医疗软件的运行速度和响应。

 

在本博文中,我们使用 Toradex公司基于NXP iMX6Q SoC的计算机模块产品Apalis iMX6Q 来测试 OpenCL,对比两个应用 - 一个运行在 GPU 上,另一个则在 CPU。最后我们将分享本次测试的结果。

 

2). 测试硬件平台

Toradex 的 Apalis iMX6Q 计算机模块采用 NXP 的 iMX6 四核处理器,其提供的处理性能特别适合于多媒体应用。该处理器具有 4 个 ARM® Cortex®-A9 核,最高主频为 800MHz。除了处理器,Apalis 系统模块还具有高达 2GB DDR3 RAM(64bit)和 4GB eMMC Flash。

 

除了具备出色的图形和多媒体处理能力,该处理器还具有 Vivante GC2000 3D GPU,其能够支持 OpenCL EP (Embedded Profile)。因此,我们能充分够利用 i.MX6Q GPU 处理能力。

 

3). Toradex Embedded Linux 镜像中添加 OpenCL

我们假设你已经具有能够编译 Apalis iMX6 镜像的 OpenEmbedded 编译环境。你可以参考Toradex开发者中心 OpenEmbedded (core) 文章。

为编译支持 OpenCL 以及相关库文件的嵌入式 Linux 镜像,需要采取以下步骤:

 

4). GPU 和 CPU 代码

我们使用数列求和应用作为基本的演示例程。第一部分代码运行在 GPU 上,第二部分则在 CPU 上。应用执行完毕后打印其所消耗的时间。使用 OpenCL 所需的头文件是 cl.h,位于文件系统的 /usr/include/CL 目录。链接程序所需的库文件是 libGAL.so 和 libOpenCL.so,位于 /usr/lib 目录。

 

为了计算消耗的时间,我们创建带分析功能的队列,在结束的时候获取分析的结果。

 

OpenCL 代码见如下GitHub链接:

https://github.com/giobauermeister/OpenCL-test-apps/tree/master/cl_sample_timer

CPU 代码是简单的 C 程序,和上面一样计算同样的队列求和。为了计算消耗的时间,我们使用 time.h中的库。代码见如下链接:

https://github.com/giobauermeister/OpenCL-test-apps/tree/master/proc_sample

 

5). 交叉编译应用

同一个 Makefile 可以用于交叉编译 GPU 和 CPU 应用,如以下面链接Makefile为例,不过你需要注意下面的三个变量。根据你的系统做相应的调整:

https://github.com/giobauermeister/OpenCL-test-apps/blob/master/proc_sample/Makefile

 

a). ROOTFS_DIR -> Apalis iMX6 文件系统路径

b). APPNAME -> 应用的名字

c). TOOLCHAIN -> 交叉编译工具的路径

 

在应用所在的目录中保持 Makefile 文件,然后运行 make。 最后将编译生成的文件复制到 Apalis iMX6 开发板上。

 

6). 在执行两个应用程序后,我们得到以下结果:

--------------------------------

### Processor time

Execution time in miliseconds = 778.999 ms

Execution time in seconds = 0.779 s

 

### GPU time

Execution time in milliseconds = 12.324 ms

Execution time in seconds = 0.012 s

--------------------------------


根据以上结果,我们可以很清楚地看到在 Apalis iMX6Q GPU 上使用 OpenCL 能够加速队列求和运算。

 

7). 总结

用户想要使用 Apalis iMX6Q GPU ,除了其他的方法,还可以使用 OpenCL 提高计算性能。正如本博文所描述,借助 OpenCL,可以在不同设备从图形显卡到超级计算机以及嵌入式设备,运行代码。用户还可以进一步结合,例如在 OpenCV 中使用 OpenCL 提高计算机视觉的性能。这个演示可以作为开发无图形界面应用的例程。

 

参考

https://www.khronos.org/opencl/

https://en.wikipedia.org/wiki/OpenCL

http://www.drdobbs.com/parallel/a-gentle-introduction-to-opencl/231002854

https://community.freescale.com/docs/DOC-93984

https://community.freescale.com/docs/DOC-100694

http://developer.toradex.com/products/apalis-imx6

https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetEventProfilingInfo.html

http://parallelis.com/how-to-measure-opencl-kernel-execution-time/

https://software.intel.com/en-us/articles/intel-sdk-for-opencl-applications-performance-debugging-intro

 

本文最初以葡萄牙语在 Embarcados.com 上发表,请参考这里。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

安卓平台下ARM Mali OpenCL编程-GPU信息检测

对于ARM Mali GPU,目前是支持OpenCL1.1,所以我们可以利用OpenCL来计算我们的计算。               一直以来,对于Mali GPU的OpenCL编程,一直没有环境来...
  • wcj0626
  • wcj0626
  • 2015-04-08 01:14
  • 5520

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

手头一块RK3288的板子,在板子上测试了1080p一个灰度转换的OpenCL例子。OpenCL没有任何优化。例子请移步这里。 该例子是编译成安卓平台下的可执行程序。     进入jni文件夹,进行如...
  • wcj0626
  • wcj0626
  • 2015-04-09 00:50
  • 2486

OpenCL学习笔记(一):摩尔定律,异构计算与OpenCL初印象

OpenCL (Open Computing Language,开放计算语言) 是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。OpenCL提供了基于任务分割和数据...
  • xbinworld
  • xbinworld
  • 2015-05-16 21:31
  • 3030

从零开始做OpenCL开发》系列文章的第一篇。

本文将作为我《从零开始做OpenCL开发》系列文章的第一篇。   1 异构计算、GPGPU与OpenCL   OpenCL是当前一个通用的由很多公司和组织共同发起的多CPU\GPU\...
  • Tommy_wxie
  • Tommy_wxie
  • 2016-08-04 22:44
  • 1667

arm64-v8a编译

环境:Ubuntu64和android-ndk-r11c(其他不支持arm64-v8a架构) 重点:依赖库要使用android-ndk-r11c编译成arm64-v8a。其中ffmpeg最复杂,...
  • yuanchunsi
  • yuanchunsi
  • 2016-08-25 15:50
  • 8159

安卓平台下ARM Mali OpenCL编程-GPU信息检测

对于ARM Mali GPU,目前是支持OpenCL1.1,所以我们可以利用OpenCL来加速我们的计算。               一直以来,对于Mali GPU的OpenCL编程,一直没有环境...
  • Tommy_wxie
  • Tommy_wxie
  • 2017-07-14 10:08
  • 2252

OpenCL嵌入式图像处理

手上拿到同事给的 飞思卡尔  imx6. zhiq
  • huangcanjun187
  • huangcanjun187
  • 2014-11-06 12:28
  • 2044

Vivante GPU简介

目 录 1. IMX6Q中Vivante GPU简介    1 1.1    IMX6Q中GPU型号    1 1.2  ...
  • Esc_110
  • Esc_110
  • 2017-06-15 18:57
  • 748

OpenCL: 简单示例与性能分析

在本文中,我们要主介绍代码函数的内容,自我感觉有个不错的建议和大家分享下    迎欢存眷 转载请注明 http://blog.csdn.net/leonwei/article/details/8893...
  • Augusdi
  • Augusdi
  • 2013-10-15 15:23
  • 4155

测量OpenCL 执行时间

如何使用OpenCL 自带的API来测量执行时间,因为执行时间很快,无法用秒表测量到执行过程中的时间。OpenCL API 提供了正确的测试内核执行时间的方法。Create Queue with Pr...
  • u013625961
  • u013625961
  • 2017-02-28 15:08
  • 634
    个人资料
    • 访问:85909次
    • 积分:1650
    • 等级:
    • 排名:千里之外
    • 原创:72篇
    • 转载:1篇
    • 译文:11篇
    • 评论:3条
    文章分类
    最新评论