@@ -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