Advertisement
davidparks21

AMS250-MPI program

May 9th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. #include "mpi.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8.     // Hello world init
  9.     int rank, size;
  10.     MPI_Init(&argc, &argv);
  11.     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  12.     MPI_Comm_size(MPI_COMM_WORLD, &size);
  13.     printf("Hello, world! I am process %d of %d, with id %d\n", rank+1, size, rank); fflush(stdout);
  14.  
  15.     // Data generation loop, starting with 10 doubles up to 1B doubles stepping in order of magnitude
  16.     for (int data_size = 1; data_size <= 100000000; data_size *= 10) {
  17.         //Allocate data array, zero initialized, setup MPI variables
  18.         double *send_buffer, *receive_buffer;
  19.         send_buffer    = (double*)calloc(data_size, sizeof(double));
  20.         receive_buffer = (double*)calloc(data_size, sizeof(double));
  21.         int target = (rank + 1) % 2;
  22.         MPI_Status mpistatus;
  23.         MPI_Request receive_request;
  24.  
  25.         // Start timer
  26.         double starttime, endtime;
  27.         starttime = MPI_Wtime();
  28.  
  29.         // MPI transfer
  30.         MPI_Irecv( receive_buffer, data_size, MPI_DOUBLE, target, 0, MPI_COMM_WORLD, &receive_request );
  31.         MPI_Send(  send_buffer,    data_size, MPI_DOUBLE, target, 0, MPI_COMM_WORLD );
  32.         MPI_Wait(&receive_request, &mpistatus);
  33.  
  34.         // End timer
  35.         endtime = MPI_Wtime();
  36.         printf("Transfering %d doubles took %f seconds, that's %f MB of data (%i bytes) from process %d of %d, with id %d\n", data_size, endtime - starttime, (float)(8 * data_size) / 1048576, (8 * data_size), rank + 1, size, rank); fflush(stdout);
  37.  
  38.         // Free data
  39.         free(send_buffer);
  40.         free(receive_buffer);
  41.     }
  42.    
  43.     MPI_Finalize();
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement