Big file support on BG with 32-bit off_t type
John Michalakes
john at michalakes.us
Tue Jan 9 21:34:58 CST 2007
Hi Robert,
We tried what you suggested and it seems to work (though we're running into
other problems now on the SDSC blue gene system, so I can't say yet for sure,
but it appears we're past the earlier error NC_ESMALL error). The actual testing
is being done by Michael McCraken at SDSC. He advises that SIZEOF_MPI_OFFSET is
8. Thanks for your help!
John
> -----Original Message-----
> From: owner-parallel-netcdf at mcs.anl.gov
> [mailto:owner-parallel-netcdf at mcs.anl.gov]On Behalf Of Robert Latham
> Sent: Tuesday, January 09, 2007 2:13 PM
> To: John Michalakes
> Cc: parallel-netcdf at mcs.anl.gov
> Subject: Re: Big file support on BG with 32-bit off_t type
>
>
> On Mon, Jan 08, 2007 at 01:54:23PM -0700, John Michalakes wrote:
> > Working on Blue Gene, we have a code that uses pnetcdf to
> > successfully write a large file (> 2GB, file type "2"). The pnetcdf
> > library and code are compiled with 32-bit addressing so that
> > sizeof(off_t) is 4. The file appears to be correct based on persual
> > with ncdump.
>
> Great. Glad to hear at least the file creation part of your code is
> working better now.
>
> > We are unable to read the file back in, however, using pnetcdf with
> > another program also compiled with 32-bit addressing. The error
> > return is: NC_ESMALL.
> >
> > I believe the section of pnetcdf code returning the error is
> > ncmpii_hdr_get_NC, in header.c:
> >
> > /* check version number in last byte of magic */
> > if (magic[sizeof(ncmagic)-1] == 0x1) {
> > getbuf.version = 1;
> > } else if (magic[sizeof(ncmagic)-1] == 0x2) {
> > getbuf.version = 2;
> > fSet(ncp->flags, NC_64BIT_OFFSET);
> > if (sizeof(off_t) != 8) {
> > /* take the easy way out: if we can't support all CDF-2
> > * files, return immediately */
> > free(getbuf.base);
> > return NC_ESMALL;
> >
> > This is around line 1142.
> >
> > Question: is this error condition correct and necessary? How does
> > 32-bit pnetcdf manage to *write* the large file (apparently)
> > correctly?
>
> Hm, that is indeed probably a bug: we should check for
> sizof(MPI_Offset), not off_t. Do you still have the
> src/lib/ncconfig.h file handy? Does it have lines like this?
>
> /* The number of bytes in an MPI_Offset */
> #define SIZEOF_MPI_OFFSET 8
>
> > Will pnetcdf compiled for OBJECT_MODE 64 work properly on Blue Gene?
>
> I think that it would, but I also think it should work ok as-is.
> Here's a quick fix. If ncconfig.h already says SIZEOF_MPI_OFFSET is
> 8, then can you try changing this line:
>
> if (sizeof(off_t) != 8) {
>
> to this
>
> if (sizeof(MPI_Offset) != 8) {
>
> If that works, then I'll clean up the approach a bit and add it to the
> next release.
>
> Thanks for the report. It's great to know that the CDF-2 format is
> getting used.
>
> ==rob
>
> --
> Rob Latham
> Mathematics and Computer Science Division A215 0178 EA2D B059 8CDF
> Argonne National Lab, IL USA B29D F333 664A 4280 315B
>
More information about the parallel-netcdf
mailing list