Skip to content

Commit 4dde314

Browse files
committed
new release of 1.13.0
1 parent ddba8f9 commit 4dde314

3 files changed

Lines changed: 248 additions & 1 deletion

File tree

Release/pnetcdf-1.13.0.tar.gz

2.28 MB
Binary file not shown.

Release_notes/1.13.0.md

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
[PnetCDF](https://parallel-netcdf.github.io) Version 1.13.0 Release Notes (March 29, 2024)
2+
------------------------------------------------------------------------------
3+
4+
* New features
5+
+ A single read/write request made by an MPI process is now allowed to be of
6+
size larger than 2 GiB. Such large requests will be passed to the MP-IO
7+
library. This feature makes use of "the large count feature" introduced in
8+
MPI standard 4.0, which includes `MPI_XXX_c` APIs whose arguments are of
9+
type `MPI_Count`. `MPI_Count` can be an 8-byte integer type, enabling large
10+
MPI operations. As some MPI libraries today have begun implementing MPI
11+
4.0, PnetCDF now can rely on the MPI libraries to support large single
12+
requests. When the MPI library used to build PnetCDF does not support large
13+
requests, the MPI errors are returned. Because of this change, the PnetCDF
14+
configure option `--enable-large-single-req` is thus deprecated.
15+
See [PR #131](https://github.com/Parallel-NetCDF/PnetCDF/pull/131)
16+
+ Flexible APIs now can operate as high-level APIs, when argument `bufcount`
17+
is set to `NC_COUNT_IGNORE` and `buftype` is set to an MPI predefined data
18+
type. See [PR #82](https://github.com/Parallel-NetCDF/PnetCDF/pull/82).
19+
Below is a write example from a buffer of type float.
20+
```
21+
ncmpi_put_vara_all(ncid, varid, start, count, buf, NC_COUNT_IGNORE, MPI_FLOAT);
22+
```
23+
is equivalent to
24+
```
25+
ncmpi_put_vara_float_all(ncid, varid, start, count, buf);
26+
```
27+
28+
* New Limitations
29+
+ Hint `nc_header_read_chunk_size`, introduced in version 1.4.0, is now
30+
limited to `NC_MAX_INT`. As PnetCDF reads file header in chunks, this hint
31+
can be used to customize the chunk size. The default is 256 KB.
32+
See [4209056](https://github.com/Parallel-NetCDF/PnetCDF/commit/4209056e9a66465421f7ce9f1b44518923638b04)
33+
34+
* Configure options
35+
+ `--enable-large-single-req` is deprecated and removed, as PnetCDF now
36+
allows a single reqd/write request of size larger than 2 GiB.
37+
+ `--disable-file-sync` is deprecated and removed. This configure option
38+
alone was not able to provide a sufficient data consistency. Users are
39+
suggested to call `ncmpi_sync` and `MPI_Barrier` to achieve a desired
40+
consistency, as suggested by MPI standard.
41+
+ A new option `--enable-install-examples` installs the example programs
42+
under folder `${prefix}/pnetcdf_examples` along with run script files. An
43+
example is `${prefix}/pnetcdf_examples/C/run_c_examples.sh`. The default of
44+
this option is `disabled`.
45+
See [PR #91](https://github.com/Parallel-NetCDF/PnetCDF/pull/91)
46+
+ Add three new environment variables `SEQ_CFLAGS`, `SEQ_LDFLAGS` and
47+
`SEQ_LIBS` for setting the compile, link, and library flags, respectively
48+
to be used to build the sequential utility programs, i.e. `cdfdiff`,
49+
`ncoffsets`, `ncvalidator`, and `pnetcdf_version`.
50+
See [PR #122](https://github.com/Parallel-NetCDF/PnetCDF/pull/122)
51+
52+
* Configure updates:
53+
+ Upgrade `config.guess` and `config.sub` to 2024-01-01.
54+
See [PR #116](https://github.com/Parallel-NetCDF/PnetCDF/pull/116)
55+
+ FLASH-IO benchmark - add compile flag "-fallow-argument-mismatch" for GNU
56+
Fortran 10 and later.
57+
See [PR #114](https://github.com/Parallel-NetCDF/PnetCDF/pull/114)
58+
+ Handle the case when MPICC environment variable is not set and `--with-mpi`
59+
is not used. See commit
60+
[6142135](https://github.com/Parallel-NetCDF/PnetCDF/commit/61421356ecd38878a4ef46771ed6520d4257251f)
61+
+ Upgrade Autotools version requirement to autoconf 2.71, automake 1.16.5, and
62+
libtool 2.4.6. (Note this change affects PnetCDF developers only.)
63+
See [PR #95](https://github.com/Parallel-NetCDF/PnetCDF/pull/95)
64+
Thanks to Blaise Bourdin for pointing out in
65+
[Issue #94](https://github.com/Parallel-NetCDF/PnetCDF/issues/94)
66+
that configure failed when using Intel OneAPI 2022.2.0 compilers. The fix
67+
is to use autoconf 2.70 and newer.
68+
69+
* New constants
70+
+ `NC_COUNT_IGNORE` - This is used in flexible APIs. When argument `bufcount`
71+
is `NC_COUNT_IGNORE`, `buftype` must be a predefine MPI datatype and the
72+
APIs operate as the high-level APIs. Fortran equivalents are
73+
`NF_COUNT_IGNORE` and `NF90_COUNT_IGNORE`.
74+
See [PR #92](https://github.com/Parallel-NetCDF/PnetCDF/pull/92)
75+
76+
* API semantics updates
77+
+ File open flag `NC_SHARE` is now deprecated. It is still defined, but takes
78+
no effect.
79+
See [PR #119](https://github.com/Parallel-NetCDF/PnetCDF/pull/119)
80+
+ `NC_SHARE` alone is not sufficient to provide data consistency for accessing
81+
a shared file in parallel and thus is now deprecated. PnetCDF follows the
82+
file consistency defined in MPI standard, which only addresses the case
83+
when all file accesses are relative to a specific file handle created from
84+
a collective open, and thus `NC_SHARE` becomes invalid. See
85+
doc/README.consistency.md for more information.
86+
87+
* New PnetCDF hints
88+
+ `nc_hash_size_dim` sets the hash table size for dimension names.
89+
Default: 256
90+
+ `nc_hash_size_var` sets the hash table size for variable names.
91+
Default: 256
92+
+ `nc_hash_size_gattr` sets the hash table size for global attribute names.
93+
Default: 64
94+
+ `nc_hash_size_vattr` sets the hash table size for variable attribute names.
95+
Default: 8
96+
+ The above 4 new hints can be used to set different hash table sizes for
97+
dimensions, variables, and attributes. Hashing tables are used for quick
98+
data object name lookup. It can be useful for files containing a large
99+
number of dimensions, variables, and attributes. For instance, when the
100+
number of variables to be defined is large and the number of attributes per
101+
variable is small, increasing the value of `nc_hash_size_var` can speed up
102+
the variable definition and inquiring time. On the other hand, setting a
103+
smaller value for hint `nc_hash_size_vattr` can reduce memory footprint.
104+
See [PR #132](https://github.com/Parallel-NetCDF/PnetCDF/pull/132).
105+
106+
* Updated utility programs
107+
+ `ncvalidator` - When the file size is larger or smaller than what is
108+
calculated based on the metadata stored in the file header, the file may
109+
still be a valid netCDF file.
110+
* The larger-than-expected case can happen if opening an existing file that
111+
contains no variable. Deleting a global attribute already defined in the
112+
file will reduce the file header size. In this case, the file is still a
113+
valid netCDF file. Such mismatch will be detected and the file size
114+
truncated to the header size.
115+
See [PR #99](https://github.com/Parallel-NetCDF/PnetCDF/pull/99)
116+
* The smaller-than-expected case can happen if the last variable is
117+
partially written. The expected file size is calculated based on the full
118+
sizes of all variables. In this case, the file is still a valid netCDF
119+
file, and `ncvalidator` will report a warning, rather than an error.
120+
* Print the dimension size of a variable on stdout when its size is larger
121+
than the limitation allowed by the file format. See commit
122+
[5584d44](https://github.com/Parallel-NetCDF/PnetCDF/commit/5584d44a433a68966b0be601e7a73e939c695dbf)
123+
+ Add file src/utils/README.md which gives short descriptions of the utility
124+
programs and collapsible bullets to display their manual pages.
125+
126+
* Other updates:
127+
+ When file header extent size grows, PnetCDF now uses a movement unit per
128+
process of size up to 64 MiB.
129+
See [PR #137](https://github.com/Parallel-NetCDF/PnetCDF/pull/137)
130+
+ Since version 1.1.0, PnetCDF has been using file striping size, if
131+
obtainable from the MPI-IO hint `striping_unit`, to align the starting file
132+
offset of the data section. This offset is also referred to as the file
133+
header extent, which can be larger than the header size to allow header to
134+
grow when new data objects are added. Starting from this release, file
135+
stripe size is no longer used for setting the starting offset of the data
136+
section. This is because automatically setting file header extent using the
137+
file striping size may grow the file header unexpectedly when adding new
138+
objects to an existing file.
139+
See [PR #124](https://github.com/Parallel-NetCDF/PnetCDF/pull/124) and
140+
[PR #125](https://github.com/Parallel-NetCDF/PnetCDF/pull/125).
141+
+ Use unsigned int to perform byte swap.
142+
See [PR #113](https://github.com/Parallel-NetCDF/PnetCDF/pull/113).
143+
+ Silence Intel icc compilation warnings: when CFLAGS contains
144+
"-Wimplicit-const-int-float-conversion" and "-Wstringop-overread".
145+
See [PR #110](https://github.com/Parallel-NetCDF/PnetCDF/pull/110).
146+
+ In all previous PnetCDF's implementations, file header is always written/
147+
read by rank 0 using MPI independent APIs. This can nullify ROMIO hint
148+
`romio_no_indep_rw` if set by the user. To warrant no independent read/
149+
write user hint, PnetCDF now checks hint `romio_no_indep_rw` and if set to
150+
`true`, then all file header I/Os are made through MPI collective I/O
151+
calls, where only rank 0 makes non-zero length requests while all others
152+
zero length (in order to participate the collective calls). See
153+
[PR #104](https://github.com/Parallel-NetCDF/PnetCDF/pull/104) and
154+
[PR #138](https://github.com/Parallel-NetCDF/PnetCDF/pull/138).
155+
+ In all prior versions, the file name was checked whether it contains
156+
character ':'. The prefix name ending with ':' is considered by ROMIO as
157+
the file system type name. The prefix name, if found, is then stripped, so
158+
the file name can be used in the POSIX function calls internally. However,
159+
the prefix was not checked against the file system type names recognized
160+
by ROMIO. Starting from this release, the prefix is checked against the
161+
known file system type names to ROMIO. If the prefix is not one of the
162+
recognized types, e.g. "ufs", "nfs", "xfs", "pvfs2", "gpfs", "panfs",
163+
"lustre", "daos", "testfs", "ime", or "quobyte", then the prefix name is
164+
not stripped. This change is for the case when the file name contains ':',
165+
but it is not for specifying the file system type. See
166+
[PR #79](https://github.com/Parallel-NetCDF/PnetCDF/pull/79) and
167+
[MPICH PR 5951](https://github.com/pmodels/mpich/pull/5951).
168+
169+
* Bug fixes
170+
+ Return I/O hints that are actually used. See commit
171+
[0dcf628](https://github.com/Parallel-NetCDF/PnetCDF/commit/0dcf6284106e42faa5e8fb9ab1aa5d52917ff892).
172+
+ Fix residual values of `v_align` and `r_align` when re-entering the define
173+
mode multiple times.
174+
See [PR #126](https://github.com/Parallel-NetCDF/PnetCDF/pull/126).
175+
+ Fix Fortran API `nf90mpi_Inq_buffer_size` which should call
176+
`nfmpi_inq_buffer_size` internally.
177+
See [PR #111](https://github.com/Parallel-NetCDF/PnetCDF/pull/111).
178+
+ Fix `ncmpi_inq_num_rec_vars()` and `ncmpi_inq_num_fix_vars()` when opening
179+
an existing file. See
180+
[PR #103](https://github.com/Parallel-NetCDF/PnetCDF/pull/103).
181+
+ `ncmpidiff` - when checking the dimensions defined in the second files
182+
whether are also defined in the first file. See commit
183+
[88cd9c1](https://github.com/Parallel-NetCDF/PnetCDF/commit/88cd9c187b9b3dc9018b066e905a10d0c74488f8).
184+
+ Use Fortran subroutine `Get_Environment_Variable` instead of `getenv` if it
185+
is available. See commits
186+
[a0b8aca](https://github.com/Parallel-NetCDF/PnetCDF/commit/a0b8acabc3bf7a7a35d878c9db2afb71942bb7a9), and
187+
[b796759](https://github.com/Parallel-NetCDF/PnetCDF/commit/b796759f5a8e1749e7c168e05fe1665a35e2a2a1).
188+
189+
* New test program
190+
+ test/largefile/large_attr.c - tests attributes of size > 2 GiB.
191+
+ test/largefile/tst_hash_large_ndims.c - tests hashing performance when
192+
the number of dimensions is large.
193+
+ test/largefile/tst_hash_large_nvars.c - tests hashing performance when
194+
the number of variables is large.
195+
+ test/largefile/tst_hash_large_ngattr.c - tests hashing performance when
196+
the number of global attributes is large.
197+
+ test/largefile/large_header.c - tests file header size larger than 2 GiB.
198+
+ test/largefile/large_reqs.c - tests a single read/write request of size
199+
larger than 2 GiB.
200+
+ test/testcases/tst_redefine.c - tests multiple entries of `ncmpi__enddef`
201+
[PR #126](https://github.com/Parallel-NetCDF/PnetCDF/pull/126).
202+
+ test/testcases/tst_symlink.c - tests `NC_CLOBBER` on a symbolic link.
203+
+ test/testcases/tst_del_attr.c - tests delete attributes. See
204+
[PR #99](https://github.com/Parallel-NetCDF/PnetCDF/pull/99).
205+
+ test/testcases/test_get_varn.c - tests `get_varn` API. See
206+
[PR #90](https://github.com/Parallel-NetCDF/PnetCDF/pull/90).
207+
+ test/testcases/flexible_var.c - tests flexible var API
208+
+ test/testcases/flexible_api.f - tests flexible API when `bufcount == -1`
209+
+ test/testcases/scalar.c - adds tests for scalar variables using nonblocking
210+
APIs. See commit
211+
[07ff7b1](https://github.com/search?q=repo%3AParallel-NetCDF%2FPnetCDF+07ff7b1&type=commits)
212+
+ test/nonblocking/test_bputf.f90, test/nonblocking/test_bputf77.f -
213+
add tests of APIs `inq_buffer_usage` and `inq_buffer_size`. See commit
214+
[94ce438](https://github.com/Parallel-NetCDF/PnetCDF/commit/94ce438262fe7fcade031dcae1a677a827549bb3)
215+
216+
* Clarifications
217+
+ Hints `nc_header_align_size` and `nc_record_align_size` are to align the
218+
file header extent and starting file offset of the record variable section,
219+
respectively.
220+
+ Hint `nc_record_align_size` is not to align the offsets of individual
221+
record variables.
222+
+ Prior to version 1.13.0, hint `nc_var_align_size` is used to align the
223+
starting file offsets of individual fixed-size variables. This design was
224+
to reduce file lock contention in MPI collective I/O operations. Beginning
225+
from this release (version 1.13.0), this hint is used to align only the
226+
starting file offset of the entire data section, not individual variables.
227+
The reason of such change is because PnetCDF nonblocking APIs can aggregate
228+
multiple I/O requests and MPI-IO today has been optimized to align I/O to
229+
file striping boundaries, which makes aligning starting offsets of
230+
individual variables less effective and may create large empty space in the
231+
file.
232+
+ Using `NC_CLOBBER` in `ncmpi_create()` can be expensive if the file already
233+
exists. When the existing file is a regular file, PnetCDF will delete it
234+
with a call to `unlink()` first and re-created it. Calling `unlink()` may
235+
be expensive for some parallel file systems. When the existing file is a
236+
symbolic link, PnetCDF will call `truncate()` or `MPI_File_set_size()` to
237+
truncate the file size to zero. Calling `truncate()` may also be very
238+
expensive on some file systems, e.g. Lustre. Sporadically a long time spent
239+
on `unlink()` and `truncate()` was observed on Perlmutter at NERSC.
240+

wiki/Download.html

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<center> <h2>PnetCDF Source Code Downloads</h2> </center>
4343
<br>
4444

45-
The latest stable release of <a href="../index.html">PnetCDF</a> is version 1.12.3.
45+
The latest stable release of <a href="../index.html">PnetCDF</a> is version 1.13.0.
4646
<p>
4747
We encourage PnetCDF users to use the latest released version. If for some
4848
reason you would like to try out older versions, below is a table of (most of)
@@ -56,6 +56,13 @@
5656
<th>Size</th>
5757
<th>SHA-1 Checksum</th>
5858
</tr>
59+
<tr>
60+
<td align=center>March 29, 2024</td>
61+
<td align=center><a href=https://github.com/Parallel-NetCDF/Parallel-NetCDF.github.io/blob/master/Release_notes/1.13.0.md>1.13.0</a></td>
62+
<td><a href="../Release/pnetcdf-1.13.0.tar.gz" onClick="var that=this; ga('send', 'event', 'PnetCDF', 'Source Download (GZ)', 'pnetcdf-1.13.0.tar.gz', 1); ga('pnetcdfTracker.send', 'event', 'PnetCDF', 'Source Download (GZ)', 'pnetcdf-1.13.0.tar.gz', 1); ga('parallelnetcdfTracker.send', 'event', 'PnetCDF', 'Source Download (GZ)', 'pnetcdf-1.13.0.tar.gz', 1); setTimeout(function(){location.href=that.href;},500); return false;">pnetcdf-1.13.0.tar.gz</a></td>
63+
<td>2.3 MB</td>
64+
<td>b108c9794702836396459f89d93515a3d856d703</td>
65+
</tr>
5966
<tr>
6067
<td align=center>February 21, 2022</td>
6168
<td align=center><a href=https://github.com/Parallel-NetCDF/Parallel-NetCDF.github.io/blob/master/Release_notes/1.12.3.md>1.12.3</a></td>

0 commit comments

Comments
 (0)