OPENCL2.0错题集(别再被声明为否决了)

OPENCL2.0错题集(别再被声明为否决了)

    • 前情概要
    • clCreateCommandQueue指令
    • clCreateImage2D指令
    • fopen()函数 --> fopen_s()函数 (打开Kernel文件用)
    • 参考链接

前情概要

AMD APP SDK 3.0 支持K社的opencl 1.x和2.0标准,目前大部分A卡都支持OPENCL 2.0 。单弃用了OPENCL1.2中的许多指令集,针对OPENCL 1.x适用但OPENCL 2.0中已弃用的指令中遇到的问题,做出了如下的整理。

clCreateCommandQueue指令

  1. opencl2.0 中对应指令:clCreateCommandQueueWithProperties(context, device, 0 &status) ;
  2. 更改说明:直接改为"…WithProperties"即可;

clCreateImage2D指令

  1. opencl2.0 中对应指令:clCreateImage2D
  2. 更改说明:clCreateImage2D和clCreateImage3D指令,在opencl 1.2版本中被整合为了同一个指令clCreateImage.
  3. 具体更改方法如下,
    修改前的代码:
    OPENCL2.0错题集(别再被声明为否决了)_第1张图片
    修改后的代码:
    OPENCL2.0错题集(别再被声明为否决了)_第2张图片

fopen()函数 --> fopen_s()函数 (打开Kernel文件用)

原始代码:
OPENCL2.0错题集(别再被声明为否决了)_第3张图片
在支持opencl 2.0的A卡Windows7环境中执行后,得到如下报错:
在这里插入图片描述
修改后的代码:
OPENCL2.0错题集(别再被声明为否决了)_第4张图片
修改说明:
fopen_s()函数引入了error机制,若fopen_s()打开文件失败,则返回非零值即err≠0,通过之后的判断语句报错并退出程序;若该函数成功打开文件,则返回值为0即err=0,程序继续执行不会退出。

fopen()函数打开失败返回NULL,若打开成功则返回非零值,该函数由于安全性在之后的版本中被修改掉了。

使用fopen_s()函数需要额外定义一个errno_t类型变量。

测试程序为报错且运行正常,但不确定是否包含其他隐藏的问题。(参考代码见其他博客)

暂时遇到的常见问题只有这些,如果有其他典型的版本不兼容的问题欢迎补充。

参考链接

  1. ”error C4996: ‘clCreateImage2D’: 被声明为已否决“ 链接:https://blog.csdn.net/Tinainchina/article/details/80196624
  2. “fopen和fopen_s用法的比较” 链接:https://www.cnblogs.com/1996313xjf/p/6012228.html

你可能感兴趣的:(OPENCL)