clEnqueueMarkerWithWaitList用法

时间:2014-07-26 18:29:51

标签: synchronization opencl

我最近读过一本关于OpenCL和队列同步方法的书,但我不明白使用clEnqueueMarkerWithWaitList和clWaitforEvents之间的区别。

例如,在下面的示例中,kernel_2实例的执行依赖于将两个缓冲区clmem_A和clmem_B写入设备。我不明白删除clEnqueueMarkerWithWaitList命令并将clwaitforEvents的参数更改为write_event时有什么区别。

cl_event write_event[2];
clEnqueueWriteBuffer(queue, clmem_A, ***, &write_event[0] );
clEnqueueWriteBuffer(queue, clmem_B, ***, &write_event[1] );
clEnqueueMarkerWithWaitList (queue, 2, write_event, &marker); //deleting this command
clEnqueueNDRangeKernel(queue, kernel_1, *** );
clWaitForEvents(1, &marker);// and replace marker with write_event
clEnqueueNDRangeKernel(queue, kernel_2, *** );

我相信在这两种情况下,kernel_2将在写入设备后执行,如果队列出现故障,kernel_1可以并发执行。

1 个答案:

答案 0 :(得分:0)

是的,这是等价的。

clEnqueueMarkerWithWaitList是OpenCL 1.2的新增功能,提供了比clWaitForEvents更多的灵活性,因为您可以携带单个事件而不是它们的集合。

如果您编写OpenCL 1.1代码(例如,由于NVIDIA滞后于行业),则无法使用clEnqueueMarkerWithWaitList