Я хотел бы применить уменьшить на эту часть моего кода ядра (1 размерные данные):OpenCL снижение поплавка сумма
__local float sum = 0;
int i;
for(i = 0; i < length; i++)
sum += //some operation depending on i here;
Вместо того, чтобы только 1 поток, который выполняет эту операцию, я хотел бы иметь n потоков (с n = длина), а в конце имеет 1 поток, чтобы сделать общую сумму.
В псевдокоде, я хотел бы иметь возможность написать что-то вроде этого:
int i = get_global_id(0);
__local float sum = 0;
sum += //some operation depending on i here;
barrier(CLK_LOCAL_MEM_FENCE);
if(i == 0)
res = sum;
Есть ли способ?
У меня есть состояние гонки на сумму.
Это называется параллельное сокращение, посмотрите его. Это не так просто, как ваш фрагмент, но это не слишком мучительно. Просто требуется еще одна работа. – Thomas