使用clFinish使我的代码运行得更快

时间:2013-01-15 20:53:37

标签: opencl

我的代码基本上是:

for (...) {
     clEnqueueNDRangeKernel(...)
     clFinish(...)
     clEnqueueTask(...)
     clEnqueueReadBuffer(...) // blocking
}

所有内容都在一个命令队列中,并且未启用乱序执行模式。

此代码在我的GPU硬件上运行大约7.5秒。删除clFinish调用使其在12秒内运行。我读到你需要调用clFlush来开始执行队列,但是用clFlush替换clFinish也会让它在12s内运行。

如果我理解正确,clFinish是一个阻塞调用,等待所有命令完成。如何使用它代替clFlush使我的代码运行得更快?

1 个答案:

答案 0 :(得分:0)

调用clFinish会阻止代码在GPU上安排其他工作项。如果您安排的工作项多于GPU可以处理的工作项,那么性能会下降。没有代码,很难说,但听起来这就是你的问题。