HPC - Broadcast using point-to-point communication

Moreno Marzolla moreno.marzolla@unibo.it

Last updated: 2022-10-24

The purpose of this exercise is to implement the function

    void my_Bcast(int *v)

which realizes a broadcast communication, where the value *v that resides on the local memory of process 0 is sent to all other processes. In practice, this function should behave as

MPI_Bcast(v,             /* buffer   */
          1,             /* count    */
          MPI_INT,       /* datatype */
          0,             /* root     */
          MPI_COMM_WORLD /* comm     */

Note. MPI_Bcast() must always be preferred to any home-made solution. The purpose of this exercise is to learn how MPI_Bcast() might be implemented, although the actual implementations are architecture-dependent.

To implement my_Bcast(), each process determines its own rank \(p\) and the number \(P\) of active MPI processes.

Then, process 0:

Any other process \(p>0\):

For example, with \(P = 15\) you get the communication scheme illustrated in Figure 1; arrows indicate point-to-point communications, numbers indicate the rank of processes. The procedure described above works correctly for any \(P\).

Figure 1: Broadcast communication with P = 15 processes
Figure 1: Broadcast communication with \(P = 15\) processes

The file mpi-my-bcast.c contains the skeleton of the my_Bcast() function. Complete the implementation using point-to-point send/receive operations.

To compile:

    mpicc -std=c99 -Wall -Wpedantic mpi-my-bcast.c -o mpi-my-bcast

To execute:

    mpirun -n 4 ./mpi-my-bcast