我正在尝试按顺序应用过滤器基本图像->过滤器1->过滤器2->读取图像。我曾经使用 CL1.1 (C),其中有事件,因此 filter2 需要等待 filter1 事件完成,而 read 需要等待 filter2 事件完成。
在 CL 1.2 (C++) 中不再是这种情况,因为它现在要求事件向量。但是我下面的代码仍然可以工作并产生正确的结果,我不明白为什么与 CL1.1 (C) 一样,这不起作用。
cl::CommandQueue queue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err);
...
err = queue.enqueueNDRangeKernel(filter1Kernel, cl::NullRange, globalWorkSize, cl::NullRange, nullptr, nullptr);
err = queue.enqueueNDRangeKernel(filter2Kernel, cl::NullRange, globalWorkSize, cl::NullRange, nullptr, nullptr);
err = queue.enqueueReadImage(filter2Image, CL_FALSE, origin, region, 0, 0, ResultImage, nullptr, nullptr);
即使使用非阻塞调用并获得正确的输出,我也可以访问图像。是否不再需要同步?