1.15.0.md
July 1, 2026 ยท View on GitHub
PnetCDF Version 1.15.0 Release Notes (July 1, 2026)
-
New feature
- Intra-node aggregation for read requests is added. This is the complement
to the write counterpart first added to version 1.14.0. Now the intra-node
aggregation feature supports both write and read operations. This feature
can be enabled by setting hint
nc_num_aggrs_per_nodeto the desired number of aggregators per compute node.
- Intra-node aggregation for read requests is added. This is the complement
to the write counterpart first added to version 1.14.0. Now the intra-node
aggregation feature supports both write and read operations. This feature
can be enabled by setting hint
-
New optimization
- When creating a new file on the Lustre file system, PnetCDF will try to set
the Lustre file striping count to the number of compute nodes (NUMA nodes)
allocated to the MPI communicator passed to the call of
ncmpi_create(). See the section of "New PnetCDF Hints" below for more information.
- When creating a new file on the Lustre file system, PnetCDF will try to set
the Lustre file striping count to the number of compute nodes (NUMA nodes)
allocated to the MPI communicator passed to the call of
-
New I/O driver
- A submodule named "GIO" has been added as the PnetCDF's default I/O driver.
PnetCDF has been using MPI-IO as its only I/O driver since its first
release. With the GIO driver, PnetCDF users now have an additional option
to tune the performance. GIO is a parallel I/O library, sharing the design
concept of the MPI-IO. GIO implements several performance improvement, such
as:
- automatically sets
cb_nodesbased on the number of compute nodes and number of MPI processes running per node. - supports hint
cb_buffer_sizeto be a multiple of file striping unit size for Lustre. - supports Lustre overstriping through hint
overstriping_ratio. See the "New PnetCDF hints" section below.
- automatically sets
- A submodule named "GIO" has been added as the PnetCDF's default I/O driver.
PnetCDF has been using MPI-IO as its only I/O driver since its first
release. With the GIO driver, PnetCDF users now have an additional option
to tune the performance. GIO is a parallel I/O library, sharing the design
concept of the MPI-IO. GIO implements several performance improvement, such
as:
-
New configure options
--disable-giodisables the GIO driver and uses MPI-IO. The default is to enable using the GIO driver.
-
APIs deprecated
- The "vard" family APIs introduced in version 1.6.0 are now deprecated.
These are the APIs that take an argument of MPI derived data type
describing the file access layout, which is used to set the fileview
through a call to
MPI_File_set_view(). The deprecation is because direct file access can be a security risk and error prone.- ncmpi_get_vard()
- ncmpi_get_vard_all()
- ncmpi_put_vard()
- ncmpi_put_vard_all()
- The "vard" family APIs introduced in version 1.6.0 are now deprecated.
These are the APIs that take an argument of MPI derived data type
describing the file access layout, which is used to set the fileview
through a call to
-
API semantics updates
- API
ncmpi_inq_header_size()now can be called in the define mode. This API returns the file header size with metadata defined by the time of the call. The inquired file header size can be helpful to pick proper values for argumentsh_minfree,v_align,v_minfree,r_alignwhen calling APIncmpi__enddef()which can allow to preserve a sufficiently large free space for file header extent and variable data sections to grow later without moving data already stored in the file, i.e. when adding new variables, dimensions, or attributes. See PR #201.
- API
-
New error code
NC_EDRIVERindicates an invalid PnetCDF I/O driver is set in I/O hint,nc_driver. The current valid drivers are "gio" and "mpiio".NC_EFSTYPEindicates a PnetCDF internal error when an invalid file system type is detected.NC_EFILEVIEWindicates a PnetCDF internal error when creating an MPI fileview whose offsets violate the MPI standard requirement of being in a monotonically non-decreasing order.
-
New PnetCDF hints
nc_data_move_chunk_size-- When adding new data objects into an existing file, the data sections may need to be moved to a higher file offset. The movement is performed in chunks. This hint allows users to customized the chunk size. The default is 1048576 bytes, i.e. 1 MiB. See PR #203.file_striping-- When creating a new file on the Lustre file system, this hint advises PnetCDF to set the new file's striping configuration. The hint value is either "auto" or "inherit". The default is "auto". The former sets the new file's striping unit size to 1 MiB and striping count to the number of compute nodes found in the MPI communicator passed to the call ofncmpi_create(). The latter sets the striping to inherit the new file's parent folder's settings, if the folder's striping has been set. Note that if users also set the MPI-IO hintstriping_factororstriping_unit, then these MPI-IO hints will take a higher precedence. See PR #222.nc_driver-- To select an internal I/O driver. The value is either string "gio" or "mpiio". The default is "gio", which advises PnetCDF to use the GIO driver, an external library built as a sub-module of PnetCDF. The other is "mpiio", advising PnetCDF to use the MPI-IO driver.overstriping_ratio-- This hint is passed to the GIO driver and instructs it to make use of Lustre's overstriping feature which allows to create a new file to have more than one stripe per OST. For instance, when hintsstriping_factorandoverstriping_ratioare set to 16 and 2, respectively, the newly created file will be striped across 16/2=8 OSTs. The advantage of Lustre overstriping is to allow a file's striping count to be larger than the total number of OTS available on the system.
-
New run-time environment variables
GIO_ONLY- when testing PnetCDF by running commandmake checkandmake ptest, setting this environment variable will run all the tests using the default GIO driver and skip MPI-IO driver. Without setting this environment variable, the default is to test both I/O drivers. Note this environment variable only affect when testing PnetCDF and takes no effect on PnetCDF library itself.
-
Build recipes
doc/NERSC.md- note for building PnetCDF on machines at NERSCdoc/ALCF.md- note for building PnetCDF on machines at ALCF
-
Updated utility programs
pnetcdf_version- add information about MPI compiler vendors, supported MPI standard version, names of base compilers, and LMOD PrgEnv module loaded if available.ncmpidiffnow will error out when the two input file names are identical.
-
Other updates:
- Running
make checkandmake ptesttakes much longer time to complete. This is because the testing mechanism has been revised to become more thorough than before.
- Running
-
Bug fixes
- Fix problem of building PnetCDF shared library when using NVIDIA HPC compilers, nvc, nvc++, and nvfortran.
- Fix data movement when new record variables are added to an existing file that does not change the starting offset of record variable section. See PR #199.
-
New I/O benchmarks
- benchmarks/C/indep_data_obj_create.c - It evaluates the performance of creating a large number of data objects (dimensions and variables) in an output file. This benchmark is used in a paper published in the PDSW Workshop of SC 2025. DOI: 10.1145/3731599.3767512
-
New test programs
- test/testcases/tst_grow_data.c -- It tests the case when adding new variables by re-entering the define mode multiple time without causing the file header extent to grow. It also tests a case when adding a new record variable that does not change the starting offset of the record variable section in the file.