Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mpi.h"
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char* argv[])
- {
- // Hello world init
- int rank, size;
- MPI_Init(&argc, &argv);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Comm_size(MPI_COMM_WORLD, &size);
- printf("Hello, world! I am process %d of %d, with id %d\n", rank+1, size, rank); fflush(stdout);
- // Data generation loop, starting with 10 doubles up to 1B doubles stepping in order of magnitude
- for (int data_size = 1; data_size <= 100000000; data_size *= 10) {
- //Allocate data array, zero initialized, setup MPI variables
- double *send_buffer, *receive_buffer;
- send_buffer = (double*)calloc(data_size, sizeof(double));
- receive_buffer = (double*)calloc(data_size, sizeof(double));
- int target = (rank + 1) % 2;
- MPI_Status mpistatus;
- MPI_Request receive_request;
- // Start timer
- double starttime, endtime;
- starttime = MPI_Wtime();
- // MPI transfer
- MPI_Irecv( receive_buffer, data_size, MPI_DOUBLE, target, 0, MPI_COMM_WORLD, &receive_request );
- MPI_Send( send_buffer, data_size, MPI_DOUBLE, target, 0, MPI_COMM_WORLD );
- MPI_Wait(&receive_request, &mpistatus);
- // End timer
- endtime = MPI_Wtime();
- 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);
- // Free data
- free(send_buffer);
- free(receive_buffer);
- }
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement