SIONlib  2.0.0-rc.3
Scalable I/O library for parallel access to task-local files
sion_mpi.h
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 #ifndef SION_SION_MPI_H
11 #define SION_SION_MPI_H
12 
13 #ifdef SION_MPI
14 
18 
19 #include <mpi.h>
20 #include <stdbool.h>
21 #include <stdint.h>
22 #include <stdio.h>
23 
24 #include "sion_const.h"
25 #include "sion_enums.h"
26 
27 #include "sion_datatypes_mpi.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
44 typedef struct sion_mpi_options sion_mpi_options;
45 
58 int sion_paropen_mpi(const char *filename, sion_open_mode mode, MPI_Comm communicator, const sion_mpi_options *options);
59 
67 int sion_parclose_mpi(int sid);
68 
69 int sion_parreinit_mpi(int sid, int64_t chunksize);
70 
71 /* new mapped functions */
72 
82 
83 /* open function:
84  write-mode:
85  if numFiles > 1 --> mapping_filenrs, mapping_lranks contains local mappping
86  */
87 
88 int sion_paropen_mapped_mpi(char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, int *nlocaltasks,
89  int **globalranks, int64_t **chunksizes, int **mapping_filenrs, int **mapping_lranks, int32_t *fsblksize, FILE **fileptr);
90 
91 int sion_paropen_mapped_mpi_with_options(const char *filename, sion_open_mode mode, int numfiles, MPI_Comm gcomm, int ntasks,
92  const int *globalranks, const int *filenumbers, const int *localranks, const sion_mpi_mapped_options *options);
93 
94 int sion_parclose_mapped_mpi(int sid);
95 
96 /* for file check */
98 sion_file_check_par_args_mpi *sion_file_check_par_args_init_mpi(
99  sion_open_mode mode, MPI_Comm communicator, const sion_mpi_options *options);
100 void sion_file_check_par_args_free_mpi(sion_file_check_par_args_mpi *args);
101 int sion_file_check_par_cb_mpi(char *fname, void *args);
102 
107 
112 
117 void sion_mpi_options_set_chunksize(sion_mpi_options *options, int64_t chunksize);
118 
123 void sion_mpi_options_set_fsblksize(sion_mpi_options *options, int32_t fsblksize);
124 
129 void sion_mpi_options_set_multifile_number(sion_mpi_options *options, int multifile_number);
130 
139 void sion_mpi_options_set_multifile_communicator(sion_mpi_options *options, MPI_Comm multifile_communicator);
140 
146 
155 
164 void sion_mpi_options_set_buddylevel(sion_mpi_options *options, int32_t buddylevel);
165 
174 
181 void sion_mpi_options_set_collective_size(sion_mpi_options *options, int32_t size);
182 
189 
195 
201 
206 
211 
216 void sion_mpi_mapped_options_set_chunksizes(sion_mpi_mapped_options *options, int64_t *chunksizes);
217 
222 void sion_mpi_mapped_options_set_fsblksize(sion_mpi_mapped_options *options, int32_t fsblksize);
223 
229 
235 
241 
242 #ifdef __cplusplus
243 }
244 #endif
245 
247 
248 #endif
249 
250 #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
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