Personal tools

Difference between revisions of "Fortran implementation of the Actor Model using MPI"

From MohidWiki

Jump to: navigation, search
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