【发布时间】:2021-06-10 05:03:10
【问题描述】:
我正在研究 OpenCL 实现,其中主机端特定函数必须在每次 clEnqueueReadBuffer 执行完毕时调用。
我正在循环调用内核。它看起来像下面的有序队列。 clEnqueueNDRangeKernel() -> clEnqueueReadBuffer(&Event) -> clEnqueueNDRangeKernel() -> clEnqueueReadBuffer(&Event) .......
我使用 clSetEventCall() 在每个读取命令中注册事件以执行回调函数。我观察到,虽然命令队列是有序队列,但是回调函数的执行顺序并没有按顺序执行。
此外,在 OpenCL 1.2 中,它有如下提及。
注册用户回调函数的调用顺序 是未定义的。不保证回调函数 为事件注册的各种执行状态值将是 按照命令执行状态的确切顺序调用 变化。
谁能给我一个解决方案?我想按顺序执行回调函数。
【问题讨论】: