Высокопроизводительные вычисления на кластерах. Беликов Д.А - 60 стр.

UptoLike

60
Call MPI_COMM_RANK(MPI_COMM_WORLD, Rank, Ierr)
C «0»-процесс засекает время
If (Rank.eq.0) time1 = MPI_WTime()
C Каждый процесс определяет свои пределы интегрирования
C и число интервалов разбиения
Al = A+(B-A)*Rank/Size
Bl = Al+(B-A)/Size
N = 1000000
C Каждый процесс определяет свою частичную сумму ...
Sum = 0
Do I = 1,N
X = Al+(Bl-Al)*(I-0.5d0)/N
Sum = Sum + F(X)
End Do
C «0»-процесс получает частичные суммы и определяет
С результат
If (Rank.eq.0) Then
GSum = Sum
Do I=1,Size-1
Call MPI_RECV(ISum, 1, MPI_DOUBLE_PRECISION,
$ i, 0, MPI_COMM_WORLD, Status, Ierr)
GSum = GSum + ISum
End Do
time2 = MPI_WTime()
GSum = GSum/(N*Size)
Write (6,*) 'Result= ',GSum,' Error= ',1-GSum,
$ ' Time=',time2 - time1
else
Call MPI_SEND(Sum, 1, MPI_DOUBLE_PRECISION, 0,
$ 0, MPI_COMM_WORLD, Ierr)
End If
Call MPI_FINALIZE(Ierr)
Stop
End