OpenCL Installable Client Driver (ICD) Loader编译

ICD是什么?

OpenCL Installable Client Driver (ICD) Loader是实现OpenCL应用程序与各硬件厂商提供的OpenCL驱动(platform)之间隔离的中间库。

从OpenCL 1.2开始,OpenCL提供了一个ICD扩展(cl_khr_icd),它允许不同厂商的多个OpenCL驱动(platform)共存于一个主机系统,应用程序可以通过调用clIcdGetPlatformIDsKHR函数获取所有已经安装的platform的列表,自由选择使用其中的一个platform。
OpenCL Installable Client Driver (ICD) Loader实现了ICD扩展(cl_khr_icd)并提供了所有OpenCL API接口,应用程序可以通过OpenCL Installable Client Driver (ICD) Loader从已经安装的OpenCL驱动(platform)中选择使用一个平台,应用程序的所有OpenCL API请求将被转发到指定的平台。

简单的说,这个Loader Library只是个二传手,它提供了所有OpenCL API的接口,但没有提供实现,所有通过Loader Library调用的OpenCL API请求都会被传递到指定的OpenCL驱动。有了这个中间库,你的项目代码中的OpenCL API请求可以不依赖于任何厂商的OpenCL SDK,可以在没有安装任何OpenCL SDK的环境实现代码编译,你可以以动态库的形式使用它,也可以把这个中间库静态编译到自己的项目代码中,真正的实现OpenCL SDK无关性、设备无关性。
以下是OpenCL官网对ICD的描述:

The OpenCL ICD extension (cl_khr_icd) allows multiple implementations of OpenCL to co-exist on the same system. The OpenCL ICD Loader Library allows applications to choose a platform from the list of installed platforms and dispatches OpenCL API calls to the underlying implementation. Source code for the ICD loader library is available in the Khronos registry. Consult LICENSE.txt in the tarball for full terms and conditions. @ 《opencl-installable-client-driver-icd-loader》

下载

OpenCL Installable Client Driver (ICD) Loader是开源的,需要自己下载源码后编译才能使用,下载地址可以在OpenCL registry上找到,我下载时它是放到了github上。
打开 https://github.com/KhronosGroup/OpenCL-ICD-Loader,点击"Doanload ZIP",下载ZIP格式的压缩包,解压到本地。
这里写图片描述
下载的OpenCL-ICD-Loader-master.zip包并不能直接编译。还缺少一些必要的opencl头文件。

然后打开 ./inc/README.txt,下面是README.txt中的内容。

Copy or symlink {OpenCL, EGL, KHR} headers here, inside appropriate
directories, so that the structure of the inc directory looks something like
this:

inc/CL/cl_d3d10.h
inc/CL/cl_d3d11.h
inc/CL/cl_dx9_media_sharing.h
inc/CL/cl_ext.h
inc/CL/cl_gl_ext.h
inc/CL/cl_gl.h
inc/CL/cl.h
inc/CL/cl.hpp
inc/CL/cl_platform.h
inc/CL/opencl.h
inc/EGL/eglext.h
inc/EGL/egl.h
inc/EGL/eglplatform.h
inc/KHR/khrplatform.h

根据README.txt的要求,需要把OpenCL的标准头文件复制到inc/CL文件夹下**(注意这里CL要大写)**。

OpenCL是个开放标准,关于OpenCL标准所有的官方文档都可以在khronos的官方网站获取–>https://www.khronos.org/opencl/,打开这个链接(https://www.khronos.org/registry/cl/),你会看到每个OpenCL正式版本的的标准头文件。

OpenCL的标准从1.0开始,到现在最新版本已经是2.1了,应该下载哪个版本的头文件呢?
因为OpenCL Installable Client Driver (ICD) Loader是设计用来支持所有OpenCL平台的,所以这里应该下载最新版本的OpenCL头文件。
这里写图片描述
鼠标右键点击上图中列表中的11个链接下载.h文件到./inc/CL目录下(.hpp文件也可以下载,但编译ICD用不上)。
更直观的办法可以打开这个地址下载 https://www.khronos.org/registry/cl/api/2.1
这里写图片描述

另外README.txt中只要求CL中的10个.h文件,不需要cl_egl.h,但下载下来也没关系。

然后去https://www.khronos.org/registry/egl/api/EGL/下载eglext.h,egl.h,eglplatform.h这三个文件放在./inc/EGL/文件夹下

然后去https://www.khronos.org/registry/egl/api/KHR/下载khrplatform.h文件放在./inc/KHR/文件夹下

所有必要的文件都下载后,目录结构如下图
这里写图片描述

编译

然后就可以参照源./README.txt的说明进行编译了。

== Building ICD and ICD Test ==
The build system will build ICD Loader library (OpenCL.dll or libOpenCL.so) and
ICD Loader Test binary (icd_loader_test) and some helper libraries for the test.
=== Linux ===
Run “make”
=== Windows ===
Run “build_using_cmake.bat”

在Windows下,如果安装了VC直接运行build_using_cmake.bat就可以编译了,编译后会生成一个build文件夹,所有目标文件和中间文件都生成在这个目录下。
Windows下如果用GCC编译的话,要用cmake来生成Makefile,编译也能通过,但因为生成的dll文件名不符合Windows习惯,测试程序在运行时会报错找不到dll文件,需要修改CMakeLists.txt文件解决。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值