cudaПараллельное сокращение (например, как суммировать массив)


замечания

Алгоритм параллельной регрессии обычно относится к алгоритму, который объединяет массив элементов, создавая единственный результат. Типичными проблемами, которые относятся к этой категории, являются:

  • суммирование всех элементов в массиве
  • нахождение максимума в массиве

В общем случае параллельное редукция может быть применено для любого двоичного ассоциативного оператора , т. Е. (A*B)*C = A*(B*C) . С таким оператором * алгоритм параллельной редукции повторно группирует аргументы массива в парах. Каждая пара вычисляется параллельно с другими, уменьшая общий размер массива за один шаг. Процесс повторяется до тех пор, пока не будет существовать только один элемент.

Если оператор коммутативен (т. Е. A*B = B*A ) в дополнение к ассоциативному, алгоритм может парировать в другой схеме. С теоретической точки зрения это не имеет никакого значения, но на практике это дает лучшую схему доступа к памяти:

Не все ассоциативные операторы коммутативны - например, возьмем матричное умножение.

Параллельное сокращение (например, как суммировать массив) Связанные примеры