toradex的个人空间 https://blog.eetop.cn/1539194 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

ARM嵌入式系统上OpenCL测试

已有 1001 次阅读| 2016-12-12 15:04 |系统分类:芯片设计

By Toradex Giovanni Bauermeister

1). 简介

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

 

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

 

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

OpenCL on Apalis iMX6Q

 

2). 测试硬件平台

Toradex Apalis iMX6Q 计算机模块采用 NXP iMX6 四核处理器,其提供的处理性能特别适合于多媒体应用。该处理器具有 4 ARM® Cortex®-A9 核,最高主频为 800MHz。除了处理器,Apalis 系统模块还具有高达 2GB DDR3 RAM64bit)和 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 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 1

    获赞
  • 2

    评论
  • 13923

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 01:41 , Processed in 0.030276 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部