ВУЗ:
Рубрика:
64
C ... посылает ее «0»-процессу ...
Call MPI_ISEND(Sum, 1, MPI_DOUBLE_PRECISION, 0,
$ 0, MPI_COMM_WORLD, MyRequest, Ierr)
C «0»-процесс получает частичные суммы и заносит их в
C массив ASum
If (rank.eq.0) then
GSum = 0
Do I=0,Size-1
Call MPI_IRECV(ASum(I), 1, MPI_DOUBLE_PRECISION,
$ I, 0, MPI_COMM_WORLD, Request(I), Ierr)
End Do
Call MPI_ISEND(Sum, 1, MPI_DOUBLE_PRECISION, 0,
$ 0, MPI_COMM_WORLD, MyRequest, Ierr)
C «0»-процесс ожидает подтверждения приема всех посылок ...
Call MPI_Waitall(Size, Request(0), LStatus, Ierr)
C ... и только после этого производит суммирование
Do I=0,Size-1
GSum = GSum + ASum(I)
End Do
time2 = MPI_WTime()
GSum = GSum/(N*Size)
Write (6,*) 'Result=',GSum,' Error=',1-GSum,
$ ' Time=',time2 - time1
End If
Call MPI_FINALIZE(Ierr)
Stop
End
В этой программе оператор вызова Call MPI_WAIT, который
выполняют все процессы, можно опустить, так как после отправки
посылок процессам не о чем больше беспокоиться – рано или позд-
но MPI доставит сообщения (если они, конечно, будут запрошены
получателем).
В том случае, если операции пересылки затрагивают все процес-
сы, часто удобным становится использовать не коммуникационные
операции типа «точка-точка», а коллективные операции. Особенно-
Страницы
- « первая
- ‹ предыдущая
- …
- 62
- 63
- 64
- 65
- 66
- …
- следующая ›
- последняя »
