Skip to content

Commit ccdb039

Browse files
committed
move conetnst of sneak_peek.md into RELEASE_NOTES
1 parent c6ce1ea commit ccdb039

File tree

2 files changed

+189
-292
lines changed

2 files changed

+189
-292
lines changed

RELEASE_NOTES

Lines changed: 177 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,21 @@ Version _PNETCDF_VERSION_ (_PNETCDF_RELEASE_DATE_)
77
-------------------------------------
88

99
* New features
10-
+ Flexible APIs now can be used as high-level APIs, when argument bufcount
11-
is NC_COUNT_IGNORE and buftype is an MPI predefined data type. See
12-
[PR #82](https://github.com/Parallel-NetCDF/PnetCDF/pull/82). Below is an
13-
example of writing from a memory buffer of type float.
10+
+ A single read/write request made by an MPI process is now allowed to be of
11+
size larger than 2 GiB. Such large requests will be passed to the MP-IO
12+
library. This feature makes use of "the large count feature" introduced in
13+
MPI standard 4.0, which includes `MPI_XXX_c` APIs whose arguments are of
14+
type `MPI_Count`. `MPI_Count` can be an 8-byte integer type, enabling large
15+
MPI operations. As some MPI libraries today have begun implementing MPI
16+
4.0, PnetCDF now can rely on the MPI libraries to support large single
17+
requests. When the MPI library used to build PnetCDF does not support large
18+
requests, the MPI errors are returned. Because of this change, the PnetCDF
19+
configure option `--enable-large-single-req` is thus deprecated.
20+
See [PR #131](https://github.com/Parallel-NetCDF/PnetCDF/pull/131)
21+
+ Flexible APIs now can operate as high-level APIs, when argument `bufcount`
22+
is set to `NC_COUNT_IGNORE` and `buftype` is set to an MPI predefined data
23+
type. See [PR #82](https://github.com/Parallel-NetCDF/PnetCDF/pull/82).
24+
Below is a write example from a buffer of type float.
1425
```
1526
ncmpi_put_vara_all(ncid, varid, start, count, buf, NC_COUNT_IGNORE, MPI_FLOAT);
1627
```
@@ -19,131 +30,218 @@ Version _PNETCDF_VERSION_ (_PNETCDF_RELEASE_DATE_)
1930
ncmpi_put_vara_float_all(ncid, varid, start, count, buf);
2031
```
2132

33+
* New Limitations
34+
+ Hint `nc_header_read_chunk_size`, introduced in version 1.4.0, is now
35+
limited to `NC_MAX_INT`. As PnetCDF reads file header in chunks, this hint
36+
can be used to customize the chunk size. The default is 256 KB.
37+
See [4209056](https://github.com/Parallel-NetCDF/PnetCDF/commit/4209056e9a66465421f7ce9f1b44518923638b04)
38+
2239
* Configure options
23-
+ `--disable-file-sync` is now deprecated. This configure option alone does
24-
not provide a sufficient data consistency. Users are suggested to call
25-
`ncmpi_sync` and `MPI_Barrier` to achieve a desired consistency.
26-
+ `--enable-install-examples` to install example programs under folder
27-
`${prefix}/pnetcdf_examples` along with run script files. An example is
28-
`${prefix}/pnetcdf_examples/C/run_c_examples.sh`. The default of this
29-
option is `disabled`.
40+
+ `--enable-large-single-req` is deprecated and removed, as PnetCDF now
41+
allows a single reqd/write request of size larger than 2 GiB.
42+
+ `--disable-file-sync` is deprecated and removed. This configure option
43+
alone was not able to provide a sufficient data consistency. Users are
44+
suggested to call `ncmpi_sync` and `MPI_Barrier` to achieve a desired
45+
consistency, as suggested by MPI standard.
46+
+ A new option `--enable-install-examples` installs the example programs
47+
under folder `${prefix}/pnetcdf_examples` along with run script files. An
48+
example is `${prefix}/pnetcdf_examples/C/run_c_examples.sh`. The default of
49+
this option is `disabled`.
50+
See [PR #91](https://github.com/Parallel-NetCDF/PnetCDF/pull/91)
3051
+ Add three new environment variables `SEQ_CFLAGS`, `SEQ_LDFLAGS` and
3152
`SEQ_LIBS` for setting the compile, link, and library flags, respectively
3253
to be used to build the sequential utility programs, i.e. `cdfdiff`,
3354
`ncoffsets`, `ncvalidator`, and `pnetcdf_version`.
3455
See [PR #122](https://github.com/Parallel-NetCDF/PnetCDF/pull/122)
3556

3657
* Configure updates:
37-
+ Upgrade config.guess config.sub to 2024-01-01.
58+
+ Upgrade `config.guess` and `config.sub` to 2024-01-01.
3859
See [PR #116](https://github.com/Parallel-NetCDF/PnetCDF/pull/116)
3960
+ FLASH-IO benchmark - add compile flag "-fallow-argument-mismatch" for GNU
4061
Fortran 10 and later.
4162
See [PR #114](https://github.com/Parallel-NetCDF/PnetCDF/pull/114)
42-
+ Handle the case when MPICC env is not set and "--with-mpi" is not used.
43-
See commit 6142135.
44-
+ Upgrade autotools version requirement to autoconf 2.71, automake 1.16.5, and
45-
libtool 2.4.6.
63+
+ Handle the case when MPICC environment variable is not set and `--with-mpi`
64+
is not used. See commit
65+
[6142135](https://github.com/Parallel-NetCDF/PnetCDF/commit/61421356ecd38878a4ef46771ed6520d4257251f)
66+
+ Upgrade Autotools version requirement to autoconf 2.71, automake 1.16.5, and
67+
libtool 2.4.6. (Note this change affects PnetCDF developers only.)
4668
See [PR #95](https://github.com/Parallel-NetCDF/PnetCDF/pull/95)
4769
Thanks to Blaise Bourdin for pointing out in
4870
[Issue #94](https://github.com/Parallel-NetCDF/PnetCDF/issues/94)
4971
that configure failed when using Intel OneAPI 2022.2.0 compilers. The fix
5072
is to use autoconf 2.70 and newer.
5173

5274
* New constants
53-
+ NC_COUNT_IGNORE - This is used in flexible APIs. When argument bufcount is
54-
NC_COUNT_IGNORE, buftype must be a predefine MPI datatype and the APIs
55-
operate as the high-level APIs. Fortran equivalents are NF_COUNT_IGNORE and
56-
NF90_COUNT_IGNORE.
75+
+ `NC_COUNT_IGNORE` - This is used in flexible APIs. When argument `bufcount`
76+
is `NC_COUNT_IGNORE`, `buftype` must be a predefine MPI datatype and the
77+
APIs operate as the high-level APIs. Fortran equivalents are
78+
`NF_COUNT_IGNORE` and `NF90_COUNT_IGNORE`.
79+
See [PR #92](https://github.com/Parallel-NetCDF/PnetCDF/pull/92)
5780

5881
* API semantics updates
59-
+ File open flag NC_SHARE is now deprecated. It is still defined, but takes
82+
+ File open flag `NC_SHARE` is now deprecated. It is still defined, but takes
6083
no effect.
61-
+ NC_SHARE alone is not sufficient to provide data consistency for accessing
62-
a shared file in parallel and thus is now deprecated. Because PnetCDF
63-
follows the MPI file consistency, which only addresses the case when all
64-
file accesses are relative to a specific file handle created from a
65-
collective open, NC_SHARE becomes invalid. See doc/README.consistency.md
66-
for more information.
67-
68-
* New PnetCDF hint
69-
+ nc_header_collective -- to instruct PnetCDF to call MPI collective APIs to
70-
read and write the file header. The default is "false", meaning the file
71-
header is only read/written by rank 0, using MPI independent read and write
72-
APIs. When set to "true", collective APIs will be used with all other
73-
processes making zero-size requests. See
74-
[PR #104](https://github.com/Parallel-NetCDF/PnetCDF/pull/104).
75-
76-
* Updated utility program
77-
+ ncvalidator - When the file size is larger and smaller than expected, the
78-
file may still be a valid netCDF file.
79-
* When larger, this can happen if opening an existing file that contains no
80-
variable. Deleting a global attribute reduces the file header size. The
81-
file is still a valid netCDF file.
82-
[PR #99](https://github.com/Parallel-NetCDF/PnetCDF/pull/99) detects
83-
this mismatch and truncates the file size to the header size.
84-
* When smaller, this can happen if the last variable is partially written.
85-
The expected file size is calculated based on the full sizes of all
86-
variables. The file is still a valid netCDF file.
87-
* In the former case, PR #99 changes ncvalidator to report a warning,
88-
rather than an error.
89-
+ ncvalidator - Add printing of the dimension size of a variable when its
90-
size is larger than the limitation allowed by the file format. See commit
91-
5584d44.
84+
See [PR #119](https://github.com/Parallel-NetCDF/PnetCDF/pull/119)
85+
+ `NC_SHARE` alone is not sufficient to provide data consistency for accessing
86+
a shared file in parallel and thus is now deprecated. PnetCDF follows the
87+
file consistency defined in MPI standard, which only addresses the case
88+
when all file accesses are relative to a specific file handle created from
89+
a collective open, and thus `NC_SHARE` becomes invalid. See
90+
doc/README.consistency.md for more information.
91+
92+
* New PnetCDF hints
93+
+ `nc_hash_size_dim` sets the hash table size for dimension names.
94+
Default: 256
95+
+ `nc_hash_size_var` sets the hash table size for variable names.
96+
Default: 256
97+
+ `nc_hash_size_gattr` sets the hash table size for global attribute names.
98+
Default: 64
99+
+ `nc_hash_size_vattr` sets the hash table size for variable attribute names.
100+
Default: 8
101+
+ The above 4 new hints can be used to set different hash table sizes for
102+
dimensions, variables, and attributes. Hashing tables are used for quick
103+
data object name lookup. It can be useful for files containing a large
104+
number of dimensions, variables, and attributes. For instance, when the
105+
number of variables to be defined is large and the number of attributes per
106+
variable is small, increasing the value of `nc_hash_size_var` can speed up
107+
the variable definition and inquiring time. On the other hand, setting a
108+
smaller value for hint `nc_hash_size_vattr` can reduce memory footprint.
109+
See [PR #132](https://github.com/Parallel-NetCDF/PnetCDF/pull/132).
110+
111+
* Updated utility programs
112+
+ `ncvalidator` - When the file size is larger or smaller than what is
113+
calculated based on the metadata stored in the file header, the file may
114+
still be a valid netCDF file.
115+
* The larger-than-expected case can happen if opening an existing file that
116+
contains no variable. Deleting a global attribute already defined in the
117+
file will reduce the file header size. In this case, the file is still a
118+
valid netCDF file. Such mismatch will be detected and the file size
119+
truncated to the header size.
120+
See [PR #99](https://github.com/Parallel-NetCDF/PnetCDF/pull/99)
121+
* The smaller-than-expected case can happen if the last variable is
122+
partially written. The expected file size is calculated based on the full
123+
sizes of all variables. In this case, the file is still a valid netCDF
124+
file, and `ncvalidator` will report a warning, rather than an error.
125+
* Print the dimension size of a variable on stdout when its size is larger
126+
than the limitation allowed by the file format. See commit
127+
[5584d44](https://github.com/Parallel-NetCDF/PnetCDF/commit/5584d44a433a68966b0be601e7a73e939c695dbf)
92128
+ Add file src/utils/README.md which gives short descriptions of the utility
93129
programs and collapsible bullets to display their manual pages.
94130

95131
* Other updates:
96-
+ Use unsigned int to do byte swap.
132+
+ When file header extent size grows, PnetCDF now uses a movement unit per
133+
process of size up to 64 MiB.
134+
See [PR #137](https://github.com/Parallel-NetCDF/PnetCDF/pull/137)
135+
+ Since version 1.1.0, PnetCDF has been using file striping size, if
136+
obtainable from the MPI-IO hint `striping_unit`, to align the starting file
137+
offset of the data section. This offset is also referred to as the file
138+
header extent, which can be larger than the header size to allow header to
139+
grow when new data objects are added. Starting from this release, file
140+
stripe size is no longer used for setting the starting offset of the data
141+
section. This is because automatically setting file header extent using the
142+
file striping size may grow the file header unexpectedly when adding new
143+
objects to an existing file.
144+
See [PR #124](https://github.com/Parallel-NetCDF/PnetCDF/pull/124) and
145+
[PR #125](https://github.com/Parallel-NetCDF/PnetCDF/pull/125).
146+
+ Use unsigned int to perform byte swap.
97147
See [PR #113](https://github.com/Parallel-NetCDF/PnetCDF/pull/113).
98148
+ Silence Intel icc compilation warnings: when CFLAGS contains
99149
"-Wimplicit-const-int-float-conversion" and "-Wstringop-overread".
100150
See [PR #110](https://github.com/Parallel-NetCDF/PnetCDF/pull/110).
151+
+ In all previous PnetCDF's implementations, file header is always written/
152+
read by rank 0 using MPI independent APIs. This can nullify ROMIO hint
153+
`romio_no_indep_rw` if set by the user. To warrant no independent read/
154+
write user hint, PnetCDF now checks hint `romio_no_indep_rw` and if set to
155+
`true`, then all file header I/Os are made through MPI collective I/O
156+
calls, where only rank 0 makes non-zero length requests while all others
157+
zero length (in order to participate the collective calls). See
158+
[PR #104](https://github.com/Parallel-NetCDF/PnetCDF/pull/104) and
159+
[PR #138](https://github.com/Parallel-NetCDF/PnetCDF/pull/138).
101160
+ In all prior versions, the file name was checked whether it contains
102161
character ':'. The prefix name ending with ':' is considered by ROMIO as
103162
the file system type name. The prefix name, if found, is then stripped, so
104-
the file name can be used in the successive POSIX function calls. However,
163+
the file name can be used in the POSIX function calls internally. However,
105164
the prefix was not checked against the file system type names recognized
106165
by ROMIO. Starting from this release, the prefix is checked against the
107166
known file system type names to ROMIO. If the prefix is not one of the
108167
recognized types, e.g. "ufs", "nfs", "xfs", "pvfs2", "gpfs", "panfs",
109168
"lustre", "daos", "testfs", "ime", or "quobyte", then the prefix name is
110-
not stripped. This change is for in case when the file name contains ':',
111-
but it is not for specifying the file system type.
112-
See [PR #79](https://github.com/Parallel-NetCDF/PnetCDF/pull/79).
169+
not stripped. This change is for the case when the file name contains ':',
170+
but it is not for specifying the file system type. See
171+
[PR #79](https://github.com/Parallel-NetCDF/PnetCDF/pull/79) and
172+
[MPICH PR 5951](https://github.com/pmodels/mpich/pull/5951).
113173

114174
* Bug fixes
115-
+ Fix Fortran APIs internal call to nfmpi_inq_buffer_size.
175+
+ Return I/O hints that are actually used. See commit
176+
[0dcf628](https://github.com/Parallel-NetCDF/PnetCDF/commit/0dcf6284106e42faa5e8fb9ab1aa5d52917ff892).
177+
+ Fix residual values of `v_align` and `r_align` when re-entering the define
178+
mode multiple times.
179+
See [PR #126](https://github.com/Parallel-NetCDF/PnetCDF/pull/126).
180+
+ Fix Fortran API `nf90mpi_Inq_buffer_size` which should call
181+
`nfmpi_inq_buffer_size` internally.
116182
See [PR #111](https://github.com/Parallel-NetCDF/PnetCDF/pull/111).
117-
+ Fix ncmpi_inq_num_rec_vars and ncmpi_inq_num_fix_vars when opening an
118-
existing file. See
183+
+ Fix `ncmpi_inq_num_rec_vars()` and `ncmpi_inq_num_fix_vars()` when opening
184+
an existing file. See
119185
[PR #103](https://github.com/Parallel-NetCDF/PnetCDF/pull/103).
120-
+ ncmpidiff - when checking the dimensions defined in the second files
121-
whether they are defined in the first file. See 88cd9c1.
122-
+ Use Fortran subroutine Get_Environment_Variable instead of getenv.
123-
See commit a0b8aca, b796759.
186+
+ `ncmpidiff` - when checking the dimensions defined in the second files
187+
whether are also defined in the first file. See commit
188+
[88cd9c1](https://github.com/Parallel-NetCDF/PnetCDF/commit/88cd9c187b9b3dc9018b066e905a10d0c74488f8).
189+
+ Use Fortran subroutine `Get_Environment_Variable` instead of `getenv` if it
190+
is available. See commits
191+
[a0b8aca](https://github.com/Parallel-NetCDF/PnetCDF/commit/a0b8acabc3bf7a7a35d878c9db2afb71942bb7a9), and
192+
[b796759](https://github.com/Parallel-NetCDF/PnetCDF/commit/b796759f5a8e1749e7c168e05fe1665a35e2a2a1).
124193

125194
* New test program
126-
+ test/testcases/tst_symlink.c - test NC_CLOBBER on a symbolic link.
127-
+ test/testcases/tst_del_attr.c - test delete attributes. See
195+
+ test/largefile/large_attr.c - tests attributes of size > 2 GiB.
196+
+ test/largefile/tst_hash_large_ndims.c - tests hashing performance when
197+
the number of dimensions is large.
198+
+ test/largefile/tst_hash_large_nvars.c - tests hashing performance when
199+
the number of variables is large.
200+
+ test/largefile/tst_hash_large_ngattr.c - tests hashing performance when
201+
the number of global attributes is large.
202+
+ test/largefile/large_header.c - tests file header size larger than 2 GiB.
203+
+ test/largefile/large_reqs.c - tests a single read/write request of size
204+
larger than 2 GiB.
205+
+ test/testcases/tst_redefine.c - tests multiple entries of `ncmpi__enddef`
206+
[PR #126](https://github.com/Parallel-NetCDF/PnetCDF/pull/126).
207+
+ test/testcases/tst_symlink.c - tests `NC_CLOBBER` on a symbolic link.
208+
+ test/testcases/tst_del_attr.c - tests delete attributes. See
128209
[PR #99](https://github.com/Parallel-NetCDF/PnetCDF/pull/99).
129-
+ test/testcases/test_get_varn.c - test get_varn API. See
210+
+ test/testcases/test_get_varn.c - tests `get_varn` API. See
130211
[PR #90](https://github.com/Parallel-NetCDF/PnetCDF/pull/90).
131-
+ test/testcases/flexible_var.c - test flexible var API
132-
+ test/testcases/flexible_api.f - test flexible API when bufcount == -1
133-
+ test/testcases/scalar.c - add tests for scalar variables using nonblocking
134-
APIs. See commit 07ff7b1
212+
+ test/testcases/flexible_var.c - tests flexible var API
213+
+ test/testcases/flexible_api.f - tests flexible API when `bufcount == -1`
214+
+ test/testcases/scalar.c - adds tests for scalar variables using nonblocking
215+
APIs. See commit
216+
[07ff7b1](https://github.com/search?q=repo%3AParallel-NetCDF%2FPnetCDF+07ff7b1&type=commits)
135217
+ test/nonblocking/test_bputf.f90, test/nonblocking/test_bputf77.f -
136-
add tests of APIs inq_buffer_usage and inq_buffer_size. See commit 94ce438
218+
add tests of APIs `inq_buffer_usage` and `inq_buffer_size`. See commit
219+
[94ce438](https://github.com/Parallel-NetCDF/PnetCDF/commit/94ce438262fe7fcade031dcae1a677a827549bb3)
137220

138221
* Clarifications
139-
+ Using NC_CLOBBER in ncmpi_create() can be expensive if the file already
140-
exists. If the existing file is a regular file, then PnetCDF will delete it
141-
with a call to unlink() first and re-created it later. Calling unlink() on
142-
may be expensive for some parallel file systems. If the existing file is a
143-
symbolic link, then PnetCDF will call truncate() or MPI_File_set_size() to
144-
truncate the file size to zero. Calling truncate() may also be very
222+
+ Hints `nc_header_align_size` and `nc_record_align_size` are to align the
223+
file header extent and starting file offset of the record variable section,
224+
respectively.
225+
+ Hint `nc_record_align_size` is not to align the offsets of individual
226+
record variables.
227+
+ Prior to version 1.13.0, hint `nc_var_align_size` is used to align the
228+
starting file offsets of individual fixed-size variables. This design was
229+
to reduce file lock contention in MPI collective I/O operations. Beginning
230+
from this release (version 1.13.0), this hint is used to align only the
231+
starting file offset of the entire data section, not individual variables.
232+
The reason of such change is because PnetCDF nonblocking APIs can aggregate
233+
multiple I/O requests and MPI-IO today has been optimized to align I/O to
234+
file striping boundaries, which makes aligning starting offsets of
235+
individual variables less effective and may create large empty space in the
236+
file.
237+
+ Using `NC_CLOBBER` in `ncmpi_create()` can be expensive if the file already
238+
exists. When the existing file is a regular file, PnetCDF will delete it
239+
with a call to `unlink()` first and re-created it. Calling `unlink()` may
240+
be expensive for some parallel file systems. When the existing file is a
241+
symbolic link, PnetCDF will call `truncate()` or `MPI_File_set_size()` to
242+
truncate the file size to zero. Calling `truncate()` may also be very
145243
expensive on some file systems, e.g. Lustre. Sporadically a long time spent
146-
on unlink() and truncate() was observed on Perlmutter.
244+
on `unlink()` and `truncate()` was observed on Perlmutter at NERSC.
147245

148246
-------------------------------------
149247
Version 1.12.3 (February 21, 2022)

0 commit comments

Comments
 (0)