Version 2.4.3
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 Release
Added 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).
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)
Documentation
- Documentation has been updated. (See #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).
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.