mixed use of size_t and MPI_Offset

Jonghyun Lee jlee at mcs.anl.gov
Mon May 2 11:17:37 CDT 2005


Hi Jianwei,

> All length parameters in the interface were changed
> from int/size_t to MPI_Offset to enable 64-bit size
> support in the future, as well as to avoid some
> problems we had with size_t on certain platforms...

Please check the functions that I mentioned in my previous e-mail to the
list. I am using version 1.0.0 prelease downloded from the web.

> Are you using the ncmpi FLASH I/O benchmark written
> by Brad (http://flash.uchicago.edu/~jbgallag/io_bench/)?

Yes

> It worked fine for me with all the length parameters
> updated to MPI_Offset. And for single-valued length
> parameters including constant "1" in the ncmpi_put_att_*
> functions, they worked fine for me without any typecast
> from "int" to "MPI_Offset", as expected.

Maybe it depends on the compiler. I used pgcc to compile the code (mpicc
uses pgcc).

> Are you using correct pointer types for all the array
> parameters where MPI_Offset is expected?
> Maybe that's the problem...

I am sure I used correct types for the parameters, but I'll check again.

Jonghyun


> Jianwei
>
> On Sat, 30 Apr 2005, Robert Latham wrote:
>
> >> On Fri, Apr 29, 2005 at 02:00:07PM -0500, Jonghyun Lee wrote:
> >> Hello.
> >>
> >> I have downloaded PnetCDF 1.0 prerelease, and tried to use it with Flash
> >> I/O benchmark. However, I have encountered numerous problems, and one
> >> of the reasons seems to be that the PnetCDF code mixes "size_t" and
> >> "MPI_Offset" in its API when passing number of elements (e.g.,
> >> size_t for nelems in ncmpii_put_att, MPI_Offset for nelems in
> >> ncmpi_put_att_int)
> >>
> >> The Flash I/O benchmark code passes int variables or constants to these
> >> functions, and this causes problems. For example, the benchmark calls
> >>
> >> ncmpi_put_att_int(ncid, NC_GLOBAL, "total_blocks",  NC_INT, 1,
> >> total_blocks);
> >>
> >> In ncmpi_put_att_int, the fifth parameter (nelems) is declared as
> >> MPI_Offset. When it is actually called, nelems is passed 8 byte worth
> >> of data, and the next variable is passed NULL.  This could be avoided
> >> when I passed (MPI_Offset)1, instead of 1 for the fifth parameter.
> >>
> >> Any specific reason for this mixed use? I didn't have this problem with
> >> the previous version, and I think this is causing confusions. I don't know
> >> if this has already been discussed.
> >
> > Hi Jonghyun
> > We already talked about this in person, but for the sake of the
> > mailing list archives...
> >
> > we changed our api in 0.9.4 so that all ncmpi_ routines take
> > MPI_Offset instead of size_t.  Codes ported to parallel-netcdf prior
> > to 0.9.4 (such as the flash io benchmark) will have to be updated.
> > The good news is that's our last api change (we've made additional api
> > extensions).
> >
> > Did you find places where parallel-netcdf was still using size_t? It
> > sounds to me like only flash IO was using size_t, but just wanted to
> > make sure.
> >
> > ==rob
> >
> > --
> > Rob Latham
> > Mathematics and Computer Science Division    A215 0178 EA2D B059 8CDF
> > Argonne National Labs, IL USA                B29D F333 664A 4280 315B
> >
>
>




More information about the parallel-netcdf mailing list