Can you write this up in a small, complete program that shows the problem, and that we can compile and run?
On Jul 15, 2011, at 3:36 PM, Mudassar Majeed wrote: > *id is same as myid > > I am comparing the results by seeing the printed messages, given by the > printfs.... > > the recv_packet.rank is the rank of the sender that should be equal to > status.MPI_SOURCE but it is not. > > I have updated the code a little bit, here is it. > > if( (is_receiver == 1) && (is_sender != 1) ) > { > printf("\nP%d >> Receiver only ...!!", myid); > printf("\n"); > MPI_Recv(&recv_packet, 1, loadDatatype, MPI_ANY_SOURCE, MPI_TAG_LOAD, > comm, &status); > printf("\nP%d >> Received from P%d, packet contains rank: %d", myid, > status.MPI_SOURCE, recv_packet.rank); > printf("\n"); > } > else if( (is_sender == 1) && (is_receiver != 1) ) > { > load_packet.rank = myid; > load_packet.ld = load; > printf("\nP%d >> Sender only ...!! P%d", myid, rec_rank); > printf("\n"); > MPI_Ssend(&load_packet, 1, loadDatatype, rec_rank, MPI_TAG_LOAD, > comm); > } > else if( (is_receiver == 1) && (is_sender == 1) ) > { > load_packet.rank = myid; > load_packet.ld = load; > printf("\nP%d >> Both ...!! P%d", myid, rec_rank); > printf("\n"); > MPI_Sendrecv(&load_packet, 1, loadDatatype, rec_rank, MPI_TAG_LOAD, > &recv_packet, 1, loadDatatype, MPI_ANY_SOURCE, MPI_TAG_LOAD, > comm, &status); > printf("\nP%d >> Received from P%d, packet contains rank: %d", myid, > status.MPI_SOURCE, recv_packet.rank); > printf("\n"); > } > > here is the output > > P11 >> Sender only ...!! P2 > > P14 >> Sender only ...!! P6 > > P15 >> Neither ...!! > > P15 >> I could reach here ...!! > > P8 >> Neither ...!! > > P8 >> I could reach here ...!! > > P1 >> Receiver only ...!! > > P9 >> Sender only ...!! P0 > > P2 >> Receiver only ...!! > > > P10 >> Sender only ...!! P1 > > P3 >> Receiver only ...!! > > P3 >> Received from P13, packet contains rank: 14 > > > P0 >> Receiver only ...!! > > P0 >> Received from P3, packet contains rank: 9 > > P4 >> Receiver only ...!! > > P12 >> Neither ...!! > > P12 >> I could reach here ...!! > > P5 >> Both ...!! P3 > > P13 >> Sender only ...!! P4 > > P13 >> I could reach here ...!! > > P6 >> Both ...!! P5 > > P7 >> Neither ...!! > > P7 >> I could reach here ...!! > > P14 >> I could reach here ...!! > > P1 >> Received from P7, packet contains rank: 11 > > P1 >> I could reach here ...!! > > P9 >> I could reach here ...!! > P2 >> Received from P11, packet contains rank: 13 > > P2 >> I could reach here ...!! > > P0 >> I could reach here ...!! > > P11 >> I could reach here ...!! > P3 >> I could reach here ...!! > > > regards, > Mudassar > > From: Terry Dontje <terry.don...@oracle.com> > To: Mudassar Majeed <mudassar...@yahoo.com> > Cc: "us...@open-mpi.org" <us...@open-mpi.org> > Sent: Friday, July 15, 2011 9:06 PM > Subject: Re: [OMPI users] Urgent Question regarding, MPI_ANY_SOURCE. > > > > On 7/15/2011 2:35 PM, Mudassar Majeed wrote: >> >> Here is the code >> >> if( (is_receiver == 1) && (is_sender != 1) ) >> { >> printf("\nP%d >> Receiver only ...!!", myid); >> printf("\n"); >> MPI_Recv(&recv_packet, 1, loadDatatype, MPI_ANY_SOURCE, >> MPI_TAG_LOAD, comm, &status); >> printf("\nP%d >> Received from P%d", myid, status.MPI_SOURCE); >> printf("\n"); >> } >> else if( (is_sender == 1) && (is_receiver != 1) ) >> { >> load_packet.rank = *id; >> load_packet.ld = load; >> printf("\nP%d >> Sender only ...!! P%d", myid, rec_rank); >> printf("\n"); >> MPI_Ssend(&load_packet, 1, loadDatatype, rec_rank, MPI_TAG_LOAD, >> comm); >> } >> else if( (is_receiver == 1) && (is_sender == 1) ) >> { >> load_packet.rank = *id; >> load_packet.ld = load; >> printf("\nP%d >> Both ...!! P%d", myid, rec_rank); >> printf("\n"); >> MPI_Sendrecv(&load_packet, 1, loadDatatype, rec_rank, MPI_TAG_LOAD, >> &recv_packet, 1, loadDatatype, MPI_ANY_SOURCE, MPI_TAG_LOAD, >> comm, &status); >> printf("\nP%d >> Received from P%d", myid, status.MPI_SOURCE); >> printf("\n"); >> } >> >> A process can be a message sender, or receiver or both. There are 16 ranks. >> "rec_rank" contains the rank of the receiver. It is displayed before the >> message is sent. >> Every sender displays this "rec_rank" and it should correctly. But on the >> receiver sides, status.MPI_SOURCE is displayed (after receiving message), >> but the value >> is not matching with the expected sender's rank. > Sorry, but I still don't see how you are detecting the mismatch. I assume > load_packet_rank some how relates to load_packet. But why are you setting it > to *id instead of myid? Also on the receive side I see no place where you > pull out the rank from the recv_packet to compare with status.MPI_SOURCE. >> >> I did not understand about kernel that you were talking about. >> > A "kernel" that I am talking about is a small piece of code someone can build > and run to see the problem. >> See the code is very clear and it sends the message to "rec_rank" that was >> displayed before sending the message. But on the receiver side the >> MPI_SOURCE comes to be wrong. >> This shows to me that messages on the receiving sides are captured on the >> basis of MPI_ANY_SOURCE, that seems like it does not see the destination of >> message while capturing it from message queue of the MPI system. >> >> regards, >> Mudassar >> >> From: Terry Dontje <terry.don...@oracle.com> >> To: Mudassar Majeed <mudassar...@yahoo.com> >> Cc: "us...@open-mpi.org" <us...@open-mpi.org> >> Sent: Friday, July 15, 2011 7:10 PM >> Subject: Re: [OMPI users] Urgent Question regarding, MPI_ANY_SOURCE. >> >> >> >> On 7/15/2011 12:49 PM, Mudassar Majeed wrote: >>> >>> Yes, processes receive messages that were not sent to them. I am receiving >>> the message with the following call >>> >>> MPI_Recv(&recv_packet, 1, loadDatatype, MPI_ANY_SOURCE, MPI_TAG_LOAD, comm, >>> &status); >>> >>> and that was sent using the following call, >>> >>> MPI_Ssend(&load_packet, 1, loadDatatype, rec_rank, MPI_TAG_LOAD, comm); >>> >>> What problem it can have ?. All the parameters are correct, I have seen >>> them by printf. What I am thinking is that, the receive is done with >>> MPI_ANY_SOURCE, so the process is getting any message (from any source). >>> What should be done so that only that message is captured that had the >>> destination as this process. >>> >> By virtue of MPI the MPI_Recv call should only return messages destined for >> that rank. What makes you think that is not happening? Can you make some >> sort of kernel of code that proves your theory that your MPI_Recv is >> receiving another rank's message? If you can and then post that code maybe >> we'll be able to figure out what the issue is. >> >> Right now, it seems we are at a deadlock of you claiming something is >> happening that really cannot be happening. So unless we have more than a >> broad description of the problem it is going to be nearly impossible for us >> to tell you what is wrong. >> >> --td >>> regards, >>> Mudassar >>> >>> Date: Fri, 15 Jul 2011 07:04:34 -0400 >>> From: Terry Dontje <terry.don...@oracle.com> >>> Subject: Re: [OMPI users] Urgent Question regarding, MPI_ANY_SOURCE. >>> To: us...@open-mpi.org >>> Message-ID: <4e201ec2....@oracle.com> >>> Content-Type: text/plain; charset="iso-8859-1"; Format="flowed" >>> >>> Well MPI_Recv does give you the message that was sent specifically to >>> the rank calling it by any of the processes in the communicator. If you >>> think the message you received should have gone to another rank then >>> there is a bug somewhere. I would start by either adding debugging >>> printf's to your code to trace the messages. Or narrowing down the >>> code to a small kernel such that you can prove to yourself that MPI is >>> working the way it should and if not you can show us where it is going >>> wrong. >>> >>> --td >>> >>> On 7/15/2011 6:51 AM, Mudassar Majeed wrote: >>> > I get the sender's rank in status.MPI_SOURCE, but it is different than >>> > expected. I need to receive that message which was sent to me, not any >>> > message. >>> > >>> > regards, >>> > >>> > Date: Fri, 15 Jul 2011 06:33:41 -0400 >>> > From: Terry Dontje <terry.don...@oracle.com >>> > <mailto:terry.don...@oracle.com>> >>> > Subject: Re: [OMPI users] Urgent Question regarding, MPI_ANY_SOURCE. >>> > To: us...@open-mpi.org <mailto:us...@open-mpi.org> >>> > Message-ID: <4e201785.6010...@oracle.com >>> > <mailto:4e201785.6010...@oracle.com>> >>> > Content-Type: text/plain; charset="iso-8859-1"; Format="flowed" >>> > >>> > Mudassar, >>> > >>> > You can do what you are asking. The receiver uses MPI_ANY_SOURCE for >>> > the source rank value and when you receive a message the >>> > status.MPI_SOURCE will contain the rank of the actual sender not the >>> > receiver's rank. If you are not seeing that then there is a bug >>> > somewhere. >>> > >>> > --td >>> > >>> > On 7/14/2011 9:54 PM, Mudassar Majeed wrote: >>> > > Friend, >>> > > I can not specify the rank of the sender. Because only >>> > > the sender knows to which receiver the message is to be sent. The >>> > > receiver does not know from which sender the message will come. I am >>> > > trying to do a research work on load balancing in MPI application >>> > > where load is redistributed, so in that I require a receiver to >>> > > receive a load value from a sender that it does not know. On the other >>> > > hand, the sender actually calculates, to which receiver this load >>> > > value should be sent. So for this, I want sender to send a message >>> > > containing the load to a receiver, but receiver does not know from >>> > > which sender the message will come. See, it is like send receiver in >>> > > DATAGRAM sockets. The receiver, receives the message on the IP and >>> > > port, the message which was directed for it. I want to have same >>> > > behavior. But it seems that it is not possible in MPI. Isn't it? >>> > > >>> > > regards, >>> > > Mudassar >>> > > >>> > > ------------------------------------------------------------------------ >>> > > *From:* Jeff Squyres <jsquy...@cisco.com <mailto:jsquy...@cisco.com>> >>> > > *To:* Mudassar Majeed <mudassar...@yahoo.com >>> > <mailto:mudassar...@yahoo.com>> >>> > > *Cc:* Open MPI Users <us...@open-mpi.org <mailto:us...@open-mpi.org>> >>> > > *Sent:* Friday, July 15, 2011 3:30 AM >>> > > *Subject:* Re: [OMPI users] Urgent Question regarding, MPI_ANY_SOURCE. >>> > > >>> > > Right. I thought you were asking about receiving *another* message >>> > > from whomever you just received from via ANY_SOURCE. >>> > > >>> > > If you want to receive from a specific sender, you just specify the >>> > > rank you want to receive from -- not ANY_SOURCE. >>> > > >>> > > You will always only receive messages that were sent to *you*. >>> > > There's no MPI_SEND_TO_ANYONE_WHO_IS_LISTENING functionality, for >>> > > example. So your last statement: "But when it captures with .. >>> > > MPI_ANY_SOURCE and MPI_ANY_TAG, the receiver will capture any message >>> > > (even not targetted for it)" is incorrect. >>> > > >>> > > I guess I still don't understand your question...? >>> > > >>> > > >>> > > On Jul 14, 2011, at 9:17 PM, Mudassar Majeed wrote: >>> > > >>> > > > >>> > > > I know this, but when I compare status.MPI_SOURCE with myid, they >>> > > are different. I guess you need to reconsider my question. The >>> > > MPI_Recv function seems to capture message from the queue with some >>> > > search parameters like source, tag etc. So in case the receiver does >>> > > not know the sender and wants to receive only that message which was >>> > > sent for this receiver. But when it captures with source as >>> > > MPI_ANY_SOURCE and MPI_ANY_TAG, the receiver will capture any message >>> > > (even not targetted for it). >>> > > > >>> > > > regards, >>> > > > Mudassar >>> > > > >>> > > > >>> > > > From: Jeff Squyres <jsquy...@cisco.com <mailto:jsquy...@cisco.com> >>> > <mailto:jsquy...@cisco.com <mailto:jsquy...@cisco.com>>> >>> > > > To: Mudassar Majeed <mudassar...@yahoo.com >>> > <mailto:mudassar...@yahoo.com> >>> > > <mailto:mudassar...@yahoo.com <mailto:mudassar...@yahoo.com>>>; Open >>> > MPI Users <us...@open-mpi.org <mailto:us...@open-mpi.org> >>> > > <mailto:us...@open-mpi.org <mailto:us...@open-mpi.org>>> >>> > > > Sent: Friday, July 15, 2011 1:58 AM >>> > > > Subject: Re: [OMPI users] Urgent Question regarding, MPI_ANY_SOURCE. >>> > > > >>> > > > When you use MPI_ANY_SOURCE in a receive, the rank of the actual >>> > > sender is passed back to you in the status.MPI_SOURCE. >>> > > > >>> > > > On Jul 14, 2011, at 7:55 PM, Mudassar Majeed wrote: >>> > > > >>> > > > > Hello people, >>> > > > > I am trapped in the following problem plz >>> > > help me. Suppose a process A sends a message to process B. The process >>> > > B will receive the message with MPI_Recv with MPI_ANY_SOURCE in the >>> > > source argument. Let say process B does not know that A is the sender. >>> > > But I want B to receive message from process A (the one who actually >>> > > sends the message to process B). But if I use MPI_ANY_SOURCE, then any >>> > > message from any source is captured by process B (let say there are >>> > > other processes sending messages). Instead of MPI_ANY_SOURCE I cannot >>> > > use A in the source argument as B does not know about the sender. What >>> > > should I do in this situation ? >>> > > > > >>> > > > > regards, >>> > > > > Mudassar Majeed >> >> -- >> <Mail Attachment.gif> >> Terry D. Dontje | Principal Software Engineer >> Developer Tools Engineering | +1.781.442.2631 >> Oracle - Performance Technologies >> 95 Network Drive, Burlington, MA 01803 >> Email terry.don...@oracle.com >> >> >> >> >> > > -- > <Mail Attachment.gif> > Terry D. Dontje | Principal Software Engineer > Developer Tools Engineering | +1.781.442.2631 > Oracle - Performance Technologies > 95 Network Drive, Burlington, MA 01803 > Email terry.don...@oracle.com > > > > > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/