CLExecute

Выполняет OpenCL программу. Существует 3 варианта функции:

1. Запуск функции kernel на одном ядре

bool  CLExecute(
   int          kernel                    // хендл на кернел OpenCL программы
   );

2. Запуск нескольких копий kernel (OpenCL функция) с описанием пространства задач

bool  CLExecute(
   int          kernel,                   // хендл на кернел OpenCL программы
   uint         work_dim,                 // размерность пространства задач 
   const uint&  global_work_offset[],     // начальное смещение в пространстве задач
   const uint&  global_work_size[]        // общее количество задач
   );

3. Запуск нескольких копий kernel (OpenCL функция) с описанием пространства задач и указанием размера локального подмножества задач в группе

bool  CLExecute(
   int          kernel,                   // хендл на кернел OpenCL программы
   uint         work_dim,                 // размерность пространства задач 
   const uint&  global_work_offset[],     // начальное смещение в пространстве задач
   const uint&  global_work_size[],       // общее количество задач
   const uint&  local_work_size[]         // количество задач в локальной группе
   );

Параметры

kernel

[in]  Хендл на кернел OpenCL.

work_dim

[in]  Размерность пространства задач.

global_work_offset[]

[in]  Начальное смещение в пространстве задач.

global_work_size[]

[in]  Размер подмножества задач.

local_work_size[]

[in]  Размер локального подмножества задач в группе.

Возвращаемое значение

Возвращает true при успешном выполнении, в противном случае false. Для получения информации об ошибке используйте функцию GetLastError().

Примечание

Рассмотрим на примере смысл параметров:

  • work_dim задает размерность массива work_items[], описывающего задачи. Если work_dim=3, то используется 3-мерный массив work_items[N1, N2, N3].
  • global_work_size[] содержит значения, задающие размер массива work_items[]. Если у нас work_dim=3, и соответственно, массив global_work_size[3] может быть {40, 100, 320}. Тогда имеем work_items[40, 100, 320]. Значит общее количество задач равно 40 х 100 х 320 = 1 280 000.
  • local_work_size[] задает подмножество задач, которые будут выполняться указанным кернелом OpenCL программы. Его размерность равна размерности work_items[] и позволяет общее подмножество задач нарезать на более мелкие подмножества без остатков от деления. Фактически, размеры массива local_work_size[] должны быть подобраны таким образом, чтобы глобальное множество задач work_items[] нарезалось на более мелкие подмножества. В данном примере подойдет local_work_size[3]={10, 10, 10}, так как work_items[40, 100, 320] без остатка можно собрать из массива local_items[10, 10, 10].