/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */ /* * (C) 2005 by Argonne National Laboratory. * See COPYRIGHT in top-level directory. */ /* A very simple program that performs only a send and a receive. This program can be use with logging enabled (configure with --enable-g=dbg,log) and run with -mpich-dbg-class=routine to get a trace of the execution of the functions in MPICH */ #include #include "mpi.h" #define SENDER_RANK 0 #define RECEIVER_RANK 1 int main( int argc, char *argv[] ) { int rank, size, val; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); if (size < 2) { fprintf( stderr, "This program requires at least 2 processes\n" ); MPI_Abort( MPI_COMM_WORLD, 1 ); } if (rank == SENDER_RANK) { MPI_Send( &rank, 1, MPI_INT, RECEIVER_RANK, 0, MPI_COMM_WORLD ); } else if (rank == RECEIVER_RANK) { /* This may or may not post the receive before the send arrives */ MPI_Recv( &val, 1, MPI_INT, SENDER_RANK, 0, MPI_COMM_WORLD, &status ); } /* Perform a second send/receive to allow the first pair to handle any connection logic */ #if 1 if (rank == SENDER_RANK) { MPI_Send( &rank, 1, MPI_INT, RECEIVER_RANK, 0, MPI_COMM_WORLD ); } else if (rank == RECEIVER_RANK) { /* This may or may not post the receive before the send arrives */ MPI_Recv( &val, 1, MPI_INT, SENDER_RANK, 0, MPI_COMM_WORLD, &status ); } #endif MPI_Finalize( ); return 0; }