SIONlib  2.0.0-rc.3
Scalable I/O library for parallel access to task-local files
sion_mpi_gen.c
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2021 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
10 #define _XOPEN_SOURCE 700
11 
12 #ifdef SION_MPI
13 
14 #include <assert.h>
15 #include <mpi.h>
16 #include <stdint.h>
17 #include <stdio.h>
18 #include <stdlib.h>
19 
20 #include "sion_const.h"
21 #include "sion_debug.h"
22 #include "sion_enums.h"
23 #include "sion_error_handler.h"
24 #include "sion_flags.h"
25 #include "sion_generic.h"
26 #include "sion_generic_internal.h"
27 #include "sion_internal.h"
28 #include "sion_mpi.h"
29 #include "sion_mpi_cb_gen.h"
30 #include "sion_mpi_internal_gen.h"
31 
32 int _sion_mpi_api_aid = -1;
33 
34 int sion_parclose_mpi(int sid)
35 {
36  int rc = 0;
37 
38  DPRINTFP((1, "sion_parclose_mpi", _SION_DEFAULT_RANK, "enter parallel close of sid %d\n", sid));
39 
40  rc = sion_generic_parclose(sid);
41 
42  DPRINTFP((1, "sion_parclose_mpi", _SION_DEFAULT_RANK, "leave parallel close of sid %d rc=%d\n", sid, rc));
43 
44  return rc;
45 }
46 
47 int sion_parreinit_mpi(int sid, int64_t chunksize)
48 {
49  int rc = 0;
50 
51  DPRINTFP((1, "sion_parreinit_mpi", _SION_DEFAULT_RANK, "enter parallel reinit of sid %d\n", sid));
52 
53  rc = sion_generic_parreinit(sid, chunksize);
54 
55  DPRINTFP((1, "sion_parreinit_mpi", _SION_DEFAULT_RANK, "leave parallel reinit of sid %d rc=%d\n", sid, rc));
56 
57  return rc;
58 }
59 
60 int sion_paropen_mapped_mpi(char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, int *nlocaltasks,
61  int **globalranks, int64_t **chunksizes, int **mapping_filenrs, int **mapping_lranks, int32_t *fsblksize, FILE **fileptr)
62 {
63  int sid;
64  _sion_flags_store *flags_store = _sion_parse_flags(file_mode);
65  if (!flags_store) {
66  return _sion_errorprint_mpi(SION_ID_NOT_VALID, _SION_ERROR_RETURN,
67  "sion_paropen_mapped_mpi: could not parse file mode in %s, aborting ...\n", file_mode);
68  }
69  sid = _sion_paropen_mapped_mpi(fname, flags_store, numFiles, gComm, nlocaltasks, globalranks, chunksizes, mapping_filenrs,
70  mapping_lranks, fsblksize, fileptr);
71  _sion_flags_destroy_store(&flags_store);
72  return sid;
73 }
74 
75 int _sion_paropen_mapped_mpi(char *fname, const _sion_flags_store *flags_store, int *numFiles, MPI_Comm gComm, int *nlocaltasks,
76  int **globalranks, int64_t **chunksizes, int **mapping_filenrs, int **mapping_lranks, int32_t *fsblksize, FILE **fileptr)
77 {
78  int sid = SION_ID_UNDEF;
79  int gtasks, gRank;
80  _mpi_api_commdata *gen_gcomm;
81 
82  MPI_Comm_size(gComm, &gtasks);
83  MPI_Comm_rank(gComm, &gRank);
84 
85  DPRINTFP((1, "sion_paropen_mapped_mpi", gRank, "enter parallel open of file %s\n", fname));
86 
87  /* check parameters */
88  if (numFiles == NULL) {
89  return _sion_errorprint_mpi(SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mapped_mpi: No numFiles variable given");
90  }
91 
92  /* register callbacks for generic interface */
93  if (_sion_mpi_api_aid < 0) {
94  _sion_mpi_api_aid = _sion_register_callbacks_mpi();
95  }
96 
97  if (flags_store->mask & _SION_FMODE_WRITE) {
98  /* file mode WRITE */
99 
100  if (*numFiles <= 0) {
101  return _sion_errorprint_mpi(SION_ID_NOT_VALID, _SION_ERROR_RETURN,
102  "sion_paropen_mapped_mpi: numFiles variable <= 0 not allowed for mapped files in write mode");
103  }
104  } else if (flags_store->mask & _SION_FMODE_READ) {
105  /* file mode READ */
106  /* nothing to do here so far, filenumbers and mapping will be determined by in generic routine */
107 
108  } else {
109  return _sion_errorprint_mpi(SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mapped_mpi: unknown file mode");
110  }
111 
112  /* create generic communicator container */
113  gen_gcomm = malloc(sizeof(_mpi_api_commdata));
114  if (gen_gcomm == NULL) {
115  return _sion_errorprint(SION_ID_NOT_VALID, _SION_ERROR_RETURN,
116  "cannot allocate mpi internal data structure of size %lu (_mpi_api_commdata), aborting ...\n",
117  (unsigned long)sizeof(_mpi_api_commdata));
118  }
119  gen_gcomm->comm = gComm;
120  gen_gcomm->commset = 1;
121  gen_gcomm->local = 0;
122  gen_gcomm->rank = gRank;
123  gen_gcomm->size = gtasks;
124  gen_gcomm->lcommgroup = NULL;
125 
126  // FIXME: re-enable output of file mode
127  // DPRINTFP((1, "sion_paropen_mapped_mpi", gRank, "enter parallel open of %d files (current name %s) in %s mode (sid=%d)\n", *numFiles, fname, file_mode, sid));
128  DPRINTFP(
129  (1, "sion_paropen_mapped_mpi", gRank, "enter parallel open of %d files (current name %s) (sid=%d)\n", *numFiles, fname, sid));
130  sid = _sion_generic_paropen_mapped(_sion_mpi_api_aid, fname, flags_store, numFiles, gen_gcomm, gRank, gtasks, nlocaltasks,
131  globalranks, chunksizes, mapping_filenrs, mapping_lranks, fsblksize, fileptr);
132  // FIXME: re-enable output of file mode
133  // DPRINTFP((1, "sion_paropen_mapped_mpi", gRank, "leave parallel open of %d files in %s mode #tasks=%d sid=%d\n", *numFiles, file_mode, *nlocaltasks, sid));
134  DPRINTFP(
135  (1, "sion_paropen_mapped_mpi", gRank, "leave parallel open of %d files #tasks=%d sid=%d\n", *numFiles, *nlocaltasks, sid));
136 
137  /* test return code from internal open */
138  if (sid == SION_ID_NOT_VALID) {
139  return _sion_errorprint_mpi(
140  SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mapped_mpi: invalid return code from internal open %d", sid);
141  }
142 
143  DPRINTFP((1, "sion_paropen_mapped_mpi", gRank, "leave parallel open of file %s sid=%d\n", fname, sid));
144 
145  return sid;
146 }
147 
148 int sion_paropen_mapped_mpi_with_options(const char *filename, sion_open_mode mode, int numfiles, MPI_Comm gcomm, int ntasks,
149  const int *globalranks, const int *filenumbers, const int *localranks, const sion_mpi_mapped_options *options_)
150 {
151  sion_mpi_mapped_options options = (options_) ? *options_ : SION_MPI_MAPPED_OPTIONS_INIT;
152 
153  int rank, size;
154  MPI_Comm_size(gcomm, &size);
155  MPI_Comm_rank(gcomm, &rank);
156 
157  DPRINTFP((1, "sion_paropen_mapped_mpi", rank, "enter parallel open of file %s\n", filename));
158 
159  /* register callbacks for generic interface */
160  if (_sion_mpi_api_aid < 0) {
161  _sion_mpi_api_aid = _sion_register_callbacks_mpi();
162  }
163 
164  if (mode == SION_OPEN_WRITE) {
165  /* file mode WRITE */
166 
167  if (numfiles <= 0) {
168  return _sion_errorprint_mpi(SION_ID_NOT_VALID, _SION_ERROR_RETURN,
169  "sion_paropen_mapped_mpi: numfiles variable <= 0 not allowed for mapped files in write mode");
170  }
171  } else if (mode == SION_OPEN_READ) {
172  /* file mode READ */
173  /* nothing to do here so far, filenumbers and mapping will be determined by in generic routine */
174 
175  } else {
176  return _sion_errorprint_mpi(SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mapped_mpi: unknown file mode");
177  }
178 
179  /* create generic communicator container */
180  _mpi_api_commdata *gen_gcomm = malloc(sizeof(_mpi_api_commdata));
181  if (gen_gcomm == NULL) {
182  return _sion_errorprint(SION_ID_NOT_VALID, _SION_ERROR_RETURN,
183  "cannot allocate mpi internal data structure of size %lu (_mpi_api_commdata), aborting ...\n",
184  (unsigned long)sizeof(_mpi_api_commdata));
185  }
186  *gen_gcomm = (_mpi_api_commdata){.comm = gcomm, .commset = 1, .local = 0, .rank = rank, .size = size, .lcommgroup = NULL};
187 
188  // FIXME: re-enable output of file mode
189  // DPRINTFP((1, "sion_paropen_mapped_mpi", rank, "enter parallel open of %d files (current name %s) in %s mode (sid=%d)\n", *numFiles, filename, file_mode, sid));
190  DPRINTFP((1, "sion_paropen_mapped_mpi", rank, "enter parallel open of %d files (current name %s)\n", numfiles, filename));
191  int sid = sion_generic_paropen_mapped_with_options(_sion_mpi_api_aid, filename, mode, numfiles, gen_gcomm, rank, size, ntasks,
192  globalranks, filenumbers, localranks, &options.generic_options);
193  // FIXME: re-enable output of file mode
194  // DPRINTFP((1, "sion_paropen_mapped_mpi", gRank, "leave parallel open of %d files in %s mode #tasks=%d sid=%d\n", *numFiles, file_mode, *nlocaltasks, sid));
195  DPRINTFP((1, "sion_paropen_mapped_mpi", rank, "leave parallel open of %d files #tasks=%d sid=%d\n", numfiles, ntasks, sid));
196 
197  /* test return code from internal open */
198  if (sid == SION_ID_NOT_VALID) {
199  return _sion_errorprint_mpi(
200  SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mapped_mpi: invalid return code from internal open %d", sid);
201  }
202 
203  DPRINTFP((1, "sion_paropen_mapped_mpi", rank, "leave parallel open of file %s sid=%d\n", filename, sid));
204 
205  return sid;
206 }
207 
208 int sion_parclose_mapped_mpi(int sid)
209 {
210  int rc = 0;
211 
212  DPRINTFP((1, "sion_parclose_mapped_mpi", _SION_DEFAULT_RANK, "enter parallel close of sid %d\n", sid));
213 
214  rc = sion_generic_parclose_mapped(sid);
215 
216  DPRINTFP((1, "sion_parclose_mapped_mpi", _SION_DEFAULT_RANK, "leave parallel close of sid %d rc=%d\n", sid, rc));
217 
218  return rc;
219 }
220 
222 {
223  sion_mpi_options *options = malloc(sizeof(sion_mpi_options));
224  if (options) {
225  *options = SION_MPI_OPTIONS_INIT;
226  }
227  return options;
228 }
229 
231 {
232  free(options);
233 }
234 
235 void sion_mpi_options_set_chunksize(sion_mpi_options *options, int64_t chunksize)
236 {
237  sion_generic_options_set_chunksize(&options->generic_options, chunksize);
238 }
239 
240 void sion_mpi_options_set_fsblksize(sion_mpi_options *options, int32_t fsblksize)
241 {
242  sion_generic_options_set_fsblksize(&options->generic_options, fsblksize);
243 }
244 
245 void sion_mpi_options_set_multifile_number(sion_mpi_options *options, int multifile_number)
246 {
247  options->multifile_mode = _SION_MPI_MULTIFILE_NUMBER;
248  options->multifile.number = multifile_number;
249 }
250 
251 void sion_mpi_options_set_multifile_communicator(sion_mpi_options *options, MPI_Comm multifile_communicator)
252 {
253  options->multifile_mode = _SION_MPI_MULTIFILE_COMMUNICATOR;
254  options->multifile.communicator = multifile_communicator;
255 }
256 
258 {
259  sion_generic_options_set_keyval_mode(&options->generic_options, keyval_mode);
260 }
261 
263 {
265 }
266 
267 void sion_mpi_options_set_buddylevel(sion_mpi_options *options, int32_t buddylevel)
268 {
269  sion_generic_options_set_buddylevel(&options->generic_options, buddylevel);
270 }
271 
273 {
275 }
276 
278 {
279  sion_generic_options_set_collective_size(&options->generic_options, size);
280 }
281 
283 {
284  sion_generic_options_set_collective_merge(&options->generic_options);
285 }
286 
288 {
289  sion_generic_options_set_lowlevel_api(&options->generic_options, lowlevel_api);
290 }
291 
293 {
294  sion_generic_options_set_endianness(&options->generic_options, endianness);
295 }
296 
298 {
299  sion_mpi_mapped_options *options = malloc(sizeof(sion_mpi_mapped_options));
300  if (options) {
301  *options = SION_MPI_MAPPED_OPTIONS_INIT;
302  }
303  return options;
304 }
305 
307 {
308  free(options);
309 }
310 
312 {
313  sion_generic_mapped_options_set_chunksizes(&options->generic_options, chunksizes);
314 }
315 
317 {
318  sion_generic_mapped_options_set_fsblksize(&options->generic_options, fsblksize);
319 }
320 
322 {
323  sion_generic_mapped_options_set_keyval_mode(&options->generic_options, keyval_mode);
324 }
325 
327 {
328  sion_generic_mapped_options_set_lowlevel_api(&options->generic_options, lowlevel_api);
329 }
330 
332 {
333  sion_generic_mapped_options_set_endianness(&options->generic_options, endianness);
334 }
335 
336 int sion_paropen_mpi(const char *filename, sion_open_mode mode, MPI_Comm communicator, const sion_mpi_options *options_)
337 {
338  sion_mpi_options options = (options_) ? *options_ : SION_MPI_OPTIONS_INIT;
339 
340  int gsize, grank;
341  MPI_Comm_size(communicator, &gsize);
342  MPI_Comm_rank(communicator, &grank);
343 
344  DPRINTFP((1, "sion_paropen_mpi", grank, "enter parallel open of file %s\n", filename));
345 
346  /* register callbacks for generic interface */
347  if (_sion_mpi_api_aid < 0) {
348  _sion_mpi_api_aid = _sion_register_callbacks_mpi();
349  }
350 
351  MPI_Comm lcomm;
352  int nfiles, filenumber, lrank, lsize;
353  if (mode == SION_OPEN_WRITE) {
354  switch (options.multifile_mode) {
355  int rc;
356  case _SION_MPI_MULTIFILE_COMMUNICATOR:
357  lcomm = options.multifile.communicator;
358  rc = _sion_get_info_from_splitted_comm_mpi(communicator, lcomm, &nfiles, &filenumber, &lrank, &lsize);
359  if (rc != SION_SUCCESS) {
360  return _sion_errorprint_mpi(
361  SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mpi: error in _sion_get_info_from_splitted_comm_mpi");
362  }
363  DPRINTFP((1, "sion_paropen_mpi", grank, "%d local communicators found\n", nfiles));
364  break;
365  case _SION_MPI_MULTIFILE_NUMBER: // FALLTHROUGH
366  default:
367  nfiles = options.multifile.number;
368  rc = _sion_gen_info_from_gcomm_mpi(nfiles, communicator, &filenumber, &lrank, &lsize);
369  if (rc != SION_SUCCESS) {
370  return _sion_errorprint_mpi(
371  SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mpi: error in _sion_gen_info_from_gcomm_mpi");
372  }
373  DPRINTFP((1, "sion_paropen_mpi", grank, "Global communicator divided in %d local communicators\n", nfiles));
374  }
375  } else if (mode == SION_OPEN_READ) {
376  if (options.generic_options.buddylevel > 0) {
377  // lcomm must be given for buddy checkpointing
378  // FIXME
379  assert(options.multifile_mode == _SION_MPI_MULTIFILE_COMMUNICATOR);
380  lcomm = options.multifile.communicator;
381  int rc = _sion_get_info_from_splitted_comm_mpi(communicator, lcomm, &nfiles, &filenumber, &lrank, &lsize);
382  if (rc != SION_SUCCESS) {
383  return _sion_errorprint_mpi(
384  SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mpi: error in _sion_get_info_from_splitted_comm_mpi");
385  }
386  DPRINTFP((1, "sion_paropen_mpi", grank, "%d local communicators found\n", nfiles));
387  } else {
388  lrank = lsize = -1; // will be set by sion_generic_paropen
389  }
390  } else {
391  return _sion_errorprint_mpi(SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mpi: unknown file mode");
392  }
393 
394  /* create generic communicator container */
395  _mpi_api_commdata *gen_gcomm = malloc(sizeof(_mpi_api_commdata));
396  if (!gen_gcomm) {
397  return _sion_errorprint(SION_ID_NOT_VALID, _SION_ERROR_RETURN,
398  "cannot allocate mpi internal data structure of size %lu (_mpi_api_commdata), aborting ...\n",
399  (unsigned long)sizeof(_mpi_api_commdata));
400  }
401  gen_gcomm->comm = communicator;
402  gen_gcomm->commset = 1;
403  gen_gcomm->local = 0;
404  gen_gcomm->rank = grank;
405  gen_gcomm->size = gsize;
406  gen_gcomm->lcommgroup = NULL;
407 
408  /* FIXME: add debug output for flags_store
409  DPRINTFP((1, "sion_paropen_mpi", grank, "enter parallel open of %d files (current name %s) in %s mode\n", nfiles, filename, file_mode)); */
410  DPRINTFP((1, "sion_paropen_mpi", grank, "enter parallel open of %d files (current name %s)\n", nfiles, filename));
411  int sid = sion_generic_paropen(
412  _sion_mpi_api_aid, filename, mode, gen_gcomm, grank, gsize, filenumber, nfiles, lrank, lsize, &options.generic_options);
413  /* FIXME: add debug output for flags_store
414  DPRINTFP((1, "sion_paropen_mpi", grank, "leave parallel open of %d files in %s mode #tasks=%d sid=%d\n", nfiles, file_mode, lSize, sid)); */
415  DPRINTFP((1, "sion_paropen_mpi", grank, "leave parallel open of %d files #tasks=%d sid=%d\n", nfiles, lsize, sid));
416 
417  /* test return code from internal open */
418  if (sid == SION_ID_NOT_VALID) {
419  return _sion_errorprint_mpi(
420  SION_ID_NOT_VALID, _SION_ERROR_RETURN, "sion_paropen_mpi: invalid return code from internal open %d", sid);
421  }
422 
423  DPRINTFP((1, "sion_paropen_mpi", grank, "leave parallel open of file %s sid=%d\n", filename, sid));
424 
425  return sid;
426 }
427 
428 /* end of ifdef MPI */
429 #endif
sion_open_mode
specifies for what type of access to open a file
Definition: sion_enums.h:45
sion_lowlevel_api
specifies a low-level API to use for file system access
Definition: sion_enums.h:29
sion_endianness
declares the endianness of user data written to a file
Definition: sion_enums.h:81
sion_keyval_mode
specifies whether to use SIONlib's key-value mechanism for accessing file content and if so in what m...
Definition: sion_enums.h:53
@ SION_OPEN_WRITE
open the file for writing only
Definition: sion_enums.h:49
@ SION_OPEN_READ
open the file for reading only
Definition: sion_enums.h:47
void sion_generic_mapped_options_set_endianness(sion_generic_mapped_options *options, sion_endianness endianness)
Set the endianness for the contents of a container.
Definition: sion_generic.c:438
void sion_generic_options_set_collective_size(sion_generic_options *options, int32_t size)
Enable collective I/O.
Definition: sion_generic.c:820
void sion_generic_options_set_fsblksize(sion_generic_options *options, int32_t fsblksize)
Set the file system block size to assume.
Definition: sion_generic.c:795
void sion_generic_mapped_options_set_lowlevel_api(sion_generic_mapped_options *options, sion_lowlevel_api lowlevel_api)
Set the low-level API to use for opening a container.
Definition: sion_generic.c:433
void sion_generic_mapped_options_set_chunksizes(sion_generic_mapped_options *options, int64_t *chunksizes)
Set the chunk size of all logical files opened by a task.
Definition: sion_generic.c:418
void sion_generic_options_set_collective_merge(sion_generic_options *options)
Use collective merging.
Definition: sion_generic.c:825
int sion_generic_paropen(int aid, const char *fname, sion_open_mode mode, void *gcommgroup, int grank, int gsize, int filenumber, int numfiles, int lrank, int lsize, const sion_generic_options *options_)
Open a SIONlib file through a generic interface.
Definition: sion_generic.c:843
void sion_generic_options_set_endianness(sion_generic_options *options, sion_endianness endianness)
Set the endianness for the contents of a container.
Definition: sion_generic.c:838
void sion_generic_options_set_chunksize(sion_generic_options *options, int64_t chunksize)
Set the chunk size of a logical file in the container.
Definition: sion_generic.c:790
void sion_generic_options_set_buddylevel(sion_generic_options *options, int32_t buddylevel)
Enable buddy checkpointing mechanism.
Definition: sion_generic.c:810
void sion_generic_mapped_options_set_fsblksize(sion_generic_mapped_options *options, int32_t fsblksize)
Set the file system block size to assume.
Definition: sion_generic.c:423
void sion_generic_options_set_lowlevel_api(sion_generic_options *options, sion_lowlevel_api lowlevel_api)
Set the low-level API to use for opening a container.
Definition: sion_generic.c:833
void sion_generic_mapped_options_set_keyval_mode(sion_generic_mapped_options *options, sion_keyval_mode keyval_mode)
Set the key-value mode to use for a container.
Definition: sion_generic.c:428
void sion_generic_options_set_keyval_mode(sion_generic_options *options, sion_keyval_mode keyval_mode)
Set the key-value mode to use for a container.
Definition: sion_generic.c:800
int sion_generic_parclose(int sid)
Close a SIONlib file.
Definition: sion_generic.c:362
void sion_mpi_mapped_options_set_lowlevel_api(sion_mpi_mapped_options *options, sion_lowlevel_api lowlevel_api)
Set the low-level API to use for opening a container.
Definition: sion_mpi_gen.c:326
void sion_mpi_mapped_options_set_endianness(sion_mpi_mapped_options *options, sion_endianness endianness)
Set the endianness for the contents of a container.
Definition: sion_mpi_gen.c:331
int sion_paropen_mpi(const char *filename, sion_open_mode mode, MPI_Comm communicator, const sion_mpi_options *options_)
Open a SIONlib file from multiple MPI processes.
Definition: sion_mpi_gen.c:336
void sion_mpi_mapped_options_delete(sion_mpi_mapped_options *options)
Delete an instance of sion_mpi_mapped_options
Definition: sion_mpi_gen.c:306
void sion_mpi_options_set_lowlevel_api(sion_mpi_options *options, sion_lowlevel_api lowlevel_api)
Set the low-level API to use for opening a container.
Definition: sion_mpi_gen.c:287
void sion_mpi_options_set_buddy(sion_mpi_options *options)
Enable buddy checkpointing mechanism.
Definition: sion_mpi_gen.c:262
void sion_mpi_mapped_options_set_fsblksize(sion_mpi_mapped_options *options, int32_t fsblksize)
Set the file system block size to assume.
Definition: sion_mpi_gen.c:316
sion_mpi_mapped_options * sion_mpi_mapped_options_new()
Allocates and initializes an instance of sion_mpi_mapped_options
Definition: sion_mpi_gen.c:297
void sion_mpi_options_set_multifile_communicator(sion_mpi_options *options, MPI_Comm multifile_communicator)
Create multiple physical files based on disjunct communicators.
Definition: sion_mpi_gen.c:251
void sion_mpi_mapped_options_set_keyval_mode(sion_mpi_mapped_options *options, sion_keyval_mode keyval_mode)
Set the key-value mode to use for a container.
Definition: sion_mpi_gen.c:321
void sion_mpi_options_set_chunksize(sion_mpi_options *options, int64_t chunksize)
Set the chunk size of a logical file in the container.
Definition: sion_mpi_gen.c:235
void sion_mpi_options_set_fsblksize(sion_mpi_options *options, int32_t fsblksize)
Set the file system block size to assume.
Definition: sion_mpi_gen.c:240
sion_mpi_options * sion_mpi_options_new()
Allocates and initializes an instance of sion_mpi_options
Definition: sion_mpi_gen.c:221
void sion_mpi_options_delete(sion_mpi_options *options)
Delete an instance of sion_mpi_options
Definition: sion_mpi_gen.c:230
void sion_mpi_options_set_collective_merge(sion_mpi_options *options)
Use collective merging.
Definition: sion_mpi_gen.c:282
struct sion_mpi_options sion_mpi_options
Holds non-essential arguments for sion_paropen_mpi().
Definition: sion_mpi.h:44
void sion_mpi_mapped_options_set_chunksizes(sion_mpi_mapped_options *options, int64_t *chunksizes)
Set the chunk size of all logical files opened by a task.
Definition: sion_mpi_gen.c:311
void sion_mpi_options_set_collective_size(sion_mpi_options *options, int32_t size)
Enable collective I/O.
Definition: sion_mpi_gen.c:277
void sion_mpi_options_set_collective(sion_mpi_options *options)
Enable collective I/O.
Definition: sion_mpi_gen.c:272
struct sion_mpi_mapped_options sion_mpi_mapped_options
Holds non-essential arguments for sion_paropen_mapped_mpi().
Definition: sion_mpi.h:81
void sion_mpi_options_set_endianness(sion_mpi_options *options, sion_endianness endianness)
Set the endianness for the contents of a container.
Definition: sion_mpi_gen.c:292
int sion_parclose_mpi(int sid)
Close a SIONlib file using MPI.
Definition: sion_mpi_gen.c:34
void sion_mpi_options_set_keyval_mode(sion_mpi_options *options, sion_keyval_mode keyval_mode)
Set the key-value mode to use for a container.
Definition: sion_mpi_gen.c:257
void sion_mpi_options_set_buddylevel(sion_mpi_options *options, int32_t buddylevel)
Enable buddy checkpointing mechanism.
Definition: sion_mpi_gen.c:267
void sion_mpi_options_set_multifile_number(sion_mpi_options *options, int multifile_number)
Set the number of physical files to use.
Definition: sion_mpi_gen.c:245