我正在努力将CUDA应用程序(this if you must know)翻译成OpenCL。原始应用程序使用C风格的CUDA API,单个流只是为了避免在读取结果时自动忙等待。
现在我注意到OpenCL命令队列看起来很像CUDA流。但是在the device read command中,同样在write和kernel execute命令中,我也注意到事件的参数。所以我想知道,执行设备写入需要什么,一些内核(例如一次调用一个内核然后100次调用另一个内核)和一个设备读取,所有这些都是顺序执行的?
谢谢!
答案 0 :(得分:5)
这取决于您如何创建命令队列。在clCreateCommandQueue中,有一个属性参数,可以包含CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,它可以在命令队列中启用非顺序执行。
如果设置了该属性,命令可能无序或并行执行,并且同步它们的唯一方法是使用事件。
如果未设置该属性,则命令会在队列中按顺序执行。