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

UptoLike

reduce.f
1) PROGRAMM reduce
2) INCLUDE ’mpif.h’
3) REAL a(9)
4) CALL MPI_INIT(ierr)
5) CALL MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr)
6) CALL MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr)
7) ista = myrank*3+1
8) iend = ista +2
9) DO i = ista, iend
10) a(i) = i
11) END DO
12) sum = 0.0
13) DO i = ista, iend
14) sum = sum + a(i)
15) END DO
16) CALL MPI_REDUCE(sum,tmp,1,MPI_REAL,MPI_SUM,0,
$MPI_COMM_WORLD,ierr)
17) sum=tmp
18) IF (myrank=0) THEN
19) PRINT *, ’sum=’, sum
20) ENDIF
21) CALL MPI_FINALIZE(ierr)
22) END
Листинг 5. Пример программы на языке Фортран, использующей
процедуру MPI_REDUCE стандарта MPI и вычисляющей сумму элементов
массива a(i), i=1,2,. . .,9.
В этой программе предполагается, что имеется три процесса,
вовлеченные в вычисления, и каждому процессу поручается одна
треть массива a(i). Каждый процесс вычисляет частичные суммы
в строках 13–15, а в строках 16–17 эти частичные суммы складыва-
ются, и результат посылается в корневой процесс данном случае
таковым является процесс с номером 0). Вместо девяти сложений
получается три сложения плюс одна глобальная сумма. В этом слу-
чае пятый аргумент в MPI_REDUCE указывает характер проводимых
операций, а четвертый на тип данных.
154