[mpich-discuss] MPI_Irecv does block

Rajeev Thakur thakur at mcs.anl.gov
Tue Aug 12 09:33:50 CDT 2008


So is it MPI_Waitany that blocks or MPI_Irecv? Are all the posted Irecvs for
the smaller size of 100?

Rajeev  

> -----Original Message-----
> From: owner-mpich-discuss at mcs.anl.gov 
> [mailto:owner-mpich-discuss at mcs.anl.gov] On Behalf Of Robert Kubrick
> Sent: Monday, August 11, 2008 10:38 PM
> To: mpich-discuss at mcs.anl.gov
> Subject: Re: [mpich-discuss] MPI_Irecv does block
> 
> This is the stack of one of the receiving process. The last 
> MPI call is MPI_Waitany(), as I am using a number of 
> MPI_Irecv() requests.
> If I change the size of buf in the receiver to handle all the 
> elements sent by the master, the program runs with no problems.
> 
> Attaching to process 8743.
> Reading symbols for shared libraries . done Reading symbols 
> for shared libraries ....... done 0x900bc40c in poll ()
> (gdb) where
> #0  0x900bc40c in poll ()
> #1  0x000ba702 in MPIDU_Sock_wait () at /usr/include/c++/4.0.0/
> iostream:76
> #2  0x0006b799 in MPIDI_CH3I_Progress () at /usr/include/c++/4.0.0/
> iostream:76
> #3  0x0002d49e in MPI_Waitany () at /usr/include/c++/4.0.0/iostream:76
> #4  0x001344cd in MPI::Request::Waitany (v1=3, v2=0xbffff860,
> v4=@0xbffff848) at /Users/rk/Development/tst/Worker.cpp:965
> #5  0x000060cc in MDS::Worker::run (this=0xbffff8e8) at /Users/rb/
> Development/tst/Worker.cpp:57
> #6  0x00003645 in main (argc=2, argv=0xbffff9fc) at /Users/rb/
> Development/tst/demo.cpp:61
> 
> On Aug 11, 2008, at 10:22 PM, Robert Kubrick wrote:
> 
> > I want to send a number of elements through MPI_Send. However the 
> > receiving process does not know the maximum number of 
> elements in the 
> > array (it might be very large). The code will look something like:
> >
> > MASTER:
> > char buf[500];
> > ...
> > MPI_Send(&buf, 500, SomeDerivedType, 1, ...);
> >
> > ==============
> >
> > WORKER:
> > char buf[100];
> > const int Master = 0;
> > MPI_Irecv(&buf, 100, SomeDerivedType, Master, ...);
> >
> > I noticed that here the worker process blocks (despite the 
> MPI_Irecv 
> > non-blocking call) because it doesn't have enough room in 
> the buffer 
> > to receive all the elements. I know one way to solve the 
> problem is to 
> > use MPI_Probe, but is this the expected behavior if the 
> buffer is too 
> > small? Shouldn't MPI_Irecv return an error to avoid blocking?
> >
> 
> 




More information about the mpich-discuss mailing list