Я хотел бы объяснить это на примере, рассмотрим этот массив с N = 8 элементами
1 2 3 4 5 6 7 8
Параллельное сокращение будет происходить в следующих шагах
1 2 3 4 5 6 7 8
3 7 11 15
10 26
36
Если вы считаетеКоличество операций сокращения у нас 4,2 и 1 на первом, втором и третьем шаге соответственно.Таким образом, общее количество операций, которое мы имеем, составляет 4 + 2 + 1 = 7 = N-1, и мы делаем все сокращения в O (N), и у нас также есть log (8) = 3 (это log to base 2) шагов, такмы платим за эти шаги стоимость, которая составляет O (logN).Следовательно, если мы использовали один поток для сокращения таким образом, мы добавляем две затраты, поскольку они происходят отдельно друг от друга, и у нас есть O (N + logN).Где O (N) - стоимость выполнения всех операций, а O (logN) - стоимость выполнения всех шагов.Теперь нет способа распараллелить стоимость шагов, поскольку они должны выполняться последовательно.Однако мы можем использовать несколько потоков для выполнения операций и делить стоимость O (N) на O (N / P).Поэтому у нас есть
Total cost = O(N/P + logN)