我有一个代码,基本上是:
for (...) {
clEnqueueNDRangeKernel(...)
clFinish(...)
clEnqueueTask(...)
clEnqueueReadBuffer(...) // blocking
}
一切都在一个命令队列中,并且未启用乱序执行模式。
此代码在我的 GPU 硬件上运行大约 7.5 秒。删除 clFinish 调用使其在 12 秒内运行。我读到你需要调用 clFlush 来开始执行队列,但是用 clFlush 替换 clFinish 也可以让它在 12 秒内运行。
如果我理解正确,clFinish 是一个阻塞调用,它等待所有命令完成。如何使用它而不是 clFlush 使我的代码运行得更快?