Алгоритмы параллельных вычислений и программирование. Бурова И.Г - 169 стр.

UptoLike

§ 8. Редукционные данные
Редукционные данные применяются при выполнении глобаль-
ных операций вычислительной системой. Сначала операция выпол-
няется на каждом процессоре с использованием тех данных, кото-
рые на нём размещены; затем результат заносится в редукционную
переменную процессора. По редукционным переменным вычисля-
ется результат глобальной операции. Рассмотрим достаточно крас-
норечивый пример использования редукционной переменной.
CDVM$ PARALLEL (I) ON B(I), REDUCTION(SUM(S))
DO I=1,N
S=S+B(I)
END DO
В этом примере для каждого процессора заводятся локальные (ре-
дукционным) переменные S, в которых при выполнении будут хра-
ниться частичные суммы. После выполнения всех сложений, полу-
ченные частичные суммы складываются, что даст искомую сумму
в переменной S.
Замечание. Если при суммировании важна последователь-
ность сложений (для уменьшения результирующей ошибки округ-
ления), то указанный выше приём использовать нельзя, так как при
его применении теряется контроль за последовательностью вычис-
лений.
§ 9. Пересечённые данные
Пересечённые данные (across data) используются для конвей-
ерного исполнения операций над массивом на BC. Например, если
результаты вычислений массива на I процессоре используются на II
процессоре, а полученные результаты на III процессоре и т.д. и если
этот процесс может быть организован, так что вычислительная си-
стема обрабатывает массив конвейерно, то используется директива
ACROSS.
CDVM$ PARALLEL (I) ON B(I), ACROSS(B[d1,d2])
DO I=1+d1, N-d2
B(I)=B(I-d1)+B(I+d2)
END DO
170