是否需要循环调用clFinish?

王果_love 2014-03-06 04:20:54
按照以往的知识经验,每个kernel函数调用后都得调用clFinish(commandqueue),这样没问题却非常耗时。
最近发现一个问题,循环调用kernel时,不循环调用clFinish,有时结果正确有时出错。有经验的大侠们,来分享一下经验哈!
...全文
1491 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
张花花 2014-04-28
  • 打赏
  • 举报
回复
具体说一下,如过kernel本身是有依赖的,那么在kernel中加循环也是个好办法。 另外,完全可以用cl_event来处理,要比clFinish好多了。
yancheng518 2014-03-15
  • 打赏
  • 举报
回复
前提是CPU和GPU没有交互。不能CPU和GPU交叉调用。
yancheng518 2014-03-15
  • 打赏
  • 举报
回复
是在GPU上吗?如果是用同一个命令队列,是不需要加clFinish的
lcwyylcwyy 2014-03-07
  • 打赏
  • 举报
回复
多用内部barrier结合local吧。多次kernel触发,而且数据时对时错,我感觉你可能没怎么使用local内存,当然也可能有其他情况,比如要保存中间结果而且数据输入输出映射不是一对一的话,clfinish可能就必须要用了。另外,barrier也可以同步global内存,在内核同步一下global试试,不过即使是全局数据,barrier也只是同步workgroup/block中的线程,不是所有线程一起同步。
outstander 2014-03-06
  • 打赏
  • 举报
回复
如果你写的kernel互相依赖性,那不在循环中clfinish当然是要出错的啊。 特别是使用不阻塞的启动kernel代码在GPU上运行时,CPU端只要将触发kernel运行的指令送到GPU后就会继续运行,而不会等kernel代码运行。 因此,在这种情况下kernel可能被异步多次触发了,如果每次kernel处理的没依赖于以前kernel的数据,那自然就会引入正确性问题。

601

社区成员

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

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