2015-09-28 6 views
2

Кажется, что можно сделать сокращение только для нечетного числа элементов. Например, он должен суммировать числа. Когда у меня есть четное число элементов, это будет выглядеть следующим образом:Уменьшение нечетного числа элементов CUDA

1 2 3 4 
1+2 
3+3 
6+4 

Но что делать, когда у меня есть, например 1 2 3 4 5? Последняя итерация - это сумма трех элементов 6 + 4 + 5 или что? Я видел тот же вопрос here, но не смог найти ответ.

ответ

4

Параллельное сокращение будет добавлять пары элементов первое:

1 1+3 4+6 
2 2+4 
3 
4 

Вашего пример с нечетным числом элементов, как правило, будет реализован как:

1 1+4 5+3 8+7 
2 2+5 7+0 
3 3+0 
4 0+0 
5 
0 
0 
0 

То есть, как правило, параллельно сокращение будет работать с множеством потоков с мощностью 2, и не более одного потока (последний) будет иметь меньше, чем полный набор данных для работы. Обычный способ обращения с этим - обнулить данные в размер потока. Если вы изучите пример кода cuda parallel reduction, вы найдете примеры этого.

+0

Большое вам спасибо! – user3856196