上一篇博文《OpenCL Installable Client Driver (ICD) Loader编译》详细描述了如何编译OpenCL ICD Loader。OpenCL ICD Loader自带了测试程序,成功编译后可以根据源码根目录下README.txt的说明运行测试程序来验证Loader是否可以正常工作:

== Running ICD Test ==
ICD Test can be run using ctest, which is a companion to cmake. It can also be
run directly by executing icd_loader_test(.exe) executable from the bin folder.
=== Linux ===
1. Add driver stub as an ICD
echo full/path/to/libOpenCLDriverStub.so > /etc/OpenCL/vendors/test.icd
2. Run test using ctest
make test
=== Windows ===
1. Add driver stub as an ICD by adding appropriate registry value
Key for 32-bit apps: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Khronos\OpenCL\Vendors
Key for 64-bit apps: HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors
Add a REG_DWORD value:
Name: c:/full/path/to/OpenCLDriverStub.dll
Data: 0
Note: The build_using_cmake.bat builds ICD test as a 32-bit binary.
2. Run test using ctest.exe
cd build
ctest.exe
== Cleanup ==
Manually remove the registry key or .icd files added for running the ICD test.
The “build” and “bin” folders are autogenerated by the build so those may be
safely deleted without losing any source code (on Linux “make clobber” will
delete them).

Running ICD Test

以Win7 x64系统为例,按winkey+R弹出运行对话框,执行regedit打开注册表
找到Key”HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors”(如果你没有安装过OpenCL SDK,就不存在这个Key,你可以手工建一个)
然后如下图新建一个值,名字就是编译OpenCL Installable Client Driver (ICD) Loader生成的OpenCLDriverStub.dll的全路径名

上图中HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors存在amdocl.dll,amdocl64.dll两个键是因为我的电脑中安装了AMD 显卡的OpenCL驱动。

然后可以开始执行测试,在build文件夹下运行ctest,然后程序报错了,但没提示是什么错误:

直接在build/bin文件夹执行icd_loader_test.exe,同样报错,但有错误提示

E:\download\Devtools\opencl\OpenCL-ICD-Loader-master.vs15\bin\Debug>icd_loader_test.exe
ERROR: App log and stub log differ.
ICD Loader Test FAILED

ERROR: App log and stub log differ.

最终发现是OpenCL ICD Loader的测试程序有bug,解决办法:
打开./test/driver_stub/cl.c文件,找到clCreateImage2D函数,在test_icd_stub_log调用参数表后最增加一个errcode_ret,详见下面代码片段中的中文注释。

CL_API_ENTRY cl_mem CL_API_CALL
clCreateImage2D(cl_context              context ,cl_mem_flags            flags ,const cl_image_format * image_format ,size_t                  image_width ,size_t                  image_height ,size_t                  image_row_pitch ,void *                  host_ptr ,cl_int *                errcode_ret) CL_API_SUFFIX__VERSION_1_0
{cl_mem obj = (cl_mem) malloc(sizeof(struct _cl_mem));obj->dispatch = dispatchTable;test_icd_stub_log("clCreateImage2D(%p, %x, %p, %u, %u, %u, %p, %p)\n",context,flags,image_format,image_width,image_height,image_row_pitch,host_ptr,errcode_ret);//源码中少填了一个参数,补上test_icd_stub_log("Value returned: %p\n", obj);return obj;
}

重新编译OpenCL ICD Loader的代码后再运行ctest,测试成功

注意:

测试工作结束后,一定要把注册表中你手工增加的那个值删除,否则会造成真正的OpenCL调用异常。

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

  1. kafka完美解决报错:Error while executing topic command:Replication factor:3 larger than available brokers:0

    kafka完美解决报错:Error while executing topic command:Replication factor:3 larger than available brokers:0 ...

  2. 解决报错error resource androidattrdialogCornerRadius not found

    解决报错error: resource android:attr/dialogCornerRadius not found 1.问题描述 运行Android Studio程序,产生报错error: r ...

  3. 解决报错 Error in processing command line: Don‘t understand command line argument “-cl-no-subgroup-ifp“

    调用openpose进行姿势检测,发现报错(虽然报错但能继续运行,输出检测结果) OpenCV(ocl4dnn): consider to specify kernel configuration c ...

  4. 解决报错Error: libzip5-tools conflicts with libzip-0.10.1-8.el7.x86_64

    yum install php php-devel安装php时遇见报错 Error: libzip5-tools conflicts with libzip-0.10.1-8.el7.x86_64Yo ...

  5. python import MySQLdb 解决报错 Error:Reason: image not found

    解决方法 方法一:使用pymysql import pymysqldb = pymysql.connect("localhost", "username", & ...

  6. python pip下载本地依赖包,并在离线环境中安装,并解决报错ERROR: Could not find a version that satisfies the requirement报错

    文章目录 步骤1:导出依赖 步骤2:离线下载依赖包 步骤3:进入新环境使用python安装依赖 整体思路如下: 首先根据项目需要导出依赖包,由于本地的python环境中其实安装了很多乱七八糟的包,这些 ...

  7. 报错 | error ‘App‘ is not defined no-undef

    error  'App' is not defined  no-undef 解决方法:在vue.config.js文件中写入以下代码,之后在npm run serve/dev就行(如果没有这个文件,就 ...

  8. 【操作经验】Mysql如何加载导入大批量数据,解决报错ERROR 3948 (42000)

    前言:新装mysql,遇到ERROR 3948 (42000):Loading local data is disabled; this must be enabled on both the cli ...

  9. git:Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists)....

    Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists). 解决办法一:保 ...

最新文章

  1. 机器学习并不“万能”
  2. 获取服务(getService)
  3. jetty 通过配置文件嵌入式启动web服务
  4. java接口方法默认权限_java 接口内定义方法的权限是什么?
  5. python爬虫开发环境中几个爬虫库的主要用途_分分钟了解Python爬虫
  6. 吴恩达《机器学习》第一章:监督学习和无监督学习
  7. inkscape生成g代码_UG NX车削加工编程实例,从创建车削加工到生成G代码,简简单单...
  8. 为什么 Python 不用设计模式?
  9. 如何注册和获取百度地图的密钥
  10. 《大数据——大价值、大机遇、大变革》试读
  11. 使用TortoiseSVN碰到的几个问题(2)-冲突解决, 图标重载
  12. 好用且种类多的Unity3d游戏特效素材推荐,都在这里
  13. Linux OBS虚拟摄像头 解决方案
  14. 智能手表发展史:我们用过、见过和从未听说的
  15. 机器学习一些核心概念的解读文档汇总
  16. java爬网页图片到本地
  17. 软件安装【持续更新ing】
  18. webgl 第三人称相机
  19. 三人成虎,概率却不足十分之五?几个贝叶斯推理故事的分享
  20. python中lt是什么意思_python里的tplt什么意思 Python的format格式化输出

热门文章

  1. Jsp实验0:调试运行eBuy电子商城系统
  2. android手电筒
  3. 三废的日常——什么是负载均衡
  4. Mac-修改MySQL密码
  5. Code Geass CD入手
  6. 查看当前目录和上一级目录的命令
  7. 关于书籍“Composing Programs”1.6.3自定义函数的嵌套定义与非嵌套定义的比较
  8. WebSocket接口测试方法
  9. 利用跨模态 Transformer 进行多模态信息融合
  10. 神经网络算法的关键参数,神经网络预测时间序列