22 #include <sys/types.h>    31 #include "sion_error_handler.h"    49 size_t sion_coll_fwrite_mpi(
const void *data, 
size_t size, 
size_t nitems, 
int sid) {
    50   return(sion_coll_fwrite(data,size,nitems,sid));
    55 size_t sion_coll_fread_mpi(
void *data, 
size_t size, 
size_t nitems, 
int sid) {
    56   return(sion_coll_fread(data,size,nitems,sid));
    61 int sion_paropen_comms_mpi(
char *fname,
    62                            const char *file_mode,
    65                            MPI_Comm lComm, sion_int64 *chunksize, sion_int32 *fsblksize, 
int *globalrank, FILE **fileptr, 
char *newfname)
    68   return(
sion_paropen_mpi(fname,file_mode,numFiles,gComm,&lComm,chunksize,fsblksize,globalrank,fileptr,&newfname));
    71 int sion_paropen_multi_mpi(
char *fname,
    72                            const char *file_mode,
    75                            MPI_Comm *lComm, sion_int64 *chunksize, sion_int32 *fsblksize, 
int *globalrank, FILE **fileptr, 
char *newfname)
    77   return(
sion_paropen_mpi(fname,file_mode,numFiles,gComm,lComm,chunksize,fsblksize,globalrank,fileptr,&newfname));
    82 int sion_startof_transaction_mpi(   
int      sid  ) {
    83   int       rc = SION_SUCCESS;
    84   int       grank, lrank, lsize, blocksize, step=0;
    85   MPI_Comm  gComm, lComm;
    93     return(_sion_errorprint_mpi(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_parclose_mpi: invalid sion_filedesc %d", sid));
    98   gComm=gcommgroup->comm;
    99   lComm=lcommgroup->comm;
   100   MPI_Comm_rank(gComm, &grank);
   101   MPI_Comm_rank(lComm, &lrank);
   102   MPI_Comm_size(lComm, &lsize);
   105   if (t) blocksize= atoi(t);
   106   else if(lsize>128) blocksize= 32;
   107   else if(lsize>64)  blocksize= 16;
   108   else if(lsize>16)  blocksize= 8;
   109   else blocksize=lsize;
   110   lcommgroup->blocksize=blocksize;
   112    DPRINTFTS(grank, 
"enter start of transaction of sid");
   113   DPRINTFP((1, 
"sion_startof_transaction_mpi", grank, 
"enter start of transaction of sid %d blocksize=%d lrank=%d\n", sid,blocksize,lrank));
   117   if(lrank>blocksize) {
   118     if(sion_filedesc->
filenumber==0)    fprintf(stderr,
"sion_startof_transaction_mpi ts=%8.4fs on grank=%5d lrank=%3d waiting for message from %5d\n",
_sion_get_time()-lcommgroup->ts,
   119                         grank,lrank,lrank-blocksize);
   120     MPI_Recv(&step, 1, MPI_INT, lrank-blocksize, 1430, lComm, &status);
   123   lcommgroup->step=step;
   124   if(sion_filedesc->
filenumber==0)  fprintf(stderr,
"sion_startof_transaction_mpi ts=%8.4fs on grank=%5d lrank=%3d starting transaction (blocksize=%d, step=%d)\n",
_sion_get_time()-lcommgroup->ts,
   125                         grank,lrank,blocksize,step);
   126   DPRINTFP((1, 
"sion_startof_transaction_mpi", grank, 
"leave start of transaction of sid %d\n", sid));
   127    DPRINTFTS(grank, 
"leave start of transaction of sid");
   131 int sion_endof_transaction_mpi  (   
int      sid  ) {
   132   int       rc = SION_SUCCESS;
   133   int       grank, lrank, lsize, blocksize, step=1;
   134   MPI_Comm  gComm, lComm;
   140     return(_sion_errorprint_mpi(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_parclose_mpi: invalid sion_filedesc %d", sid));
   145   gComm=gcommgroup->comm;
   146   lComm=lcommgroup->comm;
   147   MPI_Comm_rank(gComm, &grank);
   148   MPI_Comm_rank(lComm, &lrank);
   149   MPI_Comm_size(lComm, &lsize);
   151   blocksize=lcommgroup->blocksize;
   152   step= lcommgroup->step+1;
   154    DPRINTFTS(grank, 
"enter end of transaction of sid");
   155   DPRINTFP((1, 
"sion_endof_transaction_mpi", grank, 
"enter end of transaction of sid %d blocksize=%d lrank=%d\n", sid,blocksize,lrank));
   158   if(lrank+blocksize<lsize) {
   159     if(sion_filedesc->
filenumber==0) fprintf(stderr,
"sion_endof_transaction_mpi   ts=%8.4fs on grank=%5d lrank=%3d sending step %2d  to %5d\n",
_sion_get_time()-lcommgroup->ts,
   160                          grank,lrank,step,lrank+blocksize);
   161     MPI_Send(&step, 1, MPI_INT, lrank+blocksize, 1430, lComm);
   164   if(sion_filedesc->
filenumber==0) fprintf(stderr,
"sion_endof_transaction_mpi   ts=%8.4fs on grank=%5d lrank=%3d end of transaction step=%2d\n",
_sion_get_time()-lcommgroup->ts,
   167   DPRINTFP((1, 
"sion_endof_transaction_mpi", grank, 
"leave end of transaction of sid %d\n", sid));
   168    DPRINTFTS(grank, 
"leave end of transaction of sid");
 
Sion File Descriptor Structure.
double _sion_get_time()
Returns the current time as a double.
int _sion_vcdtype(int sid)
char * _sion_getenv(const char *name)
void * _sion_vcdtovcon(int sid)
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.
#define SION_FILEDESCRIPTOR