如何发布事件?

Jac*_*cko 2 opencl

假设我有一个内核,它在运行之前必须等待 5 个事件完成。一旦内核启动,我如何安全地释放这 5 个事件?

一种方法是在内核完成时触发回调,并在那时释放事件,但这看起来很尴尬。

jpr*_*ice 6

一旦您将等待它们的内核加入队列,您就可以安全地释放这些事件。OpenCL 规范的描述clReleaseEvent包括这一段:

一旦引用计数变为零,此事件标识的特定命令已完成(或终止)并且上下文的命令队列中没有命令需要等待此事件完成,则事件对象将被删除。

clReleaseEvent函数只是减少引用计数,但如果正在执行或挂起执行的命令有其他引用,则不会实际销毁事件。

  • 此外,无法保证引用计数是多少。将您的创建/保留/发布模式视为仅影响引用计数的主机端。用户引用计数从 1 开始,以 0 结束。可能会添加一个设备引用计数,或者可能有一个单独的设备引用计数。无论哪种方式,设备都将保存对其正在使用的事物的引用。所有这一切的重点是说:不要依赖引用计数的值来做任何事情。 (2认同)