Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
timeout-minutes: 120

steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4

- name: Install autotools
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/netcdf4_adios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
timeout-minutes: 120

steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4

- name: Install autotools
run: |
Expand Down
8 changes: 8 additions & 0 deletions DEVELOPER_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,12 @@
git tag -a checkpoint.1.11.0 -m "Checkpoint right before 1.11.0 release"
git push origin checkpoint.1.11.0
```
FYI. When needed, one can `force` update a tag (local and remote):
```
git tag -fa checkpoint.1.11.0
git push -f origin checkpoint.1.11.0
```

11. Generate SHA1 checksums
* Run command:
```
Expand All @@ -172,6 +178,8 @@
sha256sum pnetcdf-1.11.0.tar.gz
a18a1a43e6c4fd7ef5827dbe90e9dcf1363b758f513af1f1356ed6c651195a9f pnetcdf-1.11.0.tar.gz
```
* The above commands can also be used to verify the SHA numbers.

12. Update PnetCDF Web Page
* https://github.com/Parallel-NetCDF/Parallel-NetCDF.github.io
* Create a new file of release note Parallel-NetCDF.github.io/Release_notes/1.11.0.md.
Expand Down
132 changes: 131 additions & 1 deletion RELEASE_NOTES
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,143 @@ Version _PNETCDF_VERSION_ (_PNETCDF_RELEASE_DATE_)
-------------------------------------

* 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_node` to the desired
number of aggregators per compute node.

* 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.

* 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_nodes` based on the number of compute nodes and
number of MPI processes running per node.
* supports hint `cb_buffer_size` to be a multiple of file striping unit
size for Lustre.
* supports Lustre overstriping through hint `overstriping_ratio`. See the
"New PnetCDF hints" section below.

* New configure options
+ `--disable-gio` disables the GIO driver and uses MPI-IO. The default is to
enable using the GIO driver.

* Configure option updates:
+ none

* 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()

* API deprecated
* 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 arguments `h_minfree`, `v_align`, `v_minfree`, `r_align` when calling
API `ncmpi__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](https://github.com/Parallel-NetCDF/PnetCDF/pull/201).

* New error code
+ `NC_EDRIVER` indicates an invalid PnetCDF I/O driver is set in I/O hint,
`nc_driver`. The current valid drivers are "gio" and "mpiio".
+ `NC_EFSTYPE` indicates a PnetCDF internal error when an invalid file system
type is detected.
+ `NC_EFILEVIEW` indicates 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](https://github.com/Parallel-NetCDF/PnetCDF/pull/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 of
`ncmpi_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 hint `striping_factor` or `striping_unit`,
then these MPI-IO hints will take a higher precedence.
See [PR #222](https://github.com/Parallel-NetCDF/PnetCDF/pull/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 hints
`striping_factor` and `overstriping_ratio` are 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 command `make check` and `make
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 NERSC
+ `doc/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.
+ `ncmpidiff` now will error out when the two input file names are identical.

* Other updates:
+ Running `make check` and `make ptest` takes much longer time to complete.
This is because the testing mechanism has been revised to become more
thorough than before.

* 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](https://github.com/Parallel-NetCDF/PnetCDF/pull/199).

* New example programs
+ none

* 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.

-------------------------------------
Version 1.14.1 (July 31, 2025)
Expand Down
118 changes: 15 additions & 103 deletions sneak_peek.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,19 @@ This is essentially a placeholder for the next release note ...
------------------------------------------------------------------------------

* 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_node` to the desired
number of aggregators per compute node.
+ none

* 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.
+ none

* 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_nodes` based on the number of compute nodes and
number of MPI processes running per node.
* supports hint `cb_buffer_size` to be a multiple of file striping unit
size for Lustre.
* supports Lustre overstriping through hint `overstriping_ratio`. See the
"New PnetCDF hints" section below.
+ none

* New Limitations
+ none

* New configure options
+ `--disable-gio` disables the GIO driver and uses MPI-IO. The default is to
enable using the GIO driver.
+ none

* Configure option updates:
+ none
Expand All @@ -46,29 +27,13 @@ This is essentially a placeholder for the next release note ...
+ none

* 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()
+ none

* API syntax changes
+ none

* 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 arguments `h_minfree`, `v_align`, `v_minfree`, `r_align` when calling
API `ncmpi__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](https://github.com/Parallel-NetCDF/PnetCDF/pull/201).
+ none

* New error code precedence
+ none
Expand All @@ -77,87 +42,34 @@ This is essentially a placeholder for the next release note ...
+ none

* New error code
+ `NC_EDRIVER` indicates an invalid PnetCDF I/O driver is set in I/O hint,
`nc_driver`. The current valid drivers are "gio" and "mpiio".
+ `NC_EFSTYPE` indicates a PnetCDF internal error when an invalid file system
type is detected.
+ `NC_EFILEVIEW` indicates a PnetCDF internal error when creating an MPI
fileview whose offsets violate the MPI standard requirement of being in a
monotonically non-decreasing order.
+ none

* 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](https://github.com/Parallel-NetCDF/PnetCDF/pull/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 of
`ncmpi_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 hint `striping_factor` or `striping_unit`,
then these MPI-IO hints will take a higher precedence.
See [PR #222](https://github.com/Parallel-NetCDF/PnetCDF/pull/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 hints
`striping_factor` and `overstriping_ratio` are 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.
+ none

* New run-time environment variables
+ `GIO_ONLY` - when testing PnetCDF by running command `make check` and `make
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.
+ none

* Build recipes
+ `doc/NERSC.md` - note for building PnetCDF on machines at NERSC
+ `doc/ALCF.md` - note for building PnetCDF on machines at ALCF
+ none

* 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.
+ `ncmpidiff` now will error out when the two input file names are identical.
+ none

* Other updates:
+ Running `make check` and `make ptest` takes much longer time to complete.
This is because the testing mechanism has been revised to become more
thorough than before.
+ none

* 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](https://github.com/Parallel-NetCDF/PnetCDF/pull/199).
+ none

* New example programs
+ none

* 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
+ none

* 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.
+ none

* Issues with NetCDF library
+ none
Expand Down