pnetcdf-write-nb.c non-blocking
Wei-keng Liao
wkliao at eecs.northwestern.edu
Mon Sep 14 16:25:29 CDT 2015
Another clarification, overlapped user buffers are not allowed
for nonblocking read operations. This is due to MPI-IO limitation
on prohibiting overlapping user buffer datatype in read operations.
See MPI 3.0 Chapter 13.4.1, the last sentence of page 506.
Wei-keng
On Sep 14, 2015, at 4:03 PM, Wei-keng Liao wrote:
> Hi, Rob,
>
> You are right about the prohibition of reusing buffers in nonblocking APIs.
>
> Just to make this limitation more clear. Reusing user buffers or using
> overlapped user buffers are prohibited in general. This limitation is not
> only for across nonlocking APIs but also for mixed nonblocking and blocking
> APIs. The reason is because the user buffer may be used internally by
> PnetCDF to do an in-place byte swap operation.
>
> However, if PnetCDF is built with --disable-in-place-swap, then
> the write buffer will be copied to a temporary buffer before committed
> to the file. In this case, the write buffers might technically be reused
> or overlapped.
>
>
> Wei-keng
>
> On Sep 14, 2015, at 2:45 PM, Rob Latham wrote:
>
>>
>>
>> On 09/07/2015 04:25 PM, Wei-keng Liao wrote:
>>> Hi,
>>>
>>> The example program is buggy.
>>> The write buffers for the two iput calls should be different.
>>> FYI. Once a nonblocking iput/iget API is posted, the contents
>>> of the buffers should not be touched before the call to
>>> ncmpi_wait_all/ncmpi_wait. Otherwise, the results can be incorrect.
>>>
>>> Please see the bug fix in http://trac.mcs.anl.gov/projects/parallel-netcdf/changeset/2095
>>> Thanks for reporting this problem.
>>
>> Hi Wei-keng: I wrote that example and did indeed follow the rule that the contents of the buffers should not be touched before the call to ncmpi_wait_all. -- the 'data' buffer is the same for both calls and is unmodified.
>>
>> My mistake was that I remembered the buffer reuse rule (for both MPI and pnetcdf) as "don't change the buffer" but it's more than that: I just wanted to make it clear that the rules for buffer reuse prohibit not only modification but any reads as well.
>>
>> ==rob
>>
>>>
>>> Wei-keng
>>>
>>> On Sep 7, 2015, at 1:52 PM, W. Miah wrote:
>>>
>>>> Hello,
>>>>
>>>> I have downloaded pNetCDF and am browsing through the example code
>>>> parallel-netcdf-1.6.0/examples/tutorial/pnetcdf-write-nb.c (attached
>>>> with this email) which should write the MPI ranks into two arrays, but
>>>> instead seems to be writing random values:
>>>>
>>>> [miahw at bengal tutorial]$ ncdump output.nc
>>>> netcdf output {
>>>> dimensions:
>>>> d1 = 4 ;
>>>> variables:
>>>> int v1(d1) ;
>>>> int v2(d1) ;
>>>>
>>>> // global attributes:
>>>> :string = "Hello World\n",
>>>> "" ;
>>>> data:
>>>>
>>>> v1 = 0, 16777216, 33554432, 50331648 ;
>>>>
>>>> v2 = 0, 16777216, 33554432, 50331648 ;
>>>> }
>>>>
>>>> I have looked at the code but can't see anything wrong with it. Could
>>>> it be that the library has a bug?
>>>>
>>>> Regards,
>>>>
>>>> --
>>>> web: http://miahw.wordpress.com
>>>> gnupg: 2E29 B22F
>>>> <pnetcdf-write-nb.c>
>>>
>>
>> --
>> Rob Latham
>> Mathematics and Computer Science Division
>> Argonne National Lab, IL USA
>
More information about the parallel-netcdf
mailing list