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