This source file includes following definitions.
- ADIOI_GEN_SetInfo
1
2
3
4
5
6
7
8 #include "adio.h"
9 #include "adio_extern.h"
10 #include "hint_fns.h"
11
12 void ADIOI_GEN_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
13 {
14
15
16
17
18
19
20 MPI_Info info;
21 char *value;
22 int flag, nprocs=0, len;
23 int ok_to_override_cb_nodes=0;
24 static char myname[] = "ADIOI_GEN_SETINFO";
25
26
27
28
29
30 if (fd->hints->initialized && fd->info == MPI_INFO_NULL) {
31 *error_code = MPI_SUCCESS;
32 return;
33 }
34
35 if (fd->info == MPI_INFO_NULL) MPI_Info_create(&(fd->info));
36 info = fd->info;
37
38 MPI_Comm_size(fd->comm, &nprocs);
39
40
41
42
43
44 value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
45 if (value == NULL) {
46 *error_code = MPIO_Err_create_code(*error_code,
47 MPIR_ERR_RECOVERABLE,
48 myname,
49 __LINE__,
50 MPI_ERR_OTHER,
51 "**nomem2",0);
52 return;
53 }
54
55
56
57
58 if (!fd->hints->initialized) {
59
60
61 ADIOI_Info_set(info, "cb_buffer_size", ADIOI_CB_BUFFER_SIZE_DFLT);
62 fd->hints->cb_buffer_size = atoi(ADIOI_CB_BUFFER_SIZE_DFLT);
63
64
65
66
67 ADIOI_Info_set(info, "romio_cb_read", "automatic");
68 fd->hints->cb_read = ADIOI_HINT_AUTO;
69 ADIOI_Info_set(info, "romio_cb_write", "automatic");
70 fd->hints->cb_write = ADIOI_HINT_AUTO;
71
72 fd->hints->cb_config_list = NULL;
73
74
75 ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
76 ADIOI_Info_set(info, "cb_nodes", value);
77 fd->hints->cb_nodes = nprocs;
78
79
80 ADIOI_Info_set(info, "romio_no_indep_rw", "false");
81 fd->hints->no_indep_rw = 0;
82
83
84 ADIOI_Info_set(info, "romio_cb_pfr", "disable");
85 fd->hints->cb_pfr = ADIOI_HINT_DISABLE;
86
87
88 ADIOI_Info_set(info, "romio_cb_fr_types", "aar");
89 fd->hints->cb_fr_type = ADIOI_FR_AAR;
90
91
92 ADIOI_Info_set(info, "romio_cb_fr_alignment", "1");
93 fd->hints->cb_fr_alignment = 1;
94
95
96
97 ADIOI_Info_set(info, "romio_cb_ds_threshold", "0");
98 fd->hints->cb_ds_threshold = 0;
99
100
101 ADIOI_Info_set(info, "romio_cb_alltoall", "automatic");
102 fd->hints->cb_alltoall = ADIOI_HINT_AUTO;
103
104
105 fd->hints->deferred_open = 0;
106
107
108 ADIOI_Info_set(info, "ind_rd_buffer_size", ADIOI_IND_RD_BUFFER_SIZE_DFLT);
109 fd->hints->ind_rd_buffer_size = atoi(ADIOI_IND_RD_BUFFER_SIZE_DFLT);
110
111
112 ADIOI_Info_set(info, "ind_wr_buffer_size", ADIOI_IND_WR_BUFFER_SIZE_DFLT);
113 fd->hints->ind_wr_buffer_size = atoi(ADIOI_IND_WR_BUFFER_SIZE_DFLT);
114
115
116
117
118 ADIOI_Info_set(info, "romio_ds_read", "automatic");
119 fd->hints->ds_read = ADIOI_HINT_AUTO;
120 ADIOI_Info_set(info, "romio_ds_write", "automatic");
121 fd->hints->ds_write = ADIOI_HINT_AUTO;
122
123
124
125 fd->hints->min_fdomain_size = 0;
126 fd->hints->striping_unit = 0;
127
128 fd->hints->initialized = 1;
129
130
131
132
133
134 ok_to_override_cb_nodes = 1;
135
136 }
137
138
139 if (users_info != MPI_INFO_NULL) {
140 ADIOI_Info_check_and_install_int(fd, users_info, "cb_buffer_size",
141 &(fd->hints->cb_buffer_size), myname, error_code);
142
143
144
145 ADIOI_Info_check_and_install_int(fd, users_info, "romio_cb_fr_alignment",
146 &(fd->hints->cb_fr_alignment), myname, error_code);
147
148
149
150
151 ADIOI_Info_check_and_install_int(fd, users_info, "romio_cb_ds_threshold",
152 &(fd->hints->cb_ds_threshold), myname, error_code);
153
154 ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_cb_alltoall",
155 &(fd->hints->cb_alltoall), myname, error_code);
156
157
158
159
160 ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_cb_read",
161 &(fd->hints->cb_read), myname, error_code);
162 if (fd->hints->cb_read == ADIOI_HINT_DISABLE) {
163
164 ADIOI_Info_set(info, "romio_no_indep_rw", "false");
165 fd->hints->no_indep_rw = ADIOI_HINT_DISABLE;
166 }
167
168 ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_cb_write",
169 &(fd->hints->cb_write), myname, error_code);
170 if (fd->hints->cb_write == ADIOI_HINT_DISABLE) {
171
172 ADIOI_Info_set(info, "romio_no_indep_rw", "false");
173 fd->hints->no_indep_rw = ADIOI_HINT_DISABLE;
174 }
175
176
177
178 ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_cb_pfr",
179 &(fd->hints->cb_pfr), myname, error_code);
180
181
182
183
184
185 ADIOI_Info_check_and_install_int(fd, users_info, "romio_cb_fr_type",
186 &(fd->hints->cb_fr_type), myname, error_code);
187
188
189 ADIOI_Info_check_and_install_true(fd, users_info, "romio_no_indep_rw",
190 &(fd->hints->no_indep_rw), myname, error_code);
191 if (fd->hints->no_indep_rw == 1) {
192
193
194
195 ADIOI_Info_set(info, "romio_cb_write", "enable");
196 ADIOI_Info_set(info, "romio_cb_read", "enable");
197 fd->hints->cb_read = 1;
198 fd->hints->cb_write = 1;
199 }
200
201
202
203 ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_ds_read",
204 &(fd->hints->ds_read), myname, error_code);
205 ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_ds_write",
206 &(fd->hints->ds_write), myname, error_code);
207
208 if (ok_to_override_cb_nodes) {
209
210
211
212 ADIOI_Info_check_and_install_int(fd, users_info, "cb_nodes",
213 &(fd->hints->cb_nodes), myname, error_code);
214 if ((fd->hints->cb_nodes <= 0) || (fd->hints->cb_nodes > nprocs)) {
215
216
217
218 ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
219 ADIOI_Info_set(info, "cb_nodes", value);
220 fd->hints->cb_nodes = nprocs;
221 }
222 }
223
224 ADIOI_Info_check_and_install_int(fd, users_info, "ind_wr_buffer_size",
225 &(fd->hints->ind_wr_buffer_size), myname, error_code);
226 ADIOI_Info_check_and_install_int(fd, users_info, "ind_rd_buffer_size",
227 &(fd->hints->ind_rd_buffer_size), myname, error_code);
228
229 if (fd->hints->cb_config_list == NULL) {
230
231
232
233
234
235
236
237
238 ADIOI_Info_check_and_install_str(fd, users_info, "cb_config_list",
239 &(fd->hints->cb_config_list), myname, error_code);
240
241 }
242 ADIOI_Info_check_and_install_int(fd, users_info, "romio_min_fdomain_size",
243 &(fd->hints->min_fdomain_size), myname, error_code);
244
245
246
247 ADIOI_Info_check_and_install_int(fd, users_info, "striping_unit",
248 &(fd->hints->striping_unit), myname, error_code);
249 }
250
251
252
253
254
255
256
257 if (fd->hints->cb_config_list == NULL) {
258 ADIOI_Info_set(info, "cb_config_list", ADIOI_CB_CONFIG_LIST_DFLT);
259 len = (strlen(ADIOI_CB_CONFIG_LIST_DFLT)+1) * sizeof(char);
260 fd->hints->cb_config_list = ADIOI_Malloc(len);
261 if (fd->hints->cb_config_list == NULL) {
262 ADIOI_Free(value);
263 *error_code = MPIO_Err_create_code(*error_code,
264 MPIR_ERR_RECOVERABLE,
265 myname,
266 __LINE__,
267 MPI_ERR_OTHER,
268 "**nomem2",0);
269 return;
270 }
271 ADIOI_Strncpy(fd->hints->cb_config_list, ADIOI_CB_CONFIG_LIST_DFLT, len);
272 }
273
274
275
276
277 if ( ( (fd->hints->cb_read != ADIOI_HINT_DISABLE) \
278 && (fd->hints->cb_write != ADIOI_HINT_DISABLE)\
279 && fd->hints->no_indep_rw ) ) {
280 fd->hints->deferred_open = 1;
281 } else {
282
283
284
285
286 ADIOI_Info_set(info, "romio_no_indep_rw", "false");
287 fd->hints->no_indep_rw = 0;
288 fd->hints->deferred_open = 0;
289 }
290
291 if (ADIO_Feature(fd, ADIO_DATA_SIEVING_WRITES) == 0) {
292
293
294 ADIOI_Info_get(info, "ind_wr_buffer_size", MPI_MAX_INFO_VAL,
295 value, &flag);
296 if (flag) {
297
298 ADIOI_Info_delete(info, "ind_wr_buffer_size");
299 }
300
301
302
303 ADIOI_Info_set(info, "romio_ds_write", "disable");
304 fd->hints->ds_write = ADIOI_HINT_DISABLE;
305 }
306
307 ADIOI_Free(value);
308
309 *error_code = MPI_SUCCESS;
310 }