Итерировать ядра OpenCl

0

Каков наиболее эффективный способ итерации через набор ядер в OpenCl. Таким образом, псевдокод

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

Нужно ли просто выполнять эту функцию, создавая длинный CommandQueue, или я могу динамически загружать ядра после завершения? (Ps ядра должны иметь общие данные).

Сэм

Теги:
gpu
opencl

1 ответ

2
Лучший ответ

Самый простой способ - использовать команду 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);
  • 0
    В качестве заметки вы можете использовать события, чтобы объединить ваши ядра в списки зависимостей, используя этот стиль. Таким образом, вы можете использовать очередь «не в порядке» и одновременно выдвигать весь список.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню