diff --git a/mpi/pack_unpack.c b/mpi/pack_unpack.c new file mode 100644 index 0000000..53a4673 --- /dev/null +++ b/mpi/pack_unpack.c @@ -0,0 +1,33 @@ +#include +#include + +int main(int argc, char *argv[]) { + + int myrank, mysize; + float a; + int x; + int position = 0; + char buffer[100]; + MPI_Status status; + + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &myrank); + MPI_Comm_size(MPI_COMM_WORLD, &mysize); + + if (myrank==0){ + a = 2.4; + x = 5; + MPI_Pack(&a, 1, MPI_FLOAT, buffer, 100, &position, MPI_COMM_WORLD); + MPI_Pack(&x, 1, MPI_INT, buffer, 100, &position, MPI_COMM_WORLD); + MPI_Send(buffer, 100, MPI_PACKED, 1, 999, MPI_COMM_WORLD); + printf("Proc %d send (%E,%d) to %d \n",myrank,a,x,1); + }else if (myrank==1) { + MPI_Recv(buffer, 100, MPI_PACKED, 0, 999, MPI_COMM_WORLD, &status); + MPI_Unpack(buffer, 100, &position, &a, 1, MPI_FLOAT, MPI_COMM_WORLD); + MPI_Unpack(buffer, 100, &position, &x, 1, MPI_INT, MPI_COMM_WORLD); + printf("Proc %d recv (%E,%d) from %d \n",myrank,a,x,0); + } + + MPI_Finalize(); + +}