Составители:
Рис. 4. Иллюстрация распараллеливания префиксных вычислений
Пусть i — идентификатор процесса, barrier(i) — точка син-
хронизации, old[n] — массив, гд е сохраняется старое значение.
int a[n], s[n], old[n]; # предполагается, что массив a[n]
# инициализирован
process Sum[i = 0 to n − 1] {
int d = 1;
s[i] = a[i];
barrier(i); # I барьер
while (d < n) {
old[i] = s[i]; # сохранение старых значений
barrier(i); # II барьер
if
(i − d) >= 0
s[i] = old[i − d] + s[i];
barrier(i); # III барьер
d = d + d; # удваивание расстояния
}
}
Замечание. Барьеры здесь необходимы для устранения взаимного
влияния:
I барьер: элементы s[i] должны быть проинициализированы до
начала выполнения программы;
70
Страницы
- « первая
- ‹ предыдущая
- …
- 67
- 68
- 69
- 70
- 71
- …
- следующая ›
- последняя »
