Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] MPI_Recv hangs
From: Eduardo Morras (nec556_at_[hidden])
Date: 2012-05-04 10:44:16


At 15:20 04/05/2012, you wrote:
>Ups, I edited the code to make it easier to understand but I forgot
>to change two p2, sorry ^^' .
>I hope this one is completely right:
>
>1: for(int p1=0; p1<np; ++p1) {
>2: for(int p2=0; p2<np; ++p2) {
>3: if(me==p1) {
>4: if(sendSize(p2))
>MPI_Ssend(sendBuffer[p2],sendSize(p2),MPI_FLOAT,p2,0,myw);
>//processor p1 sends data to processor p2
>5: if(recvSize(p2))
>MPI_Recv(recvBuffer[p2],recvSize(p2),MPI_FLOAT,p2,0,myw,&status);
>//processor p1 receives data to processor p2
>6: } else if(me==p2) {
>7: if(recvSize(p1))
>MPI_Recv(recvBuffer[p1],recvSize(p1),MPI_FLOAT,p1,0,myw,&status);
>//processor p2 receives data to processor p1
>8: if(sendSize(p1))
>MPI_Ssend(sendBuffer[p1],sendSize(p1),MPI_FLOAT,p1,0,myw);
>//processor p2 sends data to processor p1
>9: }
>10: MPI_Barrier(myw);
>11: }
>12: }

Now p1 will send messages to p2 and receive messages from p2

Now p2 will send messages to p1 and receive messages from p1

The logic of send/recv looks ok. Now, in 5 and 7, recvSize(p2) and
recvSize(p1) function what value returns? The size of the buffer
received from the MPI_Recv done in previous for loop?

>This is the real code:
>
>for(int p1=0; p1<mpiS; ++p1) {
>for(int p2=0; p2<mpiS; ++p2) {
>if(mpiR==p1) {
>sento=p2;
>if(s.getMem(sento)){
>if(ite>25) cout<<"p1("<<p1<<") enviar "<<sento<<"
>"<<s.getMem(sento)<<" FLOATS "<<endl;
>ok=MPI_Ssend(s.extractBuffer(sento),s.getMem(sento),MPI_FLOAT,sento,0,myw);

Don't know what are you doing here, second parameter, s.getMem(sento)
should be the size of the buffer.

MPI_Ssend is defined for c++ :

   void Comm::Ssend(const void* buf, int count, const Datatype&
datatype, int dest, int tag) const

and you are using the C call. Are you mixing c and c++ code? Be
careful with that.

The rest of your code has the same problems, check them. Perhaps you
need a tutorial, check
http://www.mpitutorial.com/beginner-mpi-tutorial/ , it's for mpich
but is mpi-flavourless, so it works with openmpi too.

>Thanks Eduardo

HTH and happy coding