OPENCL2.0错题集(别再被声明为否决了)
前情概要
AMD APP SDK 3.0 支持K社的opencl 1.x和2.0标准,目前大部分A卡都支持OPENCL 2.0 。单弃用了OPENCL1.2中的许多指令集,针对OPENCL 1.x适用但OPENCL 2.0中已弃用的指令中遇到的问题,做出了如下的整理。
clCreateCommandQueue指令
- opencl2.0 中对应指令:clCreateCommandQueueWithProperties(context, device, 0 &status) ;
- 更改说明:直接改为"…WithProperties"即可;
clCreateImage2D指令
- opencl2.0 中对应指令:clCreateImage2D
- 更改说明:clCreateImage2D和clCreateImage3D指令,在opencl 1.2版本中被整合为了同一个指令clCreateImage.
- 具体更改方法如下,
修改前的代码:
修改后的代码:
fopen()函数 --> fopen_s()函数 (打开Kernel文件用)
原始代码:
在支持opencl 2.0的A卡Windows7环境中执行后,得到如下报错:
修改后的代码:
修改说明:
fopen_s()函数引入了error机制,若fopen_s()打开文件失败,则返回非零值即err≠0,通过之后的判断语句报错并退出程序;若该函数成功打开文件,则返回值为0即err=0,程序继续执行不会退出。
fopen()函数打开失败返回NULL,若打开成功则返回非零值,该函数由于安全性在之后的版本中被修改掉了。
使用fopen_s()函数需要额外定义一个errno_t类型变量。
测试程序为报错且运行正常,但不确定是否包含其他隐藏的问题。(参考代码见其他博客)
暂时遇到的常见问题只有这些,如果有其他典型的版本不兼容的问题欢迎补充。
参考链接
- ”error C4996: ‘clCreateImage2D’: 被声明为已否决“ 链接:https://blog.csdn.net/Tinainchina/article/details/80196624
- “fopen和fopen_s用法的比较” 链接:https://www.cnblogs.com/1996313xjf/p/6012228.html