Message Passing Interface (MPI)
Hagiu Bogdan
Spac Valentin
What is MPI ?
A standardized and portable message-passing system designed by a group of researchers from academia and industry to function on a wide variety of parallel computers.
There are several well-tested and efficient implementations of MPI, including some that are free or in the public domain (implemented for Fortran, C, C++ and Java)
MPI - General Information
- Function start with MPI_* to differ from application;
- MPIhas defined is own data types to abstract machine dependent implementations;
- Two types of communication: point-to-point and collective communication
MPI - Geting started
- First step is to include the MPI header file
- MPI enviroment must be initialized with: MPI_INIT(init* argc, char*** argv);
- MPI_Finalize() used to clean up the MPI environment;
Point to point communication
-
MPI_Send(
void* data,
int count,
MPI_Datatype datatype,
int destination,
int tag,
MPI_Comm communicator) -
Blocking send, that is the processor doesn't do anything unil the message is sent
Point to point communication
-
MPI_Recv(
void* data,
int count,
MPI_Datatype datatype,
int source,
int tag,
MPI_Comm communicator,
MPI_Status* status) -
Source, tag, communicator has to be correct for the message to be recived
-
We can use wildcards in place of source and tag: MPI_ANY_SOURCE and MPI_ANY_TAG
Point to point communication
-
For a receive operation, communication ends when the message is copied to the local variables
-
For a send operation, communication is completed when the message is transferred to MPI for sending. (so that the buffer can be recycled)
Point to point communication
-
A program can send a blocking send and the receiver may use non-blocking receive or vice versa
-
Very similar function calls int MPI_Isend(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm, MPI_Request *request);
Point to point communication
-
We can send different data types at the same time – eg. Integers, floats, characters, doubles... using MPI_Pack. This function gives you an intermediate buffer which you will send.
-
int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outsize, int *position, MPI_Comm comm)
-
MPI_Send(buffer, count, MPI_PACKED, dest, tag, MPI_COMM_WORLD)
Collective Communication
-
Works like point to point except you send to all other processors;
-
MPI_Barrier(comm), blocks until each processor calls this. Synchronizes everyone.
-
Broadcast operation MPI_Bcast copies the data value in one processor to others.
Types of Collective Communication
Collective Communication
- Many more functions to lift hard work from you.
- MPI_Allreduce, MPI_Gatherv, MPI_Scan, MPI_Reduce_Scatter ...
- Check out the API documentation
Communicators
- Communicators group processors
- Basic communicator MPI_COMM_WORLD defined for all processors
- You can create your own communicators to group processors. Thus you can send messages to only a subset of all processors
The end
\[^_^]/
Message Passing Interface (MPI)
By Stefan Hagiu
Message Passing Interface (MPI)
- 577