Page MenuHomec4science

image_parts_in_order.c
No OneTemporary

File Metadata

Created
Thu, Aug 22, 16:17

image_parts_in_order.c

#include <stdio.h>
#include <mpi.h>
#define image_size 1024
int main(int argc, char *argv[]) {
int myrank, mysize;
int * imgPart;
int * buf;
int i;
int partSize;
MPI_Request request;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &mysize);
imgPart = malloc(image_size/mysize * sizeof(int));
/* Generate image parts */
for (i=0; i < (image_size/mysize) ; i++){
imgPart[i] = myrank * 1;
}
partSize = image_size/mysize;
/* Each process sends */
MPI_Isend(imgPart, partSize, MPI_INT, 0, 0, MPI_COMM_WORLD, &request);
// Process 0 receives all parts into buf
if (myrank == 0){
buf = malloc(image_size* sizeof(int));
for (i=0; i<mysize; i++){
MPI_Recv(buf + i*(image_size/mysize), (image_size/mysize), MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
}
MPI_Wait(&request, MPI_STATUS_IGNORE);
free(imgPart);
if (myrank==0) free(buf);
MPI_Finalize();
}

Event Timeline