Каков наиболее эффективный способ итерации через набор ядер в OpenCl. Таким образом, псевдокод
for i : max {
<kernel 1>
<kernel 2>
<kernel 3>
}
Нужно ли просто выполнять эту функцию, создавая длинный CommandQueue, или я могу динамически загружать ядра после завершения? (Ps ядра должны иметь общие данные).
Сэм
Самый простой способ - использовать команду Command Queue и нажать на нее ядро в желаемом порядке:
// 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);