Я пытаюсь использовать opencl в первый раз, цель состоит в том, чтобы вычислить argmin каждой строки в массиве.Поскольку операция в каждом ряду не зависит от других, я подумал, что это будет легко установить на видеокарту.
Мне кажется, что при использовании этого кода производительность хуже, чем когда я просто запускаю код на процессоре с внешним циклом, любая помощь будет признательна.
Вот код:
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
int argmin(global double *array, int end)
{
double minimum = array[0];
int index;
for (int j = 0; j < end; j++)
{
if (array[j] < minimum)
{
minimum = array[j];
index = j;
}
}
return index;
}
kernel void execute(global double *dist, global long *res, global double *min_dist)
{
int row_size = 0;
int i = get_global_id(0);
int row_index = i * row_size;
res[i] = argmin(&dist[row_index], row_size);
min_dist[i] = dist[res[i] + row_index];
}