ARM嵌入式系統(tǒng)上OpenCL測試
1). 簡介
相比曾經(jīng),如今科技設(shè)備對處理性能和速度要求越來越高。為了應(yīng)對這種技術(shù)需求,許多公司發(fā)明了不少方法來獲得更好的處理性能。例如蘋果公司,發(fā)明了 Open Computing Language (OpenCL)。2008年6月,蘋果公司向Khronos Group 提交了 OpenCL 工作建議。歷經(jīng)五個月的研發(fā),OpenCL 1.0 于 2008 年 11 月發(fā)布。
OpenCL 是為個人電腦、服務(wù)器、移動設(shè)備以及嵌入式設(shè)備的多核系統(tǒng)提供并行編程開發(fā)的底層 API。OpenCL 的編程語言類似于 C 語言。其可以用于包含 CPU、GPU 以及來自主流制造商如 NXP®、NVIDIA®、Intel®、AMD、IBM 等的處理器的異構(gòu)平臺。OpenCL 旨在提高應(yīng)用軟件如游戲、娛樂以及科研和醫(yī)療軟件的運行速度和響應(yīng)。
在本博文中,我們使用Toradex公司基于NXP iMX6QSoC的計算機模塊產(chǎn)品ApalisiMX6Q 來測試 OpenCL,對比兩個應(yīng)用 - 一個運行在 GPU 上,另一個則在 CPU。最后我們將分享本次測試的結(jié)果。
2). 測試硬件平臺
Toradex 的 Apalis iMX6Q 計算機模塊采用 NXP 的 iMX6 四核處理器,其提供的處理性能特別適合于多媒體應(yīng)用。該處理器具有 4 個 ARM® Cortex®-A9 核,最高主頻為 800MHz。除了處理器,Apalis 系統(tǒng)模塊還具有高達 2GB DDR3 RAM(64bit)和 4GB eMMC Flash。
除了具備出色的圖形和多媒體處理能力,該處理器還具有 Vivante GC2000 3D GPU,其能夠支持 OpenCL EP (Embedded Profile)。因此,我們能充分夠利用 i.MX6QGPU 處理能力。
3). Toradex Embedded Linux 鏡像中添加 OpenCL
我們假設(shè)你已經(jīng)具有能夠編譯 Apalis iMX6 鏡像的 OpenEmbedded 編譯環(huán)境。你可以參考Toradex開發(fā)者中心OpenEmbedded(core) 文章。
為編譯支持 OpenCL 以及相關(guān)庫文件的嵌入式 Linux 鏡像,需要采取以下步驟:
4). GPU 和CPU 代碼
我們使用數(shù)列求和應(yīng)用作為基本的演示例程。第一部分代碼運行在 GPU 上,第二部分則在 CPU 上。應(yīng)用執(zhí)行完畢后打印其所消耗的時間。使用 OpenCL 所需的頭文件是 cl.h,位于文件系統(tǒng)的 /usr/include/CL 目錄。鏈接程序所需的庫文件是 libGAL.so 和 libOpenCL.so,位于 /usr/lib 目錄。
為了計算消耗的時間,我們創(chuàng)建帶分析功能的隊列,在結(jié)束的時候獲取分析的結(jié)果。
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). 交叉編譯應(yīng)用
同一個 Makefile 可以用于交叉編譯 GPU 和 CPU 應(yīng)用,如以下面鏈接Makefile為例,不過你需要注意下面的三個變量。根據(jù)你的系統(tǒng)做相應(yīng)的調(diào)整:
https://github.com/giobauermeister/OpenCL-test-apps/blob/master/proc_sample/Makefile
a). ROOTFS_DIR -> Apalis iMX6 文件系統(tǒng)路徑
b). APPNAME -> 應(yīng)用的名字
c). TOOLCHAIN -> 交叉編譯工具的路徑
在應(yīng)用所在的目錄中保持 Makefile 文件,然后運行 make。最后將編譯生成的文件復(fù)制到 Apalis iMX6 開發(fā)板上。
6). 在執(zhí)行兩個應(yīng)用程序后,我們得到以下結(jié)果:
--------------------------------
### 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
--------------------------------
根據(jù)以上結(jié)果,我們可以很清楚地看到在 Apalis iMX6Q GPU 上使用 OpenCL 能夠加速隊列求和運算。
7). 總結(jié)
用戶想要使用 Apalis iMX6Q GPU ,除了其他的方法,還可以使用 OpenCL 提高計算性能。正如本博文所描述,借助 OpenCL,可以在不同設(shè)備從圖形顯卡到超級計算機以及嵌入式設(shè)備,運行代碼。用戶還可以進一步結(jié)合,例如在 OpenCV 中使用 OpenCL 提高計算機視覺的性能。這個演示可以作為開發(fā)無圖形界面應(yīng)用的例程。
參考
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 上發(fā)表,請參考這里。
提交
Verdin AM62 LVGL 移植
基于 NXP iMX8MM 測試 Secure Boot 功能
隆重推出 Aquila - 新一代 Toradex 計算機模塊
Verdin iMX8MP 調(diào)試串口更改
NXP iMX8MM Cortex-M4 核心 GPT Capture 測試