SIONlib  2.0.0-rc.1
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-2018 **
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 
23 #include <mpi.h>
24 #include <stdbool.h>
25 #include <stdint.h>
26 #include <stdio.h>
27 
28 #include "sion_const.h"
29 #include "sion_enums.h"
30 
31 #include "sion_datatypes_mpi.h"
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
70 int sion_paropen_mpi(const char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, const MPI_Comm *lComm,
71  int64_t *chunksize, int32_t *fsblksize, int *globalrank, FILE **fileptr, char **newfname);
72 
83 int sion_parclose_mpi(int sid);
84 
85 int sion_parreinit_mpi(int sid, int64_t chunksize);
86 
87 /* new mapped functions */
88 
89 /* open function:
90  write-mode:
91  if numFiles > 1 --> mapping_filenrs, mapping_lranks contains local mappping
92  */
93 
94 int sion_paropen_mapped_mpi(char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, int *nlocaltasks,
95  int **globalranks, int64_t **chunksizes, int **mapping_filenrs, int **mapping_lranks, int32_t *fsblksize, FILE **fileptr);
96 
97 int sion_parclose_mapped_mpi(int sid);
98 
99 /* Serialization */
100 int sion_startof_transaction_mpi(int sid);
101 int sion_endof_transaction_mpi(int sid);
102 size_t sion_coll_fwrite_mpi(const void *data, size_t size, size_t nitems, int sid);
103 size_t sion_coll_fread_mpi(void *data, size_t size, size_t nitems, int sid);
104 
105 /* for backward compatibility */
106 int sion_paropen_comms_mpi(char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, MPI_Comm lComm, int64_t *chunksize,
107  int32_t *fsblksize, int *globalrank, FILE **fileptr, char *newfname);
108 int sion_paropen_multi_mpi(char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, MPI_Comm *lComm, int64_t *chunksize,
109  int32_t *fsblksize, int *globalrank, FILE **fileptr, char *newfname);
110 
111 /* for file check */
113 sion_file_check_par_args_mpi *sion_file_check_par_args_init_mpi(
114  const char *file_mode, MPI_Comm gComm, int numfiles, MPI_Comm lComm);
115 int sion_file_check_par_args_free_mpi(sion_file_check_par_args_mpi *args);
116 int sion_file_check_par_cb_mpi(char *fname, void *args);
117 
118 typedef enum { _SION_MULTIFILE_SINGLE, _SION_MULTIFILE_NUMBER, _SION_MULTIFILE_COMMUNICATOR } _sion_mpi_multifile_mode;
119 
120 typedef union {
121  int number;
122  MPI_Comm communicator;
124 
125 typedef struct {
126  int64_t chunksize; // default: fsblksize
127  int32_t fsblksize; // default: auto-detect
128 
129  _sion_mpi_multifile_mode multifile_mode; // default: _SION_MULTI_FILE_SINGLE
130  _sion_mpi_multifile_data multifile;
131 
132  sion_keyval_mode keyval_mode; // default: SION_KEYVAL_MODE_NONE
133 
134  int32_t buddylevel; // default: 0, no buddy checkpointing
135 
136  int32_t collsize; // default: 0, do not use collective mode
137  bool collective_merge; // default: false
139 
140 sion_mpi_options sion_mpi_options_new();
141 
142 void sion_mpi_options_set_chunksize(sion_mpi_options *options, int64_t chunksize);
143 void sion_mpi_options_set_fsblksize(sion_mpi_options *options, int32_t fsblksize);
144 
145 void sion_mpi_options_set_multifile_number(sion_mpi_options *options, int multifile_number);
146 void sion_mpi_options_set_multifile_communicator(sion_mpi_options *options, MPI_Comm multifile_communicator);
147 
148 void sion_mpi_options_set_keyval_mode(sion_mpi_options *options, sion_keyval_mode keyval_mode);
149 
150 void sion_mpi_options_set_buddy(sion_mpi_options *options);
151 void sion_mpi_options_set_buddylevel(sion_mpi_options *options, int32_t buddylevel);
152 
153 void sion_mpi_options_set_collective(sion_mpi_options *options);
154 void sion_mpi_options_set_collective_size(sion_mpi_options *options, int32_t size);
155 void sion_mpi_options_set_collective_merge(sion_mpi_options *options);
156 
157 int sion_paropen_mpi_with_options(
158  const char *filename, sion_open_mode mode, MPI_Comm communicator, const sion_mpi_options *options);
159 
160 #ifdef __cplusplus
161 }
162 #endif
163 
165 
166 #endif
167 
168 #endif
int sion_parclose_mpi(int sid)
Close a sion file using MPI.
Definition: sion_mpi_gen.c:162
int sion_paropen_mpi(const char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, const MPI_Comm *lComm, int64_t *chunksize, int32_t *fsblksize, int *globalrank, FILE **fileptr, char **newfname)
Open a sion file using MPI.
Definition: sion_mpi_gen.c:35