<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Bill, I thank you much for your input too.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
POSIX has no problem making you do the cast in C <span id="��">�� </span></div>
<pre class="code" style="font-family: monospace; padding: 0px 2em 0px 0px; color: rgb(68, 68, 68); background-color: rgb(255, 255, 255)"><b style="font-weight: bold">int posix_memalign(void **</b><i style="font-style: italic">memptr</i><b style="font-weight: bold">, size_t</b> <i style="font-style: italic">alignment</i><b style="font-weight: bold">, size_t</b> <i style="font-style: italic">size</i><b style="font-weight: bold">);</b></pre>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I get why its that way now in MPI, I still don't like it <span id="��">��</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Tony</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
cf,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<div style="margin: 0px; font-size: 12pt; font-family: Calibri, Arial, Helvetica, sans-serif">
<a href="https://linux.die.net/man/3/posix_memalign" style="margin: 0px">https://linux.die.net/man/3/posix_memalign</a><br>
</div>
<div class="_Entity _EType_OWALinkPreview _EId_OWALinkPreview _EReadonly_1" style="margin: 0px; font-size: 14px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif">
<div class="LPBorder397796" style="margin: 16px 0px; max-width: 800px; min-width: 424px">
<table style="padding: 12px 36px 12px 12px; width: 424px; border-width: 1px; border-style: solid; border-color: rgb(200, 200, 200); border-radius: 2px">
<tbody>
<tr style="border-spacing: 0px">
<td style="width: 368px">
<div style="margin: 0px 8px 12px 0px; font-weight: 300; font-size: 21px; font-family: wf_segoe-ui_light, "Segoe UI Light", "Segoe WP Light", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif">
<a target="_blank" href="https://linux.die.net/man/3/posix_memalign" style="margin: 0px; color: var(--themePrimary)">posix_memalign(3): allocate aligned memory - Linux man page</a></div>
<div style="margin: 0px 8px 12px 0px; font-family: wf_segoe-ui_normal, "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; color: rgb(102, 102, 102); max-height: 100px; overflow: hidden">
The function posix_memalign() allocates size bytes and places the address of the allocated memory in *memptr. The address of the allocated memory will be a ...</div>
<div style="margin: 0px; font-family: wf_segoe-ui_normal, "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; color: rgb(166, 166, 166)">
linux.die.net</div>
</td>
</tr>
</tbody>
</table>
<div class="_2G1t7TsffMpTdsxcutbAaz" tabindex="0" title="Remove link preview" style="margin: 0px; height: 32px; top: 4px; cursor: pointer; pointer-events: all; text-align: center; right: 4px">
<span class="_17cZVF34hdKub7ce2cOnAW css-317" style="margin: auto; font-weight: 300; font-size: 17px; line-height: 32px; font-family: controlIcons; color: var(--neutralSecondary); speak: none; display: block; pointer-events: none"></span></div>
<div class="_2G1t7TsffMpTdsxcutbAaz" tabindex="0" title="Remove link preview" style="margin: 0px; height: 32px; top: 4px; cursor: pointer; pointer-events: all; text-align: center; right: 4px">
<span class="_17cZVF34hdKub7ce2cOnAW css-317" style="margin: auto; font-weight: 300; font-size: 17px; line-height: 32px; font-family: controlIcons; color: var(--neutralSecondary); speak: none; display: block; pointer-events: none"></span></div>
<div class="_2G1t7TsffMpTdsxcutbAaz" tabindex="0" title="Remove link preview" style="margin: 0px; height: 32px; top: 4px; cursor: pointer; pointer-events: all; text-align: center; right: 4px">
<span class="_17cZVF34hdKub7ce2cOnAW css-317" style="margin: auto; font-weight: 300; font-size: 17px; line-height: 32px; font-family: controlIcons; color: var(--neutralSecondary); speak: none; display: block; pointer-events: none"></span></div>
</div>
</div>
<pre class="code" style="font-size: 14px; background-color: rgb(255, 255, 255); font-family: monospace; padding: 0px 2em 0px 0px; color: rgb(68, 68, 68)"><b style="font-weight: bold"><br></b></pre>
<br class="Apple-interchange-newline">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="Signature">
<div>
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<p style="margin-top: 0px; margin-bottom: 0px;">Anthony Skjellum, PhD</p>
<p style="margin-top: 0px; margin-bottom: 0px;">Professor of Computer Science and Chair of Excellence</p>
<p style="margin-top: 0px; margin-bottom: 0px;">Director, SimCenter</p>
<p style="margin-top: 0px; margin-bottom: 0px;">University of Tennessee at Chattanooga (UTC)</p>
<p style="margin-top: 0px; margin-bottom: 0px;">tony-skjellum@utc.edu  [or skjellum@gmail.com]</p>
<p style="margin-top: 0px; margin-bottom: 0px;">cell: 205-807-4968</p>
<p style="margin-top: 0px; margin-bottom: 0px;"><br>
</p>
</div>
</div>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> William Gropp <wgropp@illinois.edu><br>
<b>Sent:</b> Wednesday, October 14, 2020 3:48 PM<br>
<b>To:</b> Main MPI Forum mailing list <mpi-forum@lists.mpi-forum.org><br>
<b>Cc:</b> Rolf Rabenseifner <rabenseifner@hlrs.de>; Skjellum, Anthony <Tony-Skjellum@utc.edu><br>
<b>Subject:</b> Re: [Mpi-forum] Question about MPI_Alloc_mem</font>
<div> </div>
</div>
<div class="" style="word-wrap:break-word; line-break:after-white-space">My previous email (probably crossing paths with Tony’s reply) addressed most of this.  The one thing that I want to add is that the API choice made in MPI for the C binding, both in the
 MPI-1 attribute get functions and here, has nothing to do with the Fortran binding.  These were made to match C’s limitations on anonymous pointers, and to avoid requiring pointer casts. 
<div class="">
<div class=""><br class="">
</div>
<div class="">Bill</div>
<div class=""><br class="">
<div class="">
<div class="" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; word-wrap:break-word">
<div class="" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; word-wrap:break-word">
<div class="" style="color:rgb(0,0,0); letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; word-wrap:break-word">
<div class="" style="word-wrap:break-word">
<div style="color:rgb(0,0,0); font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px">
William Gropp<br class="">
Director and Chief Scientist, NCSA<br class="">
Thomas M. Siebel Chair in Computer Science<br class="">
University of Illinois Urbana-Champaign</div>
<br class="x_Apple-interchange-newline">
</div>
</div>
<br class="x_Apple-interchange-newline">
</div>
<br class="x_Apple-interchange-newline">
</div>
<br class="x_Apple-interchange-newline">
<br class="x_Apple-interchange-newline">
</div>
<div><br class="">
<blockquote type="cite" class="">
<div class="">On Oct 14, 2020, at 2:42 PM, Skjellum, Anthony via mpi-forum <<a href="mailto:mpi-forum@lists.mpi-forum.org" class="">mpi-forum@lists.mpi-forum.org</a>> wrote:</div>
<br class="x_Apple-interchange-newline">
<div class="">
<div class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
Rolf, the rationale is not clear at all to me: "to facilitate type casting" is self-understood or a canonical term of art. I've been programming in C for 40 years... and I never would write the API as we have done it there.  </div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
For pointers, out arguments are literally truthful: void **ptr is an out argument of a void pointer, and void *ptr is an in argument of a void pointer.</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
{Years ago, before there was void *, we would have written char **ptr for a char out argument (and cast it to whatever type we wanted), and char *ptr for an in point argument. }</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
The fact that a void ** can stand in the place of a void * is clearly a weakened typing in the language, because void * can point at anything (unknown).  Since a void * is a pointer, it can also hold a pointer to a pointer to void, sure.   But the intent of
 the second * is to remind you that you have an out argument.  And you *must* pass a pointer to a pointer for the API to work in C.</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
Somehow this is helping the Fortran and C_PTR API of Fortran, as it states.  So the C API is made this way for convenience of Fortran.</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
The rationale shows the argument with the & to pass the pointer to the API by reference.  But, the rationale is not necessarily normative.  A reasonable person reads the standard,  sees void * and passes the baseptr without the &.  </div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
Seems like a bad API to me.</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
Tony</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div class="" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">
<br class="">
</div>
<div id="x_Signature" class="">
<div class="">
<div id="x_divtagdefaultwrapper" dir="ltr" class="" style="font-size:12pt; font-family:Calibri,Helvetica,sans-serif">
<div class="" style="margin-top:0px; margin-bottom:0px">Anthony Skjellum, PhD</div>
<div class="" style="margin-top:0px; margin-bottom:0px">Professor of Computer Science and Chair of Excellence</div>
<div class="" style="margin-top:0px; margin-bottom:0px">Director, SimCenter</div>
<div class="" style="margin-top:0px; margin-bottom:0px">University of Tennessee at Chattanooga (UTC)</div>
<div class="" style="margin-top:0px; margin-bottom:0px"><a href="mailto:tony-skjellum@utc.edu" class="">tony-skjellum@utc.edu</a><span class="x_Apple-converted-space"> </span> [or<span class="x_Apple-converted-space"> </span><a href="mailto:skjellum@gmail.com" class="">skjellum@gmail.com</a>]</div>
<div class="" style="margin-top:0px; margin-bottom:0px">cell: 205-807-4968</div>
<div class="" style="margin-top:0px; margin-bottom:0px"><br class="">
</div>
</div>
</div>
</div>
</div>
<div id="x_appendonsend" class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
</div>
<hr tabindex="-1" class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none; display:inline-block; width:662.46875px">
<span class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none; float:none; display:inline!important"></span>
<div id="x_divRplyFwdMsg" dir="ltr" class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<font face="Calibri, sans-serif" class="" style="font-size:11pt"><b class="">From:</b><span class="x_Apple-converted-space"> </span>mpi-forum <<a href="mailto:mpi-forum-bounces@lists.mpi-forum.org" class="">mpi-forum-bounces@lists.mpi-forum.org</a>> on behalf
 of Rolf Rabenseifner via mpi-forum <<a href="mailto:mpi-forum@lists.mpi-forum.org" class="">mpi-forum@lists.mpi-forum.org</a>><br class="">
<b class="">Sent:</b><span class="x_Apple-converted-space"> </span>Wednesday, October 14, 2020 1:32 PM<br class="">
<b class="">To:</b><span class="x_Apple-converted-space"> </span>Main MPI Forum mailing list <<a href="mailto:mpi-forum@lists.mpi-forum.org" class="">mpi-forum@lists.mpi-forum.org</a>><br class="">
<b class="">Cc:</b><span class="x_Apple-converted-space"> </span>Rolf Rabenseifner <<a href="mailto:rabenseifner@hlrs.de" class="">rabenseifner@hlrs.de</a>><br class="">
<b class="">Subject:</b><span class="x_Apple-converted-space"> </span>Re: [Mpi-forum] Question about MPI_Alloc_mem</font>
<div class=""> </div>
</div>
<div class="x_BodyFragment" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<font size="2" class=""><span class="" style="font-size:11pt">
<div class="x_PlainText">Dear Tony,<span class="x_Apple-converted-space"> </span><br class="">
<br class="">
please read MPI-3.1 page 338, lines 36-41.<br class="">
Do these lines resolve your question?<br class="">
<br class="">
Best regards<br class="">
Rolf<span class="x_Apple-converted-space"> </span><br class="">
<br class="">
----- Original Message -----<br class="">
> From: "Main MPI Forum mailing list" <<a href="mailto:mpi-forum@lists.mpi-forum.org" class="">mpi-forum@lists.mpi-forum.org</a>><br class="">
> To: "Main MPI Forum mailing list" <<a href="mailto:mpi-forum@lists.mpi-forum.org" class="">mpi-forum@lists.mpi-forum.org</a>><br class="">
> Cc: "Anthony Skjellum" <<a href="mailto:skjellum@gmail.com" class="">skjellum@gmail.com</a>><br class="">
> Sent: Wednesday, October 14, 2020 7:01:54 PM<br class="">
> Subject: [Mpi-forum] Question about MPI_Alloc_mem<br class="">
<br class="">
> Folks, I know we have had this function for a long time, and I've implemented<br class="">
> ports of MPI that actually use it (e.g., with pre-pinned memory). But, I am<br class="">
> trying to understand the logic for why baseptr is passed by value, instead of<br class="">
> by reference. In C, everything is by value, so the last argument in normal C<br class="">
> programs would be void **baseptr.<br class="">
><span class="x_Apple-converted-space"> </span><br class="">
> The standard has:<br class="">
> int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr);<br class="">
> Now, MPICC/GCC takes this with<br class="">
> void *memory = (void *)0;<br class="">
> int error = MPI_Alloc_mem(1024, MPI_INFO_NULL, &memory);<br class="">
> and you get the memory allocated properly.<br class="">
> What is more, this is incorrect:<br class="">
> int error = MPI_Alloc_mem(1024, MPI_INFO_NULL, memory);<br class="">
> although it compiles fine because that is, indeed, the API.<br class="">
> Why would we have the pointer going in by value, when it is coming out<br class="">
> as an OUT argument?<br class="">
> Isn't this plain wrong?  void **baseptr means ---> I am passing you the<br class="">
> address of a void pointer.<br class="">
> Every viable implementation must do *(void **)baseptr = ...<br class="">
> when providing the "malloc'd/special" memory.  So... why did we fudge<br class="">
> the C API.  Is there some tie-in with the Fortran API?<br class="">
> Thanks in advance,<br class="">
> Tony Skjellum<br class="">
><span class="x_Apple-converted-space"> </span><br class="">
><span class="x_Apple-converted-space"> </span><br class="">
> --<br class="">
> Anthony Skjellum, PhD<br class="">
> [<span class="x_Apple-converted-space"> </span><a href="mailto:skjellum@gmail.com" class="">mailto:skjellum@gmail.com</a><span class="x_Apple-converted-space"> </span>|<span class="x_Apple-converted-space"> </span><a href="mailto:skjellum@gmail.com" class="">skjellum@gmail.com</a><span class="x_Apple-converted-space"> </span>]<br class="">
> Cell: +1-205-807-4968<br class="">
><span class="x_Apple-converted-space"> </span><br class="">
><span class="x_Apple-converted-space"> </span><br class="">
><span class="x_Apple-converted-space"> </span><br class="">
> _______________________________________________<br class="">
> mpi-forum mailing list<br class="">
><span class="x_Apple-converted-space"> </span><a href="mailto:mpi-forum@lists.mpi-forum.org" class="">mpi-forum@lists.mpi-forum.org</a><br class="">
><span class="x_Apple-converted-space"> </span><a href="https://lists.mpi-forum.org/mailman/listinfo/mpi-forum" class="">https://lists.mpi-forum.org/mailman/listinfo/mpi-forum</a><br class="">
<br class="">
--<span class="x_Apple-converted-space"> </span><br class="">
Dr. Rolf Rabenseifner . . . . . . . . . .. email<span class="x_Apple-converted-space"> </span><a href="mailto:rabenseifner@hlrs.de" class="">rabenseifner@hlrs.de</a><span class="x_Apple-converted-space"> </span>.<br class="">
High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530 .<br class="">
University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832 .<br class="">
Head of Dpmt Parallel Computing . . .<span class="x_Apple-converted-space"> </span><a href="http://www.hlrs.de/people/rabenseifner" class="">www.hlrs.de/people/rabenseifner</a><span class="x_Apple-converted-space"> </span>.<br class="">
Nobelstr. 19, D-70550 Stuttgart, Germany . . . . (Office: Room 1.307) .<br class="">
_______________________________________________<br class="">
mpi-forum mailing list<br class="">
<a href="mailto:mpi-forum@lists.mpi-forum.org" class="">mpi-forum@lists.mpi-forum.org</a><br class="">
<a href="https://lists.mpi-forum.org/mailman/listinfo/mpi-forum" class="">https://lists.mpi-forum.org/mailman/listinfo/mpi-forum</a><br class="">
</div>
</span></font></div>
<span class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none; float:none; display:inline!important">_______________________________________________</span><br class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<span class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none; float:none; display:inline!important">mpi-forum
 mailing list</span><br class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<a href="mailto:mpi-forum@lists.mpi-forum.org" class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px">mpi-forum@lists.mpi-forum.org</a><br class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; text-align:start; text-indent:0px; text-transform:none; white-space:normal; word-spacing:0px; text-decoration:none">
<a href="https://lists.mpi-forum.org/mailman/listinfo/mpi-forum" class="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant-caps:normal; font-weight:normal; letter-spacing:normal; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px">https://lists.mpi-forum.org/mailman/listinfo/mpi-forum</a></div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</body>
</html>