pnetcdf and large transfers
Wei-keng Liao
wkliao at ece.northwestern.edu
Mon Jul 1 17:48:47 CDT 2013
> int MPI_File_write_all(MPI_File fh, const void *buf, int count,
> MPI_Datatype datatype, MPI_Status *status)
>
> So you probably see the problem: 'int count' -- integer are still 32
> bits on many systems (linux x86_64, blue gene, ppc64): how do we
> describe more than 2 GiB of data?
I thought this is a ROMIO problem which restricts the amount of
bytes in a single read/write call. In romio/adio/common/ad_write.c, these lines
below calls an assertion.
MPI_Type_size(datatype, &datatype_size);
len = (ADIO_Offset)datatype_size * (ADIO_Offset)count;
ADIOI_Assert(len == (unsigned int) len); /* read takes an unsigned int parm */
The limit is 4GiB in ROMIO, instead of 2GiB in PnetCDF. If this assertion is
removed/resolved, your datatype approach will make sense for > 4GB I/O.
In POSIX read/write, the count argument is of size_t type, which is 8
bytes on 64-bit machines. ROMIO should check the size of size_t at configure
time to avoid the above assertion.
Note that the nonblocking APIs might end up with noncontiguous buffer
type when calling MPI-IO APIs. Breaking it apart for chunking I/O needs
some work, maybe requiring more temp memory space.
Wei-keng
More information about the parallel-netcdf
mailing list