【发布时间】:2018-05-30 16:28:45
【问题描述】:
我创建了一个有序的 OpenCL 队列。我的管道将多个内核排入队列。
queue = clCreateCommandQueue(cl.context, cl.device, 0, &cl.error);
for(i=0 ;i < num_kernels; i++){
clEnqueueNDRangeKernel(queue, kernels[i], dims, NULL, global_work_group_size, local_work_group_size, 0, NULL, &event);
}
kernels[0] 的输出是 kernels[1] 的输入。 kernels[1] 的输出是 kernels[2] 的输入,以此类推。
由于我的命令队列是一个有序队列,我的假设是 kernels[1] 只有在 kernels[0] 完成后才会启动。
- 我的假设有效吗?
- 我是否应该使用
clWaitForEvents来确保在将下一个内核加入队列之前完成前一个内核? - 有什么方法可以将多个内核堆叠到队列中,只需将输入传递给 kernels[0] 并直接从最后一个内核获取输出? (不必将每个内核一个一个地排入队列)
【问题讨论】:
标签: opencl