2

我有一个代码,基本上是:

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

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

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

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

4

1 回答 1

0

调用 clFinish 可防止代码在 GPU 上调度其他工作项。如果您计划的工作项超出 GPU 的处理能力,则性能会下降。没有代码很难说,但这听起来像是你的问题。

于 2014-01-16T19:08:09.147 回答