Skip to content

Latest commit

 

History

History
 
 

message-chain

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Message chain

Write a program where every MPI task sends data to the next one. Let ntasks be the number of the tasks, and myid the rank of the current task. Your program should work as follows:

  • Every task with a rank less than ntasks-1 sends a message to task myid+1. For example, task 0 sends a message to task 1.
  • The message content is an integer array where each element is initialised to myid.
  • The message tag is the receiver's rank.
  • The sender prints out the number of elements it sends and the tag it used.
  • All tasks with rank > 0 receive messages.
  • Each receiver prints out their myid and the first element in the received array.

Message chain with send and recv

  1. Implement the program described above using MPI_Send and MPI_Recv. Utilize MPI_PROC_NULL when treating the special cases of the first and the last task in the chain so that all the MPI_Sends and MPI_Recvs are outside if statements. You may start from scratch or use the skeleton code (chain.cpp or chain.F90) as a starting point.

  2. The skeleton code prints out the time spent in communication. Investigate the timings with different numbers of MPI tasks (e.g. 2, 4, 8, 16, ...), and pay attention especially to rank 0. Can you explain the behaviour?

  3. Use the status parameter to find out how much data was received, and print out this piece of information for all receivers.

Message chain with sendrecv

  1. Use combined MPI_Sendrecv instead of individual MPI_Sends or MPI_Recvs. Investigate again the timings with different numbers of MPI tasks (e.g. 2, 4, 8, 16, ...). Compare the results to the implementation with individual MPI_Sends or MPI_Recvs and pay attention especially to rank 0. Can you explain the behaviour?