<br><tt><font size=2>robl@mcs.anl.gov (Robert Latham) wrote on 02/14/2008
10:08:03 AM:<br>
<br>
&gt; Do you mean aio_read/aio_write/aio_suspend/aio_error/aio_return are<br>
&gt; ENOSYS on BlueGene or are they just wrapers around blocking I/O? &nbsp;<br>
</font></tt>
<br><tt><font size=2>We don't have &lt;aio.h&gt; so we followed the </font></tt>
<br>
<br><tt><font size=2>#ifndef ROMIO_HAVE_WORKING_AOI and #ifndef HAVE_AIO_H
paths. &nbsp;</font></tt>
<br>
<br><tt><font size=2>I'm not sure if there are some wrappers buried somewhere
in the code.</font></tt>
<br>
<br><tt><font size=2>&gt; The easiest thing to use is just ADIOI_FAKE_IreadContig
and</font></tt>
<br><tt><font size=2>&gt; ADIOI_FAKE_IwriteContig, which will carry out
ADIO_ReadContig and</font></tt>
<br><tt><font size=2>&gt; return an already-completed MPI request object.
&nbsp;</font></tt>
<br>
<br><tt><font size=2>I see the new ad_ufs does that and uses GEN done's:</font></tt>
<br>
<br><tt><font size=2>+#ifdef ROMIO_HAVE_WORKING_AIO</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp;ADIOI_GEN_IreadContig, /* IreadContig
*/</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp;ADIOI_GEN_IwriteContig, /* IwriteContig
*/</font></tt>
<br><tt><font size=2>+#else</font></tt>
<br><tt><font size=2>+ &nbsp; &nbsp;ADIOI_FAKE_IreadContig, /* IreadContig
*/</font></tt>
<br><tt><font size=2>+ &nbsp; &nbsp;ADIOI_FAKE_IwriteContig, /* IwriteContig
*/</font></tt>
<br><tt><font size=2>+#endif</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp;ADIOI_GEN_IODone, /* ReadDone
*/</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp;ADIOI_GEN_IODone, /* WriteDone
*/</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp;ADIOI_GEN_IOComplete, /* ReadComplete
*/</font></tt>
<br>
<br><tt><font size=2>That seem reasonable?</font></tt>
<br>
<br><tt><font size=2>I'm just not sure offhand if we're losing something
without this &quot;old way&quot;? or was it moot since we didn't support
aio?</font></tt>
<br>
<br><tt><font size=2>&gt; old way: ROMIO implemented its own (incompatible)
MPIO_Request</font></tt>
<br><tt><font size=2>&gt; objects. &nbsp;Instead of MPI_TEST/MPI_WAIT/etc,
callers had to use</font></tt>
<br><tt><font size=2>&gt; MPIO_TEST and MPIO_WAIT. &nbsp;ROMIO did its
own bookeeping. </font></tt>
<br>