1
1

- Convert MPI_Init(NULL, NULL) to MPI_Init(&argc, &argv) because

apparently some people are using these examples to test other MPI's,
  and some of those MPI's don't handle MPI_Init(NULL, NULL) properly.
  :-)
- Add comments and a print statement to the f90 example to make it
  like the others.

This commit was SVN r11123.
This commit is contained in:
Jeff Squyres 2006-08-08 13:01:17 +00:00
parent 59844f2119
commit 13dd02a9f4
3 changed files with 22 additions and 2 deletions

View File

@ -14,7 +14,7 @@ int main(int argc, char* argv[])
{
int rank, size;
MPI_Init(NULL, NULL);
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("Hello, world, I am %d of %d\n", rank, size);

View File

@ -16,7 +16,7 @@ int main(int argc, char *argv[])
/* Start up MPI */
MPI_Init(NULL, NULL);
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

View File

@ -11,21 +11,36 @@ program ring
implicit none
integer :: rank, size, tag, next, from, message, ierr
! Start up MPI
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)
! Calculate the rank of the next process in the ring. Use the modulus
! operator so that the last process "wraps around" to rank zero.
tag = 201
next = mod((rank + 1), size)
from = mod((rank + size - 1), size)
! If we are the "master" process (i.e., MPI_COMM_WORLD rank 0), put
! the number of times to go around the ring in the message.
if (rank .eq. 0) then
message = 10
print *, 'Process 0 sending ', message, ' to ', next
call MPI_SEND(message, 1, MPI_INTEGER, next, tag, MPI_COMM_WORLD, ierr)
print *, 'Process 0 sent to ', next
endif
! Pass the message around the ring. The exit mechanism works as
! follows: the message (a positive integer) is passed around the ring.
! Each time it passes rank 0, it is decremented. When each processes
! receives a message containing a 0 value, it passes the message on to
! the next process and then quits. By passing the 0 message first,
! every process gets the 0 message and can quit normally.
10 call MPI_RECV(message, 1, MPI_INTEGER, from, tag, MPI_COMM_WORLD, &
MPI_STATUS_IGNORE, ierr)
@ -43,11 +58,16 @@ program ring
endif
goto 10
! The last process does one extra send to process 0, which needs to be
! received before the program can exit
20 if (rank .eq. 0) then
call MPI_RECV(message, 1, MPI_INTEGER, from, tag, MPI_COMM_WORLD, &
MPI_STATUS_IGNORE, ierr)
endif
! All done
call MPI_FINALIZE(ierr)
end program