Skip to content

Commit 1265d01

Browse files
committed
add note about PR 173 and clarification for hint precedence
1 parent 202ab83 commit 1265d01

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

sneak_peek.md

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,47 @@ This is essentially a placeholder for the next release note ...
9090
* Issues related to Darshan library:
9191
+ none
9292

93-
* Clarifications
94-
+ none
93+
* Clarifications about of PnetCDF hints
94+
+ There are three ways in PnetCDF for user to set hints to align the starting
95+
file offset for the data section (header extent) and record variable
96+
section.
97+
1. through a call to API `nc_header_align_size` by setting arguments of
98+
`h_minfree`, `v_align`, `v_minfree`, and `r_align`.
99+
2. through an MPI info object passed to calls of `ncmpi_create()` and
100+
`ncmpi_open()`. Hints are `nc_header_align_size`, `nc_var_align_size`,
101+
and `nc_record_align_size`.
102+
3. through a run-time environment variable `PNETCDF_HINTS`. Hints are
103+
`nc_header_align_size`, `nc_var_align_size`, and `nc_record_align_size`.
104+
+ As the same hints may be set by one or more of the above methods, PnetCDF
105+
implements the following hint precedence.
106+
* `PNETCDF_HINTS` > `ncmpi__enddef()` > `MPI info`.
107+
* 1st priority: hints set in the environment variable `PNETCDF_HINTS`, e.g.
108+
`PNETCDF_HINTS="nc_var_align_size=1048576"`. Making this the first
109+
priority is because it allows to run the same application executable
110+
without source code modification using different alignment settings
111+
through a run-time environment variable.
112+
* 2nd priority: hints set in the MPI info object passed to calls of
113+
`ncmpi_create()` and `ncmpi_open()`, e.g.
114+
`MPI_Info_set("nc_var_align_size", "1048576");`. The reasoning is when a
115+
3rd-party library built on top of PnetCDF implements its codes using
116+
'ncmpi__enddef'. An application that uses such 3rd-party library can pass
117+
an MPI info object to it, which further passes the info to PnetCDF. This
118+
precedence allows that application to exercise different hints without
119+
changing the 3rd-party library's source codes.
120+
* 3rd priority: hints used in the arguments of `ncmpi__enddef()`, e.g.
121+
`ncmpi__enddef(..., v_align=1048576,...)`.
122+
+ PnetCDF I/O hint `nc_header_align_size` is essentially the same as hint
123+
`nc_var_align_size`, but its name appears to be closer to the hint's
124+
intent, i.e. to reserve some space for the header growth in the future when
125+
new data objects are added. Please note when both hints are set, only hint
126+
`nc_var_align_size` will take effect and `nc_header_align_size` ignored.
127+
+ When there is no fix-sized variable (i.e. non-record variable) defined,
128+
argument `v_minfree` passed to `ncmpi__enddef()` is ignored. In this
129+
case, users should set `h_minfree`, if an extra header space is desired.
130+
+ When there is no fix-sized variables defined and none of hints
131+
`nc_header_align_size`, `nc_var_align_size`, or argument `v_align` is set,
132+
`nc_record_align_size` or `r_align`, if set, will be used to align the
133+
header extent.
134+
+ For the above update to the hint precedence, see
135+
PnetCDF See [PR #173](https://github.com/Parallel-NetCDF/PnetCDF/pull/173).
95136

0 commit comments

Comments
 (0)