OpenCL双精度计算结果不一致,A卡不正确

Eric Hu 2019-04-11 10:57:21
最近把一个CPU计算代码翻译为OpenCL进行运行,已经调试并验证通过(使用GTX1060).
计算过程是一个按迭代过程,计算结果以残差(后一迭代步与前一迭代步直接的结果差值)方式呈现,残差变小的过程称为收敛过程;
计算环境VS2015,全部fp64,Kernel函数依次在同一命令队列中调用,基于event等待进行约束;
现象是:
1.使用CUDA 9.2(OpenCL1.2)在GTX1060上的运行,各迭代步结果与CPU串行运行基本一致(在小数点12后有细微偏差);
2.A卡具有Debug与Release的区别(仅改变VS的Debug与Release)
a)使用Debug直接运行,第3个迭代步就发散(计算结果nan),前面2步结果不正确且表现出随机性(多次运行结果均不一致);
b)使用Release运行,能够计算且不发散,但各迭代步的值和CPU/GTX1060有很大差别;
c)使得Debug调试,若对包含调用多个clEnqueueNDRangeKernel()的函数step over(逐过程)运行,结果出错,但是,如果进入该函数后,逐个运行clEnqueueNDRangeKernel()函数,结果又正确一致;
d)尝试更改AMD驱动版本,更换AMD显卡(2片r9 390,1片r9 280x),添加OpenCL编译选项(如-cl-std=CL1.2 -cl-opt-disable)等均没效果;
e)本身未启用乱序执行,怀疑有不按照流程执行,于是使用了clSetEventCallback设置回调函数监控时间,发现流程正确。
综上,尤其是那个逐个监控就正确,不看时就不正确,感觉是这个“薛定谔事件”极为不科学.

...全文
15118 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eric Hu 2019-07-11
  • 打赏
  • 举报
回复
这么久也没人回复 最后自己解决了 发在另一个论坛上 https://bbs.gpuworld.cn/index.php?topic=73218.0 OpenCL还是太小众,为啥不用CUDA,因为qióng

601

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧