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文件解决。

OpenCL Installable Client Driver (ICD) Loader编译相关推荐

  1. OpenCL ICD Loader运行测试暨解决报错:ERROR: App log and stub log differ.

    上一篇博文<OpenCL Installable Client Driver (ICD) Loader编译>详细描述了如何编译OpenCL ICD Loader.OpenCL ICD Lo ...

  2. 【数据平台】基于pyhs2库Python作为client driver连接HiveServer

    1.安装pyhs2 A Python client driver for HiveServer2 is available at https://github.com/BradRuderman/pyh ...

  3. Linux内核4.14版本——DMA Engine框架分析(2)_功能介绍及解接口分析(slave client driver)

    1 前言 2  Slave-DMA API和Async TX API 3 dma engine的使用步骤 3.1 申请DMA channel 3.2 配置DMA channel的参数 3.3 获取传输 ...

  4. iFIX 6.1新功能之 - OPC UA Client Driver

    从iFIX 6.1开始支持OPC UA Client Driver I/O驱动器(简称"OUA"驱动),通过OUA驱动可以连接到OPC UA Server,读/写数据. OPC 统 ...

  5. I2C driver编写指导二:编写i2c client driver指南

    原文地址::http://blog.csdn.net/guoshaobei/archive/2010/06/08/5656001.aspx 译者:郭少悲 日期:2010/06/08 源文:linux- ...

  6. APICloud开发之新手上路!自定义Loader编译后安装包解析出错。

    在手机上清空UZMap文件夹, 去掉config.xml文件中的中文, 重新单独上传config.xml文件.

  7. OpenCL简介-----OpenCL学习(一)

    OpenCL (Open Computing Language,开放计算机语言)是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成.OpenCL由一门用于编写kerne ...

  8. Install OpenCL on Debian, Ubuntu and Mint orderly

    Libraries – can't have enough If you read different types of manuals how to compile OpenCL software ...

  9. OpenCL 安装ocl-icd

    OpenCL Installable Client Driver Loader A system can have multiple OpenCL™ platforms, each with its ...

最新文章

  1. mybatis注解配置出现returned more than one row, where no more than one was expected
  2. 网络推广团队分享新手必看的长尾关键词挖掘技巧!
  3. Unity之Update与FixedUpdate区别
  4. 【Groovy】json 序列化 ( JsonBuilder 生成器 | 生成带根节点名称的 json 字符串 | 生成不带根节点名称的 json 字符串 )
  5. python笔试编程题_python_编程面试题
  6. SpirngMVC通过Ajax传递多个对象
  7. js 的 math 函数
  8. junit rule_Tomcat上下文JUnit @Rule
  9. PDFMiner:python 读取 pdf 内容
  10. python的for语句写新的字符串_Python:for循环遍历对象,而不是字符串
  11. vscode替换文字快捷键_这 21 个VSCode 快捷键,能让你的代码飞起来
  12. Linux:GCC安装与编译(详细)
  13. 我的硬盘居然被win10安装工具_科研工具 | SPSS 25中文版软件下载和安装教程|兼容WIN10...
  14. C语言中将数字形式的字符串转换为数字的方法
  15. 分布式消我爬取豆瓣10万短评,告诉你《复仇者联盟4》在讲什么?
  16. 双绞线的制作,T568A线序,T568B线序
  17. 苹果8wifi找不到服务器,iPhone8连不上wifi怎么办?苹果iPhone8无法连接网络的解决方法...
  18. 浅谈 MVC、MVP 和 MVVM 架构模式
  19. 短网址跳转微信公众号
  20. 物联网安全期末知识点总结

热门文章

  1. Swift UIImageView 相框
  2. ECCV2022|何恺明团队开源ViTDet:只用普通ViT,不做分层设计也能搞定目标检测
  3. Linux中使用grep -v grep 查找不含有 grep 字段的行
  4. 视频编解码 — H264结构
  5. [Tensorflow]关于TFRecord和tf.Example的使用
  6. 单片机编程软件很简单(17),Keil单片机编程软件之编译、链接
  7. iphoneXR的tabbar底部图片的适配
  8. 学大数据需要什么基础?
  9. C#--如何用字符串组成的逻辑表达式进行判断,如:“7>2(4<7||8>4)“,字符串写的逻辑表达式来进行判断(只需3步)
  10. 【面试】小米公司嵌入式职位面试经验