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