Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F78730847
image_parts_in_order.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Aug 22, 16:17
Size
1021 B
Mime Type
text/x-c
Expires
Sat, Aug 24, 16:17 (1 d, 21 h)
Engine
blob
Format
Raw Data
Handle
20089789
Attached To
R7871 phys-743-exercises
image_parts_in_order.c
View Options
#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
Log In to Comment