迭代OpenCl内核

时间:2014-06-19 09:40:23

标签: c++ c opencl gpu

在OpenCl中迭代一组内核的最有效方法是什么。所以伪代码是

for i : max {
    <kernel 1>
    <kernel 2>
    <kernel 3>
}

我是否只需要遍历此函数创建一个长CommandQueue,或者我可以在完成后动态加载内核吗? (P.s内核都必须共享一些全局数据)。

萨姆

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用按顺序命令队列&amp;以理想的顺序将内核推送到它:

// Creating in-order command queue (default case).
cl_command_queue queue = clCreateCommandQueue(...);

// Just for test
std::vector<cl_kernel> kernels;
const int num_kernels = 12;

for(int i=0; i<num_kernels; i++){
    kernels.push_back(clCreateKernel(...));
}

for(cl_kernel &kernel : kernels){
    clEnqueueNDRangeKernel(queue, kernel,...);
}

/* Kernels execution tasks are issued on Device all at once.
 * Execution order is same to order of enqueue, as Queue is in-order.*/
clFlush(queue);