Wei-king,<br><br>I&#39;m not sure I understand this or what it would give me that I don&#39;t already have available.<br><br><div class="gmail_quote">On Mon, Feb 20, 2012 at 4:42 PM, Wei-keng Liao <span dir="ltr">&lt;<a href="mailto:wkliao@ece.northwestern.edu">wkliao@ece.northwestern.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
(I should have replied my previous email to the pnetcdf list.)<br>
<br>
We are still working on this new API.<br>
The usage will be something like below.<br>
<br>
    buf = malloc(buf_size);<br>
    ncmpi_buffer_attach(ncid, buf, buf_size);<br>
<br>
    ncmpi_iput_vara_float(...);<br>
    ncmpi_iput_vara_float(...);<br>
    ...<br>
    ncmpi_wait_all(...);<br>
<br>
    ncmpi_buffer_detach(ncid);<br>
    free(buf);<br>
<br>
<br>
Wei-keng<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Feb 20, 2012, at 5:24 PM, Jim Edwards wrote:<br>
<br>
&gt; Yes - If I understand you correctly I think that it would.   So I would provide the buffer and pnetcdf would handle the task of freeing the memory when the buffer is no longer required?<br>
&gt;<br>
&gt; On Mon, Feb 20, 2012 at 3:38 PM, Wei-keng Liao &lt;<a href="mailto:wkliao@ece.northwestern.edu">wkliao@ece.northwestern.edu</a>&gt; wrote:<br>
&gt;<br>
&gt; We (the pnetcdf developers) have been talking about creating a new<br>
&gt; set of APIs analogs to MPI_Bsend, send with user-provided buffering.<br>
&gt; This requires the user to provide a buffer and its size for pnetcdf<br>
&gt; to copy the requests over and to be flushed later. Hence, this memory<br>
&gt; management in pnetcdf can ease the programming work at the application<br>
&gt; end. Will this make sense to your applications?<br>
&gt;<br>
&gt;<br>
&gt; Wei-keng<br>
&gt;<br>
&gt;<br>
&gt; On Feb 20, 2012, at 3:27 PM, Rob Latham wrote:<br>
&gt;<br>
&gt; &gt; On Mon, Feb 20, 2012 at 02:15:03PM -0700, Jim Edwards wrote:<br>
&gt; &gt;&gt; The memory overhead is on the application end, I need to make a copy of the<br>
&gt; &gt;&gt; iobuffer, because it is potentially reused for each call and if I do<br>
&gt; &gt;&gt; non-blocking calls it needs to persist.<br>
&gt; &gt;<br>
&gt; &gt; that memory overhead may be a small price to pay if it results in<br>
&gt; &gt; better record variable I/O.<br>
&gt; &gt;<br>
&gt; &gt; the interleaved records really mess up some common collective i/o<br>
&gt; &gt; assumptions.  If however you write out all your record variables in<br>
&gt; &gt; one shot, the i/o request is no longer &quot;aggressively noncontiguous&quot;<br>
&gt; &gt; and performance should be a lot better.<br>
&gt; &gt;<br>
&gt; &gt; ==rob<br>
&gt; &gt;<br>
&gt; &gt;&gt; On Mon, Feb 20, 2012 at 2:01 PM, Wei-keng Liao<br>
&gt; &gt;&gt; &lt;<a href="mailto:wkliao@ece.northwestern.edu">wkliao@ece.northwestern.edu</a>&gt;wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; We have a few yet-to-be-published results (using FLASH and a climate<br>
&gt; &gt;&gt;&gt; application) that show significant improvement of using these<br>
&gt; &gt;&gt;&gt; nonblocking (or we should refer them as &quot;aggregating&quot;) APIs.<br>
&gt; &gt;&gt;&gt; Below is a scenario that these APIs can be useful. Say, one<br>
&gt; &gt;&gt;&gt; application has many small sized variables defined and they all<br>
&gt; &gt;&gt;&gt; will be written to a file at about the same time, like checkpointing.<br>
&gt; &gt;&gt;&gt; The blocking APIs allow writing/reading one variable at a time,<br>
&gt; &gt;&gt;&gt; so the performance can be poor. The nonblocking APIs aggregate<br>
&gt; &gt;&gt;&gt; multiple requests into a larger one and hence can result in better<br>
&gt; &gt;&gt;&gt; performance.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; There is not much overhead for the additional memory management,<br>
&gt; &gt;&gt;&gt; as the APIs do not introduce extra memory copy, nor allocating<br>
&gt; &gt;&gt;&gt; additional buffers. The essence of these APIs are to create a<br>
&gt; &gt;&gt;&gt; new, combined MPI file view for the single collective I/O at<br>
&gt; &gt;&gt;&gt; the end.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Wei-keng<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; On Feb 20, 2012, at 2:23 PM, Jim Edwards wrote:<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Hi Wei-keng,<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; That&#39;s the answer that I thought I would get, and no I guess there is no<br>
&gt; &gt;&gt;&gt; point in having one.   Is there a demonstrable performance benefit of this<br>
&gt; &gt;&gt;&gt; non-blocking interface that would make it worth taking on the additional<br>
&gt; &gt;&gt;&gt; memory management that it will require?<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Jim<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; On Mon, Feb 20, 2012 at 1:18 PM, Wei-keng Liao &lt;<br>
&gt; &gt;&gt;&gt; <a href="mailto:wkliao@ece.northwestern.edu">wkliao@ece.northwestern.edu</a>&gt; wrote:<br>
&gt; &gt;&gt;&gt;&gt; Hi, Jim,<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; The &quot;non-blocking&quot; APIs in pnetcdf are not truly asynchronous.<br>
&gt; &gt;&gt;&gt;&gt; They actually defer the I/O requests till ncmpi_wait_all.<br>
&gt; &gt;&gt;&gt;&gt; So, if there is a corresponding test call and it is called<br>
&gt; &gt;&gt;&gt;&gt; in between the post of nonblocking and wait, it will simply<br>
&gt; &gt;&gt;&gt;&gt; return false, indicating not yet complete.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Given that, would you still like to see a test API available<br>
&gt; &gt;&gt;&gt;&gt; in pnetcdf? (That will not be too hard to add one.)<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Wei-keng<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; On Feb 20, 2012, at 1:47 PM, Jim Edwards wrote:<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; I am working on an async interface using pnetcdf and wondering why<br>
&gt; &gt;&gt;&gt; there is no analog to mpi_test in the API?<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; --<br>
&gt; &gt;&gt;&gt;&gt;&gt; Jim Edwards<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; CESM Software Engineering Group<br>
&gt; &gt;&gt;&gt;&gt;&gt; National Center for Atmospheric Research<br>
&gt; &gt;&gt;&gt;&gt;&gt; Boulder, CO<br>
&gt; &gt;&gt;&gt;&gt;&gt; <a href="tel:303-497-1842" value="+13034971842">303-497-1842</a><br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; --<br>
&gt; &gt;&gt;&gt;&gt; Jim Edwards<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Rob Latham<br>
&gt; &gt; Mathematics and Computer Science Division<br>
&gt; &gt; Argonne National Lab, IL USA<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Jim Edwards<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><pre>Jim Edwards<br><br><br></pre><br>