在OpenCl中迭代一组内核的最有效方法是什么。所以伪代码是
for i : max {
<kernel 1>
<kernel 2>
<kernel 3>
}
我是否只需要遍历此函数创建一个长CommandQueue,或者我可以在完成后动态加载内核吗? (P.s内核都必须共享一些全局数据)。
萨姆
答案 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);