gpt4 book ai didi

opencl - clFlush(与 clFinish 相反)实际上有什么作用吗?

转载 作者:行者123 更新时间:2023-12-03 19:11:47 25 4
gpt4 key购买 nike

OpenCL clFinish() API 调用会阻塞,直到命令队列上的所有命令都已完成执行。相关函数, clFlush() ,据说

Issues all previously queued OpenCL commands in a command-queue to the device associated with the command-queue.



这意味着什么?它是否使这些命令跳过等待事件?这听起来不太合理。在发出命令之前它会阻塞吗?可能不是,就是这样 clFinish()做。几乎好像 clFlush()实际上不必做任何事情。

我错过了什么?

最佳答案

当您排队时 异步 使用 opencl 的命令并不能真正保证 GPU 会实际执行这些命令。
这些异步命令通常是内存传输(clEnqueueWriteBuffer、clEnqueueReadBuffer),阻塞标志设置为 CL_FALSE 和内核调用(clEnqueueNDRangeKernel)。
如果您希望保证命令会执行,则必须将阻塞命令(例如将阻塞标志设置为 CL_TRUE 的 enqueue*** 命令之一)加入队列,或者调用 clFinish。
clFlush 还保证您排队的命令将被执行。命令被“刷新”到硬件命令缓冲区,并在 GPU 调度程序调度它们执行时被执行。
这背后的逻辑是,用最大的工作量使 GPU 饱和(通过许多入队调用填充大型命令缓冲区),然后告诉 GPU 使用单个同步调用(clFinish)或clFlush。
您可能想通过 clFinish 调用 clFlush 的原因之一是如果您希望 交错 CPU 工作与 GPU 工作:

clEnqueue*** // async
clEnqueue*** // async
clEnqueue*** // async
clFlush(...); // async, make sure commands will execute
// do some heavy CPU work while GPU is executing commands
clFinish(...); // synchronous, ensure all commands are done, collect results.

关于opencl - clFlush(与 clFinish 相反)实际上有什么作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61797919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com