概述
一、概念:
1.1、一个完整的opencl框架,从内核层到用户层,可分为四部分:
内核层GPU驱动 - kernel device drive ,存在于Image or modules
用户层动态库 - user-space binary drive ,存在于/usr/lib/libOpenCL.so
头文件 - opencl head file ,存在于/usr/include/CL/
应用程序 - opencl application program
1.2、大体流程
内核层GPU驱动 - 用户层动态库 - 头文件 - 应用程序
二、各部分资源如何得到?
2.1、内核层GPU驱动(kernel device drive)
A、需要确定GPU的型号,因作者使用RK3399,通过RK3399对应数据手册可知,
GPU型号是Mali T860MP4。(在本说明中使用Mali T860MP4作例子)
B、通过浏览器进入Mali ARM官网,
网址为 https://developer.arm.com/products/software/mali-drivers/midgard-kernel
通过本网址的文本描述可知,支持Mali-T8xx series GPUs,文本描述如下。
The Android and Linux version of the Mali GPUs Device Driver
provide low-level access to the Mali-T6xx, Mali-T7xx and Mali-T8xx series GPUs.
下载对应linux版本的源码
C、此时将下载出来后的源码,整合到linux kernel源码中,配置,编译。
注意:如果读者与作者一样使用rockchip linux SDK进行开发RK3399,
内核层GPU驱动(kernel device drive)这一部分,不需要自己移植,
默认rockchip linux SDK已移植。
2.2、用户层动态库(user-space binary drive)
有4种路径可获得:
A、如果读者十分熟悉opencl规范,可以通过阅读KhronosGroup-opencl相关文档,
进行编写动态库,连接 内核层GPU驱动 - 应用程序。
KhronosGroup-opencl相关文档,
网址为 https://github.com/KhronosGroup?utf8=%E2%9C%93&q=opencl&type=&language=
B、通过浏览器进入Mali ARM官网,
网址为 https://developer.arm.com/products/software/mali-drivers/user-space
(通过本网址的文本描述可知, 此网页的用户层动态库 支持 OpenCL 1.1, 1.2, 2.0规范的API)
寻找RK3399的用户层动态库(user-space binary drive) ,
此处有两种类型的动态库:fbdev、X11(目前作者不清楚两者区别,后续再补充说明)
下载后,将libMali.so存放在ARM的/usr/lib/,同时建立软链接libOpenCL.so指向libMali.so即可。
C、直接采用rockchip linux SDK中提供的 用户层动态库(user-space binary drive) ,
软链接libOpenCL.so指向libMali.so。
D、由SOC厂商提供。
2.3、头文件
有3种路径可获得:
A、通过以下网址进行下载
网址为 https://github.com/KhronosGroup/OpenCL-Headers
B、直接采用rockchip linux SDK中提供的头文件/usr/include/CL/
C、由SOC厂商提供。
注意:头文件的版本需要与用户层动态库的版本 一致。
2.4、应用程序
三、总结
在rockchip linux SDK中,芯片为RK3399,
内核层GPU驱动默认已支持,
用户层动态库libOpenCL.so默认已支持,
头文件/usr/include/CL/默认已支持
四、参考资料
http://developer.t-firefly.com/forum.php?mod=viewthread&tid=798
http://bbs.t-firefly.com/forum.php?mod=viewthread&tid=321&extra=page%3D2
最后
以上就是火星上大山为你收集整理的opencl库移植的全部内容,希望文章能够帮你解决opencl库移植所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复