Я только начинаю изучать OpenCL. Я пытаюсь понять, какой прирост производительности можно ожидать при переносе функций / алгоритмов на графический процессор.
Самым базовым ядром, приведенным в большинстве учебных пособий, является ядро, которое берет два массива чисел и суммирует значение по соответствующим индексам и добавляет их в третий массив, например:
__kernel void
add(__global float *a,
__global float *b,
__global float *answer)
{
int gid = get_global_id(0);
answer[gid] = a[gid] + b[gid];
}
__kernel void
sub(__global float* n,
__global float* answer)
{
int gid = get_global_id(0);
answer[gid] = n[gid] - 2;
}
__kernel void
ranksort(__global const float *a,
__global float *answer)
{
int gid = get_global_id(0);
int gSize = get_global_size(0);
int x = 0;
for(int i = 0; i < gSize; i++){
if(a[gid] > a[i]) x++;
}
answer[x] = a[gid];
}
Я предполагаю, что вы никогда не сможете оправдать вычисление этого на графическом процессоре, передача памяти будет превышать время, затрачиваемое на вычисление этого на процессоре, на величины (я могу ошибаться, отсюда и этот вопрос). *
Что мне интересно, так это какой самый тривиальный пример, когда вы ожидаете значительного ускорения при использовании ядра OpenCL вместо процессора?