OpenCL事件和命令队列

时间:2010-08-23 20:34:38

标签: queue parallel-processing cuda opencl

我正在努力将CUDA应用程序(this if you must know)翻译成OpenCL。原始应用程序使用C风格的CUDA API,单个流只是为了避免在读取结果时自动忙等待。

现在我注意到OpenCL命令队列看起来很像CUDA流。但是在the device read command中,同样在write和kernel execute命令中,我也注意到事件的参数。所以我想知道,执行设备写入需要什么,一些内核(例如一次调用一个内核然后100次调用另一个内核)和一个设备读取,所有这些都是顺序执行的?

  1. 如果我只是按顺序将它们排入同一队列,它们会像在CUDA中一样顺序执行吗?
  2. 如果这不起作用,可以/应该菊花链式事件,使每个呼叫的等待列表成为前一个呼叫的事件吗?
  3. 或者我应该将所有先前的事件添加到每个呼叫的等待列表中,例如是否有N ^ 2搜索依赖项或其他内容?
  4. 或者我是否需要单独调用每个调用的event.wait(),就像它在AMD's tutorial中所说的一样?
  5. 谢谢!

1 个答案:

答案 0 :(得分:5)

这取决于您如何创建命令队列。在clCreateCommandQueue中,有一个属性参数,可以包含CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,它可以在命令队列中启用非顺序执行。

如果设置了该属性,命令可能无序或并行执行,并且同步它们的唯一方法是使用事件。

如果未设置该属性,则命令会在队列中按顺序执行。