Skip to content

Instantly share code, notes, and snippets.

@joastbg
Created July 12, 2014 20:55
Show Gist options
  • Save joastbg/f0256139dcf3825aeee4 to your computer and use it in GitHub Desktop.
Save joastbg/f0256139dcf3825aeee4 to your computer and use it in GitHub Desktop.
MPI test program, sending messages in a ring
#include <mpi.h>
int main(int argc, char** argv)
{
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d"
" out of %d processors\n",
processor_name, world_rank, world_size);
int token;
if (world_rank != 0) {
MPI_Recv(&token, 1, MPI_INT, world_rank - 1, 0,
MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("Process %d received token %d from process %d\n",
world_rank, token, world_rank - 1);
}
else {
// Set the token's value if you are process 0
token = 112;
}
MPI_Send(&token, 1, MPI_INT, (world_rank + 1) % world_size,
0, MPI_COMM_WORLD);
// Now process 0 can receive from the last process.
if (world_rank == 0) {
MPI_Recv(&token, 1, MPI_INT, world_size - 1, 0,
MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("Process %d received token %d from process %d\n",
world_rank, token, world_size - 1);
}
// Finalize the MPI environment.
MPI_Finalize();
}
@joastbg
Copy link
Author

joastbg commented Jul 12, 2014

mpic++ mpi.cc
mpiexec -n 8 a.out

@SmerchProsto
Copy link

thanks to you, I was able to familiarize myself with the ring principle in mpi, thank you!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment