<br><br>
<div class="gmail_quote">2009/12/15 Dave Goodell <span dir="ltr">&lt;<a href="mailto:goodell@mcs.anl.gov">goodell@mcs.anl.gov</a>&gt;</span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">[my page/section references are also relative to the MPI-2.1 Standard] 
<div class="im"><br><br>On Dec 15, 2009, at 6:18 AM, Tamás Faragó wrote:<br><br></div>
<div class="im">
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">I have a question about MPI_GET_COUNT and MPI_GET_ELEMENTS. What do these functions exactly return?<br><br>

As I have read from the documentation (3.2.5) MPI_GET_COUNT returns the count of &#39;entries&#39; of type &#39;datatype&#39; received. According to me in example 4.12 (line 13) MPI_GET_COUNT should return 2 as we have sent two MPI_REAL types. The example however shows 1. Is this because as at when you send 2 types MPI transparently creates a new custom datatype (4.1.11) consisting of these two elements and thus the top-entry is 1?<br>

</blockquote><br></div>It returns 1 because the receiver side passed in &quot;Type2&quot; as &#39;datatype&#39;, and all of the data is received by a single instance of &quot;Type2&quot;.  It would return 2 if instead line 13 passed &quot;MPI_REAL&quot; to MPI_Get_count. 
<div class="im"><br><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">This, however should suggest that MPI_GET_COUNT always returns 1, or MPI_UNDEFINED on an error (eg unmached receive count or type). Is this correct?<br>

</blockquote><br></div>No.  This is explained in a fairly precise way a little bit earlier in the section (4.1.11, pg 101).  The main discussion of type maps and type signatures is in section 4.1, pg 77. 
<div class="im"><br><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">MPI_GET_ELEMENTS than receives what?<br></blockquote><br></div>MPI_Get_elements returns the number of &quot;basic elements&quot; matched.  That is, things like MPI_REAL, MPI_CHAR, etc.  Derived datatypes are not basic types.  The main reason that this function is needed is because it is possible to receive less than (count*n) basic elements in a receive, where n is the number of (type,disp) pairs in the type map of the receive type. 
<div class="im"><br><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">How is the example (4.12) even working correctly when a custom datatype Type2 consists of two MPI_REALs and you want to receive two of those, eg 4 MPI_REALs?<br>

</blockquote><br></div>4.1.11 explains the matching rules for datatypes.  In particular, this paragraph might be helpful (pg 101, lines 39-42):<br><br>---------8&lt;--------<br>Type matching is defined according to the type signature of the corresponding datatypes,<br>

that is, the sequence of basic type components. Type matching does not depend on some<br>aspects of the datatype definition, such as the displacements (layout in memory) or the<br>intermediate types used.<br>---------8&lt;--------<br>

<br>So if you just take the sender and receiver datatypes, express them in terms of their type maps, and then compare them according to the rules of 4.1.11, you should be able to see whether they will match or not.<br><br>

If all of this still isn&#39;t clear after you take a look at those sections, please let me know.  I can cook up an example that might make it clearer.<br><font color="#888888"><br>-Dave</font> 
<div>
<div></div>
<div class="h5"><br><br>_______________________________________________<br>mpich-discuss mailing list<br><a href="mailto:mpich-discuss@mcs.anl.gov" target="_blank">mpich-discuss@mcs.anl.gov</a><br><a href="https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss" target="_blank">https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss</a><br>

</div></div></blockquote></div>
<div><br> </div>
<div>Thank you very much for the clarifications. MPI_GET_ELEMENTS returns the number of basic MPI datatypes (eg MPI::SHORT, MPI::BYTE, etc.) while MPI_GET_COUNT the number of top-level elements. Eg if I ask for 2 MPI::REAL GET_COUNT returns 2, while if I ask for Type2 (2 of type MPI_REAL), GET_COUNT returns 1.</div>


<div> </div>
<div>I have read and reread these sections at least a dozen times in the past few days but the mixed usage of &#39;entries&#39; (3.2.5) which gets renamed to &#39;top-level entries&#39; (4.1.11) and &#39;datatype copies&#39; and &#39;basic elements&#39; - &#39;basic datatypes&#39; doesn&#39;t really clear up things. </div>


<div> </div>
<div>Example 4.12 is a good example but I think could use some explanation why these actual values are returned. Although it might be me who is really slow in understanding the specs :)</div>
<div> </div>
<div>Thanks Dave</div>