我的代码基本上是:
for (...) {
clEnqueueNDRangeKernel(...)
clFinish(...)
clEnqueueTask(...)
clEnqueueReadBuffer(...) // blocking
}
所有内容都在一个命令队列中,并且未启用乱序执行模式。
此代码在我的GPU硬件上运行大约7.5秒。删除clFinish调用使其在12秒内运行。我读到你需要调用clFlush来开始执行队列,但是用clFlush替换clFinish也会让它在12s内运行。
如果我理解正确,clFinish是一个阻塞调用,等待所有命令完成。如何使用它代替clFlush使我的代码运行得更快?
答案 0 :(得分:0)
调用clFinish会阻止代码在GPU上安排其他工作项。如果您安排的工作项多于GPU可以处理的工作项,那么性能会下降。没有代码,很难说,但听起来这就是你的问题。