Difference between revisions of "Fortran implementation of the Actor Model using MPI"
From MohidWiki
| Line 1: | Line 1: | ||
A very simple ping-pong program is shown here. There are 2 programs, ''[[ping]]'' and ''[[pong]]'', that shoot messages among them, starting each with a random number of plays. The first program reaching 0 will send a message for the other program to stop and stops itself. File ''[[moduleMPImanagement]]'' is necessary to compile both programs. | A very simple ping-pong program is shown here. There are 2 programs, ''[[ping]]'' and ''[[pong]]'', that shoot messages among them, starting each with a random number of plays. The first program reaching 0 will send a message for the other program to stop and stops itself. File ''[[moduleMPImanagement]]'' is necessary to compile both programs. | ||
| − | If you examine the code there is no single MPI_BARRIER or any other explicit synchronization point. | + | |
| + | If you examine the code there is no single MPI_BARRIER or any other explicit synchronization point. The main routine is: | ||
| + | |||
| + | subroutine main() | ||
| + | type(T_pingPong), pointer :: pingPong | ||
| + | integer :: STAT_CALL | ||
| + | |||
| + | STAT_CALL = UNDEFINED | ||
| + | |||
| + | pingPong => constructPingPong() | ||
| + | |||
| + | STAT_CALL = startGame(pingPong) | ||
| + | if (STAT_CALL .NE. SUCCESS) then | ||
| + | print*, "STAT_CALL = ", STAT_CALL | ||
| + | stop "subroutine main, error calling startGame, ERR01" | ||
| + | end if | ||
| + | |||
| + | call loop(pingPong) | ||
| + | |||
| + | call EXIT(SUCCESS) | ||
| + | |||
| + | end subroutine main | ||
Revision as of 18:33, 30 November 2014
A very simple ping-pong program is shown here. There are 2 programs, ping and pong, that shoot messages among them, starting each with a random number of plays. The first program reaching 0 will send a message for the other program to stop and stops itself. File moduleMPImanagement is necessary to compile both programs.
If you examine the code there is no single MPI_BARRIER or any other explicit synchronization point. The main routine is:
subroutine main()
type(T_pingPong), pointer :: pingPong
integer :: STAT_CALL
STAT_CALL = UNDEFINED
pingPong => constructPingPong()
STAT_CALL = startGame(pingPong)
if (STAT_CALL .NE. SUCCESS) then
print*, "STAT_CALL = ", STAT_CALL
stop "subroutine main, error calling startGame, ERR01"
end if
call loop(pingPong)
call EXIT(SUCCESS)
end subroutine main