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

UptoLike

61
В результате выполнения программы на экране появится строка:
Result= 0.999999913356637 Error= 8.664336337282919E-008
Time= 5.351901054382324E-002
Этот пример использует блокирующие функции пересылки
MPI_SEND и MPI_RECV. Но даже используя такие простые комму-
никационные функции, можно найти возможность несколько уско-
рить алгоритм. Сравните со следующим примером:
Program Example3b
Implicit None
Include 'mpif.h'
Integer Size, Rank, Ierr, I, N, Status(MPI_STATUS_SIZE)
Double Precision Sum, GSum, A, B, time1, time2,
$ Al, Bl, X, F, ISum
C Пределы интегрирования
Parameter (A=0.d0, B=1.d0)
C Подынтегральная функция
F(x)=DLog(1/x)
Call MPI_INIT(Ierr)
Call MPI_COMM_SIZE(MPI_COMM_WORLD, Size, Ierr)
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 Каждый процесс определяет свою частичную сумму ...