The PIO team is pleased to release version 2.4.3 of the PIO library. This
release includes new API functions, documentation improvements, bug fixes,
and more tests. Get the latest release from:
https://github.com/NCAR/ParallelIO/releases/download/pio2_4_3/pio-2.4.3.tar.gz
See https://ncar.github.io/ParallelIO/ for documentation.
What is PIO?
The Parallel IO libraries (PIO) are high-level parallel I/O C and Fortran
libraries for structured grid applications. PIO provides a netCDF-like API,
and allows users to designate some subset of processors to perform IO.
Computational code calls netCDF-like functions to read and write data, and
PIO uses the IO processors to perform all necessary IO.
PIO also supports the creation of multiple computation components, each
containing many processors, and one shared set of IO processors. The
computational components can perform write operation asynchronously, and
the IO processors will take care of all storage interaction.
See the PIO web site for more information: http://ncar.github.io/ParallelIO/
New This ReleaseAdded vard Functions for Distributed Array Access
To better match the look and feel of the netCDF API, we have added the
following functions to do distributed array reads and writes. These
functions are similar to a PIOc_setfreame() call, followed by a
PIOc_read_darray() or PIOc_write_darray().
/* Data reads - vard. */
int PIOc_get_vard(int ncid, int varid, int decompid, const
PIO_Offset recnum, void *buf);
int PIOc_get_vard_text(int ncid, int varid, int decompid, const
PIO_Offset recnum,
char *buf);
int PIOc_get_vard_schar(int ncid, int varid, int decompid, const
PIO_Offset recnum,
signed char *buf);
int PIOc_get_vard_short(int ncid, int varid, int decompid, const
PIO_Offset recnum,
short *buf);
int PIOc_get_vard_int(int ncid, int varid, int decompid, const
PIO_Offset recnum,
int *buf);
int PIOc_get_vard_float(int ncid, int varid, int decompid, const
PIO_Offset recnum,
float *buf);
int PIOc_get_vard_double(int ncid, int varid, int decompid, const
PIO_Offset recnum,
double *buf);
int PIOc_get_vard_uchar(int ncid, int varid, int decompid, const
PIO_Offset recnum,
unsigned char *buf);
int PIOc_get_vard_ushort(int ncid, int varid, int decompid, const
PIO_Offset recnum,
unsigned short *buf);
int PIOc_get_vard_uint(int ncid, int varid, int decompid, const
PIO_Offset recnum,
unsigned int *buf);
int PIOc_get_vard_longlong(int ncid, int varid, int decompid,
const PIO_Offset recnum,
long long *buf);
int PIOc_get_vard_ulonglong(int ncid, int varid, int decompid,
const PIO_Offset recnum,
unsigned long long *buf);
/* Data writes - vard. */
int PIOc_put_vard(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const void *buf);
int PIOc_put_vard_text(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const char *op);
int PIOc_put_vard_schar(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const signed char *op);
int PIOc_put_vard_short(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const short *op);
int PIOc_put_vard_int(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const int *op);
int PIOc_put_vard_float(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const float *op);
int PIOc_put_vard_double(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const double *op);
int PIOc_put_vard_uchar(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const unsigned char *op);
int PIOc_put_vard_ushort(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const unsigned short *op);
int PIOc_put_vard_uint(int ncid, int varid, int decompid, const
PIO_Offset recnum,
const unsigned int *op);
int PIOc_put_vard_longlong(int ncid, int varid, int decompid,
const PIO_Offset recnum,
const long long *op);
int PIOc_put_vard_ulonglong(int ncid, int varid, int decompid,
const PIO_Offset recnum,
const unsigned long long *op);
Improved Function Nomenclature
- The PIOc_free_iosystem() function has been added as a duplicate of
PIOc_finalize(), which has been deprecated and de-emphasized in the docs.
(See #1463 <https://github.com/NCAR/ParallelIO/issues/1463>).
Changes in Memory Use
- This release contains changes to cause many internal PIO maps to be
stored on the heap, not the stack. This will prevent stack overflow. This
work is not yet complete, a workaround is to increase the stack allocation
when running PIO programs. (See #1341
<https://github.com/NCAR/ParallelIO/issues/1341>)
Documentation
- Documentation has been updated. (See #1219
<https://github.com/NCAR/ParallelIO/issues/1219>).
Bug fixes
- Passing in a negative component count to PIOc_init_async() causes a
memory error, instead of returning an error code. This has been fixed. (See
#1414 <https://github.com/NCAR/ParallelIO/pull/1414>).
More Tests
- Travis build has been changed to require warning-free doxygen build
for all PRs.
- Changes have been made to performance tests tests/cunit/test_perf2.c
and test_async_perf.c as part of an effort to benchmark PIO on several HPC
systems.
Required Libraries
We recommend always using the latest releases of netCDF and pnetcdf.
This release requires:
- netcdf-4.6.1 or newer.
- pnetcdf-1.9.0 or newer (unless PIO is built without pnetcdf support).
- If netCDF is built with HDF5 support, then HDF5-1.10.4 is required.
Previous versions of HDF5 have a bug in parallel collective I/O which is
triggered by a PIO unit test.