Difference between revisions of "Fortran implementation of the Actor Model using MPI"
From MohidWiki
m |
|||
Line 6: | Line 6: | ||
type(T_pingPong), pointer :: pingPong | type(T_pingPong), pointer :: pingPong | ||
integer :: STAT_CALL | integer :: STAT_CALL | ||
− | |||
STAT_CALL = UNDEFINED | STAT_CALL = UNDEFINED | ||
− | |||
pingPong => constructPingPong() | pingPong => constructPingPong() | ||
− | |||
STAT_CALL = startGame(pingPong) | STAT_CALL = startGame(pingPong) | ||
if (STAT_CALL .NE. SUCCESS) then | if (STAT_CALL .NE. SUCCESS) then | ||
Line 16: | Line 13: | ||
stop "subroutine main, error calling startGame, ERR01" | stop "subroutine main, error calling startGame, ERR01" | ||
end if | end if | ||
− | |||
call loop(pingPong) | call loop(pingPong) | ||
− | |||
call EXIT(SUCCESS) | call EXIT(SUCCESS) | ||
− | |||
end subroutine main | 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