Я использую OpenCL для оптимизации кода в Raspberry Pi GPU (Videocore IV).
Я использую реализацию VC4CL, которая предлагает максимальный размер рабочей группы 12.
Однако при использовании простых ядер, например суммирования двух массивов, производительность графического процессора намного хуже, чем у процессора.
Например, для следующего ядра:
#define GLOBAL_SIZE 12
#define LOCAL_SIZE 1
#define WIDTH 12*12*12
#define NTIMES 1000
__attribute__ ((reqd_work_group_size(LOCAL_SIZE, LOCAL_SIZE, LOCAL_SIZE)))
__kernel void int_sum(global const uint* A, global const uint* B, global uint* C)
{
int g_id0 = get_global_id(0);
int g_id1 = get_global_id(1);
int g_id2 = get_global_id(2);
int index = g_id0 + g_id1 * GLOBAL_SIZE + g_id2 * GLOBAL_SIZE * GLOBAL_SIZE;
for(int k = 0; k < NTIMES; k++)
C[index + k * WIDTH] = A[index + k * WIDTH] + B[index + k * WIDTH];
}
, где суммируются два массива из 1e6 позиций, производительность процессора намного лучше ...
Я пытался изменить рабочую группу на одномерное, а также использовать другие комбинации, такие как (6x6x6 -> глобальный размер, 2x2x2 -> локальный размер).
Любой намек на то, что я могу делать неправильно?
Заранее спасибо.