SIONlib  1.7.1
Scalable I/O library for parallel access to task-local files
sion_mpi_file_check.c
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 /*
10  *
11  * \brief Internal Functions(parallel)
12  */
13 
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <string.h>
17 #include <unistd.h>
18 
19 #include "mpi.h"
20 
21 #include "sion.h"
22 #include "sion_debug.h"
23 #include "sion_error_handler.h"
24 #include "sion_internal.h"
25 #include "sion_fd.h"
26 #include "sion_filedesc.h"
27 #include "sion_printts.h"
28 #include "sion_flags.h"
29 
30 
31 #ifdef SION_MPI
32 
33 #include "sion_generic.h"
34 
35 #include "sion_mpi.h"
36 #include "sion_mpi_internal_gen.h"
37 
38 #include "sion_mpi_cb_gen.h"
39 
40 
42  char *file_mode;
43  int numfiles;
44  MPI_Comm gComm;
45  MPI_Comm lComm;
46 };
47 
55 #define DFUNCTION "_sion_paropen_generic_buddy"
56 sion_file_check_par_args_mpi *sion_file_check_par_args_init_mpi( const char *file_mode,
57  MPI_Comm gComm,
58  int numfiles,
59  MPI_Comm lComm
60  ) {
62 
63  cb_args = (sion_file_check_par_args_mpi *) malloc(sizeof(sion_file_check_par_args_mpi));
64  if (cb_args == NULL) {
65  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"cannot allocate cb_args structure of size %lu (sion_file_check_par_args), aborting ...\n",
66  (unsigned long) sizeof(sion_file_check_par_args_mpi));
67  return(NULL);
68  }
69 
70  cb_args->file_mode=strdup(file_mode);
71  cb_args->gComm=gComm;
72  cb_args->lComm=lComm;
73  cb_args->numfiles=numfiles;
74 
75  return(cb_args);
76 }
77 #undef DFUNCTION
78 
79 #define DFUNCTION "sion_file_check_par_args_free_mpi"
80 int sion_file_check_par_args_free_mpi( sion_file_check_par_args_mpi *cb_args ) {
81  int rc=SION_SUCCESS;
82  if(cb_args!=NULL) {
83  if(cb_args->file_mode!=NULL) {
84  free(cb_args->file_mode);
85  }
86  free(cb_args);
87  }
88  return(rc);
89 }
90 #undef DFUNCTION
91 
92 #define DFUNCTION "sion_file_check_par_cb_mpi"
93 int sion_file_check_par_cb_mpi( char *fname, void *v_args ) {
95  int rc=SION_NOT_SUCCESS;
96  int gtasks, gRank, sid;
97  sion_int64 chunksize=0;
98  sion_int32 fsblksize=-1;
99  int globalrank=-1;
100 
101 
102  MPI_Comm_size(cb_args->gComm, &gtasks);
103  MPI_Comm_rank(cb_args->gComm, &gRank);
104 
105  DPRINTFP((1, DFUNCTION, gRank, "enter parallel check of file %s with mode %s\n", fname,cb_args->file_mode));
106 
107  _sion_errorprint_set_flag(_SION_ERROR_FLAG_SUPPRESS_MSG);
108  sid = sion_paropen_mpi(fname, cb_args->file_mode, &cb_args->numfiles, cb_args->gComm, &cb_args->lComm, &chunksize, &fsblksize, &globalrank, NULL, NULL);
109  _sion_errorprint_set_flag(_SION_ERROR_FLAG_NONE);
110  if(sid<0) {
111  rc=SION_NOT_SUCCESS;
112  } else {
113  rc=SION_SUCCESS;
114  sion_parclose_mpi(sid);
115  }
116 
117  DPRINTFP((1, DFUNCTION, gRank, "leave parallel check of file %s with mode %s rc=%d\n", fname,cb_args->file_mode,rc));
118  return(rc);
119 }
120 #undef DFUNCTION
121 
122 #endif
int sion_paropen_mpi(const char *fname, const char *file_mode, int *numFiles, MPI_Comm gComm, const MPI_Comm *lComm, sion_int64 *chunksize, sion_int32 *fsblksize, int *globalrank, FILE **fileptr, char **newfname)
Open a sion file using MPI.
Definition: sion_mpi_gen.c:83
Sion Time Stamp Header.
int sion_parclose_mpi(int sid)
Close a sion file using MPI.
Definition: sion_mpi_gen.c:239