> 1) t_mpi_question-9-packunpack.c
I did not put the program in 9th mail. The program is as follows: -bash-3.2$ cat t_mpi_question-9-packunpack.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include "mpi.h" #define SLPTIME 60 #define WORKBUFSIZ 64 struct dd { int x; int a; int y; int b; int c; }; int main(int ac,char **av) { int rank,size,cc,j,i; MPI_Request req; MPI_Status sts; struct dd buf,ans_dd_buf; char workbuf[WORKBUFSIZ]; MPI_Init(&ac,&av); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); if (rank == 0) { buf.x = 1; buf.a = 4329; buf.y = 2; buf.b = 8474; buf.c = 48; } else { buf.x = 0; buf.a = 0; buf.y = 0; buf.b = 0; buf.c = 0; } ans_dd_buf.x = 1; ans_dd_buf.a = 4329; ans_dd_buf.y = 2; ans_dd_buf.b = 8474; ans_dd_buf.c = 48; j=0; /* position */ memset((void *)&workbuf[0],0,WORKBUFSIZ); if (rank == 0) { cc=MPI_Pack(&buf.x,1,MPI_INT,&workbuf[0],WORKBUFSIZ,&j,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Pack(&buf.a,1,MPI_INT,&workbuf[0],WORKBUFSIZ,&j,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Pack(&buf.y,1,MPI_INT,&workbuf[0],WORKBUFSIZ,&j,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Pack(&buf.b,1,MPI_INT,&workbuf[0],WORKBUFSIZ,&j,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Pack(&buf.c,1,MPI_INT,&workbuf[0],WORKBUFSIZ,&j,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } MPI_Barrier(MPI_COMM_WORLD); MPI_Isend(&workbuf[0],j,MPI_PACKED,1,1000,MPI_COMM_WORLD,&req); printf(" rank=%d sleep start \n",rank); fflush(stdout); sleep(SLPTIME); printf(" rank=%d sleep end \n",rank); fflush(stdout); MPI_Wait(&req,&sts); } else { MPI_Barrier(MPI_COMM_WORLD); printf(" rank=%d sleep start \n",rank); fflush(stdout); sleep(SLPTIME); printf(" rank=%d sleep end \n",rank); fflush(stdout); MPI_Irecv(&workbuf[0],WORKBUFSIZ,MPI_PACKED,0,1000,MPI_COMM_WORLD,&req); MPI_Wait(&req,&sts); cc=MPI_Unpack(&workbuf[0],WORKBUFSIZ,&j,&buf.x,1,MPI_INT,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Unpack(&workbuf[0],WORKBUFSIZ,&j,&buf.a,1,MPI_INT,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Unpack(&workbuf[0],WORKBUFSIZ,&j,&buf.y,1,MPI_INT,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Unpack(&workbuf[0],WORKBUFSIZ,&j,&buf.b,1,MPI_INT,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } cc=MPI_Unpack(&workbuf[0],WORKBUFSIZ,&j,&buf.c,1,MPI_INT,MPI_COMM_WORLD); if (cc != MPI_SUCCESS) { MPI_Abort(MPI_COMM_WORLD,-1); } } printf(" rank=%d pass-3 %d %d %d %d %d \n" ,rank,buf.x,buf.a,buf.y,buf.b,buf.c); fflush(stdout); if (ans_dd_buf.x != buf.x) { MPI_Abort(MPI_COMM_WORLD,1); } if (ans_dd_buf.a != buf.a) { MPI_Abort(MPI_COMM_WORLD,1); } if (ans_dd_buf.y != buf.y) { MPI_Abort(MPI_COMM_WORLD,1); } if (ans_dd_buf.b != buf.b) { MPI_Abort(MPI_COMM_WORLD,1); } if (ans_dd_buf.c != buf.c) { MPI_Abort(MPI_COMM_WORLD,1); } MPI_Finalize(); if (rank ==0) { printf(" rank=%d program end \n",rank); fflush(stdout); } return(0); }