/*====================================================================*/ /* MPI Method /*====================================================================*/ /*--------------------------------------------------------------------*/ /* Node A posts nonblocking receive */ int size; char *buf; MPI_Request req; MPI_Status status; buf = (char *)malloc(size); MPI_Irecv( buf, size, MPI_BYTE, MPI_ANY_SOURCE, id, MPI_COMM_WORLD, &req ); (do some computing) MPI_Wait(&req, &status); free(buf); /*--------------------------------------------------------------------*/ /* Node B does a nonblocking send */ int size; char *buf; MPI_Request req; MPI_Status status; buf = (char *)malloc(size); MPI_Isend( buf, size, MPI_BYTE, destnode, id, MPI_COMM_WORLD, &req ); (do some computing) MPI_Wait(&req, &status); free(buf); /*--------------------------------------------------------------------*/ /* Barrier */ MPI_Barrier( MPI_COMM_WORLD ); /*--------------------------------------------------------------------*/ /* Global sum */ float fpt, work; MPI_Allreduce( &fpt, &work, 1, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD); /*--------------------------------------------------------------------*/ /* Broadcast */ char buf[size]; MPI_broadcast(buf, size);