In the example you cite below, it looks like you're mixing MPI_Gather
and MPI_Send.
MPI_Gather is a "collective" routine; it must be called by all
processes in the communicator. All processes will send a buffer/
message to the root; only the root process will receive all the
buffers/messages (note that even the root sends to itself).
MPI_Send is a point-to-point function, meaning that it is paired with
some flavor of MPI_Recv (there's a few different variants of MPI_Recv,
like MPI_Irecv, which is a non-blocking receive).
Eugene's example is a good one -- it shows point-to-point only. It
doesn't mix Gather and Recv.
On Dec 23, 2008, at 2:04 PM, Win Than Aung wrote:
> Hi,
> thanks for your reply. let's say i have 3 processors. I sent msg
> from 1st,2nd processors and want to gather in processor 0 processor.
> so i tried like following. it couldn't receive msg sent from
> processor 1 and 2.
>
> http://www.nomorepasting.com/getpaste.php?pasteid=22985
>
> PS: is MPI_Recv is better to receive msg from multiple processors
> and gather in 1 processor? or MPI_Gather is better?
> thanks
> winthan
>
>
>
> On Tue, Dec 23, 2008 at 1:23 PM, Eugene Loh <Eugene.Loh_at_[hidden]>
> wrote:
> Win Than Aung wrote:
>
> MPI_Recv(....) << is it possible to receive the message sent from
> other sources? I tried MPI_ANY_SOURCE in place of source but it
> doesn't work out
>
> Yes of course. Can you send a short example of what doesn't work?
> The example should presumably be less than about 20 lines. Here is
> an example that works:
>
> % cat a.c
> #include <stdio.h>
> #include <mpi.h>
>
> int main(int argc, char **argv) {
> int np, me, sbuf = -1, rbuf = -2;
>
> MPI_Init(&argc,&argv);
> MPI_Comm_size(MPI_COMM_WORLD,&np);
> MPI_Comm_rank(MPI_COMM_WORLD,&me);
> if ( np < 2 ) MPI_Abort(MPI_COMM_WORLD,-1);
>
> if ( me == 1 ) MPI_Send(&sbuf,1,MPI_INT,0,344,MPI_COMM_WORLD);
> if ( me == 0 ) {
> MPI_Recv(&rbuf,1,MPI_INT,MPI_ANY_SOURCE,
> 344,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
> if ( rbuf == sbuf ) printf("Send/Recv self passed\n");
> else printf("Send/Recv self FAILED\n");
> }
>
> MPI_Finalize();
>
> return 0;
> }
> % mpicc a.c
> % mpirun -np 2 a.out
> Send/Recv self passed
> %
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users
--
Jeff Squyres
Cisco Systems
|