Broadcast
In many instances, there is one process that needs to send (broadcast) some data (either a scalar or vector) to all the processes in a group. MPI provides the broadcast primitive MPI_Bcast to accomplish this task. The syntax of the MPI_Bcast call is:
Broadcast Syntax
int MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
MPI_BCAST(buffer, count, datatype, root, comm, ierr)
Parameters for Broadcast routine:
buffer
- is the starting address of a buffer
count
- is an integer indicating the number of data elements in the buffer
datatype
- is an MPI-defined constant indicating the data type of the elements in the buffer
root
- is an integer indicating the rank of the broadcast root process
comm
- is the communicator
The MPI_Bcast must be called by each process in the group, specifying the same comm and root. The message is sent from the root process to all processes in the group, including the root process. If we think in terms of a matrix whose rows and columns correspond to the data and processes, respectively, then the states of this matrix before and after the call can be illustrated as follows:
The "Hello, world" example used in an earlier roadmap could have used broadcast instead of multiple sends and receives:
! Program hello_mpi.f90
program hello
use MPI
integer rank, root
data root/0/
character(12) message
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank,ierr)
if(rank .eq. root) then
message = 'Hello, world'
endif
call MPI_BCAST(message, 12, MPI_CHARACTER, &
root, MPI_COMM_WORLD, ierr)
print*, "node:", rank, ":", message
call MPI_FINALIZE(ierr)
end