<div dir="ltr"><div><div><div>Hi Rajeev,<br></div>thank you for the clarification. It is most helpful.<br><br></div>kindest regards<br></div>Mike<br><div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 18 February 2016 at 13:55, Thakur, Rajeev <span dir="ltr"><<a href="mailto:thakur@mcs.anl.gov" target="_blank">thakur@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Your understanding is correct in that the communicator you pass needs to contain the processes to which the message is sent or received from. The standard is saying it in a simple way.<br>
<br>
But I would suggest reconsidering whether you really need pack and unpack in the first place. They are rarely used functions, and there is an associated performance penalty. You could try sending the messages directly, e.g., by using derived datatypes if the data is noncontiguous.<br>
<br>
Rajeev<br>
<br>
<br>
> On Feb 17, 2016, at 8:38 PM, Michael Rezny <<a href="mailto:michael.rezny@monash.edu">michael.rezny@monash.edu</a>> wrote:<br>
><br>
> Hi Rajeev,<br>
> thanks for the prompt response.<br>
><br>
> I am attempting to ensure that our code conforms to the standard.<br>
><br>
> Would it be correct to say that, for the MPI standard, the communicator used in MPI_Pack must<br>
> be a superset of the ranks in the communicator used subsequently by MPI calls that use the packed buffer?<br>
><br>
> And likewise, is it correct to state that MPI_Unpack must use a communicator that is a superset of the communicator used to<br>
> receive or create the buffer that is input to MPI_Unpack?<br>
><br>
> If that is the case, then would MPI_COMM_WORLD always bea valid option for use as a communicator<br>
> in MPI_Pack and MPI_Unpack?<br>
><br>
> Then, as you said, in a homogeneous system, there should be no disadvantage in specifying<br>
> MPI_COMM_WORLD.<br>
><br>
> Perhaps the standard and man pages for MPI_Pack could be restated:<br>
> >        The comm argument must include all (be a superset) of all the communicator"s"  that will be<br>
> >        subsequently used for sending the packed message.<br>
><br>
> And something similar for MPI_Unpack.<br>
><br>
> kindest regards<br>
> Mike<br>
><br>
> On 18 February 2016 at 12:57, Thakur, Rajeev <<a href="mailto:thakur@mcs.anl.gov">thakur@mcs.anl.gov</a>> wrote:<br>
> You can use MPI_COMM_WORLD as the communicator. If you are running on a homogeneous system, there shouldn’t be any performance issue in using MPI_COMM_WORLD as the communicator either.<br>
><br>
> Rajeev<br>
><br>
> > On Feb 17, 2016, at 6:09 PM, Michael Rezny <<a href="mailto:michael.rezny@monash.edu">michael.rezny@monash.edu</a>> wrote:<br>
> ><br>
> > Hi,<br>
> > I have a question regarding the use of a communicator in MPI_Pack and MPI_Unpack.<br>
> > I have googled and search the MPI mailing lists but haven't found an answer.<br>
> ><br>
> > The OpenMPI man page for MPI_Pack states:<br>
> >        The comm argument is the  communicator  that  will  be<br>
> >        subsequently used for sending the packed message.<br>
> ><br>
> > And something similar for MPI_Unpack.<br>
> ><br>
> > Which seems to reflect what is defined in the MPI standards.<br>
> ><br>
> > Basically, what I would like to do is to have an MPI rank as a coupler.<br>
> > That is, receiving a packed message from one application and<br>
> > passing it to another application.<br>
> ><br>
> > Comm_A would be the ranks of application A plus the coupler and<br>
> > Comm_B would be the ranks of application B plus the coupler.<br>
> ><br>
> > In this case, MPI_COMM_WORLD = Comm_A U Comm_B.<br>
> ><br>
> > I would like to have a solution that does not have the coupler unpacking<br>
> > the buffer received from application A and then packing it to send it to application B<br>
> ><br>
> > I just found a very nice explanation of the need for a communicator in Pack / Unpack on page 135 of Using MPI Portable Parallel Programming with the Message-Passing Interface<br>
> > second edition by Gropp, Lusk, and Skjellum.<br>
> ><br>
> > If I understand this correctly, it would be legal to use MPI_COMM_WORLD as the communicator<br>
> > for MPI_Pack and MPI_Unpack. The only downside is that one might not get the optimal performance.<br>
> ><br>
> > The alternative we are using is to use MPI_Pack_external and MPI_Unpack_external<br>
> > which requires no communicator. But the downside is that on homogeneous little-endian HPCs,<br>
> > this will always entail byte swapping on packing and unpacking.<br>
> ><br>
> > So my question is: What is the correct and optimal way to implement passing packed messages<br>
> > in the coupling example described above?<br>
> ><br>
> > kindest regards<br>
> > Mike<br>
> > _______________________________________________<br>
> > mpi-forum mailing list<br>
> > <a href="mailto:mpi-forum@lists.mpi-forum.org">mpi-forum@lists.mpi-forum.org</a><br>
> > <a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum" rel="noreferrer" target="_blank">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum</a><br>
><br>
> _______________________________________________<br>
> mpi-forum mailing list<br>
> <a href="mailto:mpi-forum@lists.mpi-forum.org">mpi-forum@lists.mpi-forum.org</a><br>
> <a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum" rel="noreferrer" target="_blank">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum</a><br>
><br>
> _______________________________________________<br>
> mpi-forum mailing list<br>
> <a href="mailto:mpi-forum@lists.mpi-forum.org">mpi-forum@lists.mpi-forum.org</a><br>
> <a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum" rel="noreferrer" target="_blank">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum</a><br>
<br>
_______________________________________________<br>
mpi-forum mailing list<br>
<a href="mailto:mpi-forum@lists.mpi-forum.org">mpi-forum@lists.mpi-forum.org</a><br>
<a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum" rel="noreferrer" target="_blank">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum</a></blockquote></div><br></div>