#include <stdlib.h>
#include <stdio.h>
#include "mpi.h"

int main(int argc, char **argv)
{
  int rank, size;
  double data;
  MPI_Status status;
  
  MPI_Init(&argc, &argv);
  MPI_Comm_size( MPI_COMM_WORLD, &size );
  
  if (size != 2) {
    printf("This program can only be executed with 2 processes\n");
    MPI_Abort(MPI_COMM_WORLD, -1);
  }
  
  MPI_Comm_rank( MPI_COMM_WORLD, &rank );
  
  if (rank == 0) {
    data = MPI_Wtime();
    MPI_Send(&data, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD);
    printf( "I am process 0, my timestamp is %f.\n", data);
    MPI_Recv(&data, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD, &status);
    printf( "Process 1's timestamp is %f.\n", data);
    data = MPI_Wtime();
    printf( "I am process 0, my timestamp is now %f.\n", data);
  } else if(rank == 1) {
    data = MPI_Wtime();
    printf( "I am process 1, my timestamp is %f.\n", data);
    MPI_Recv(&data, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status);
    printf( "Process 0's timestamp is %f.\n", data);
    MPI_Send(&data, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
    data = MPI_Wtime();
    printf( "I am process 1, my timestamp is now %f.\n", data);
  }
  
  MPI_Finalize();
  
  return 0;
}

