OpenCL事件和命令队列

Ken*_*_g6 5 queue parallel-processing cuda opencl

我正在努力将一个CUDA应用程序(如果你必须知道的话)翻译成OpenCL.原始应用程序使用C风格的CUDA API,单个流只是为了避免在读取结果时自动忙等待.

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

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

谢谢!

Mat*_*gro 5

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

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

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