Я пишу код для добавления двух матриц размером 1024 * 1024 каждый. Таким образом, мой размер работы должен быть 2, а рабочий объем всей работы должен быть 1024 * 1024. Я хочу установить размер каждой рабочей группы в 64 * 64. Как мне это достичь?clEnqueueNDRangeKernel с рабочим размером = 2
Так что мой код должен быть что-то вроде: -
clEnqueueNDRangeKernel(cl_command_queue command_queue,cl_kernel kernel,cl_uint work_dim,const size_t *global_work_offset,
const size_t *global_work_size,const size_t *local_work_size,
cl_uint num_events_in_wait_list,const cl_event *event_wait_list,cl_event *event)
local_work_size=64*64
где, global_work_size=1024*1024
, work_dim=2
. Как получить отдельные элементы в моем коде ядра?
Это мой код ядра: -
__kernel void hello(__global int ** A,__global int ** B,__global int ** C)
{
int x = get_global_id(0);
int y = get_global_id(1);
C[x][y]=A[x][y]+B[x][y];
}
Если я оставил локальный размер пустого (NULL), будет ли быть какие-либо проблемы? – ikk
@ikk Нет, если ваше ядро не предполагало, что размер рабочей группы будет чем-то конкретным (например, если он использует локальную память). – jprice
Итак, каков был бы самый эффективный размер работы? Если глобальный размер составляет 1024 * 1024, тогда я должен установить локальный размер как 8 * 8 с учетом локального размера в большинстве устройств> = 64 – ikk