diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 58933635a0..01362183ea 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,7 +51,7 @@ jobs: timeout-minutes: 120 steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - name: Install autotools run: | diff --git a/.github/workflows/netcdf4_adios.yml b/.github/workflows/netcdf4_adios.yml index cbeb4e89bd..8aabeb15c4 100644 --- a/.github/workflows/netcdf4_adios.yml +++ b/.github/workflows/netcdf4_adios.yml @@ -53,7 +53,7 @@ jobs: timeout-minutes: 120 steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - name: Install autotools run: | diff --git a/DEVELOPER_NOTES.md b/DEVELOPER_NOTES.md index b73b595e01..15a82563a6 100644 --- a/DEVELOPER_NOTES.md +++ b/DEVELOPER_NOTES.md @@ -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: ``` @@ -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. diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 112da4eb4a..90a844402c 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -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) diff --git a/sneak_peek.md b/sneak_peek.md index f5661396d0..48a8c77dc1 100644 --- a/sneak_peek.md +++ b/sneak_peek.md @@ -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 @@ -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 @@ -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