22 #include <sys/types.h> 48 size_t sion_coll_fwrite_mpi(
const void *data,
size_t size,
size_t nitems,
int sid) {
49 return(sion_coll_fwrite(data,size,nitems,sid));
54 size_t sion_coll_fread_mpi(
void *data,
size_t size,
size_t nitems,
int sid) {
55 return(sion_coll_fread(data,size,nitems,sid));
60 int sion_paropen_comms_mpi(
char *fname,
61 const char *file_mode,
64 MPI_Comm lComm, sion_int64 *chunksize, sion_int32 *fsblksize,
int *globalrank, FILE **fileptr,
char *newfname)
67 return(
sion_paropen_mpi(fname,file_mode,numFiles,gComm,&lComm,chunksize,fsblksize,globalrank,fileptr,&newfname));
70 int sion_paropen_multi_mpi(
char *fname,
71 const char *file_mode,
74 MPI_Comm *lComm, sion_int64 *chunksize, sion_int32 *fsblksize,
int *globalrank, FILE **fileptr,
char *newfname)
76 return(
sion_paropen_mpi(fname,file_mode,numFiles,gComm,lComm,chunksize,fsblksize,globalrank,fileptr,&newfname));
81 int sion_startof_transaction_mpi(
int sid ) {
82 int rc = SION_SUCCESS;
83 int grank, lrank, lsize, blocksize, step=0;
84 MPI_Comm gComm, lComm;
92 return(_sion_errorprint_mpi(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_parclose_mpi: invalid sion_filedesc %d", sid));
97 gComm=gcommgroup->comm;
98 lComm=lcommgroup->comm;
99 MPI_Comm_rank(gComm, &grank);
100 MPI_Comm_rank(lComm, &lrank);
101 MPI_Comm_size(lComm, &lsize);
104 if (t) blocksize= atoi(t);
105 else if(lsize>128) blocksize= 32;
106 else if(lsize>64) blocksize= 16;
107 else if(lsize>16) blocksize= 8;
108 else blocksize=lsize;
109 lcommgroup->blocksize=blocksize;
111 DPRINTFTS(grank,
"enter start of transaction of sid");
112 DPRINTFP((1,
"sion_startof_transaction_mpi", grank,
"enter start of transaction of sid %d blocksize=%d lrank=%d\n", sid,blocksize,lrank));
116 if(lrank>blocksize) {
117 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,
118 grank,lrank,lrank-blocksize);
119 MPI_Recv(&step, 1, MPI_INT, lrank-blocksize, 1430, lComm, &status);
122 lcommgroup->step=step;
123 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,
124 grank,lrank,blocksize,step);
125 DPRINTFP((1,
"sion_startof_transaction_mpi", grank,
"leave start of transaction of sid %d\n", sid));
126 DPRINTFTS(grank,
"leave start of transaction of sid");
130 int sion_endof_transaction_mpi (
int sid ) {
131 int rc = SION_SUCCESS;
132 int grank, lrank, lsize, blocksize, step=1;
133 MPI_Comm gComm, lComm;
139 return(_sion_errorprint_mpi(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_parclose_mpi: invalid sion_filedesc %d", sid));
144 gComm=gcommgroup->comm;
145 lComm=lcommgroup->comm;
146 MPI_Comm_rank(gComm, &grank);
147 MPI_Comm_rank(lComm, &lrank);
148 MPI_Comm_size(lComm, &lsize);
150 blocksize=lcommgroup->blocksize;
151 step= lcommgroup->step+1;
153 DPRINTFTS(grank,
"enter end of transaction of sid");
154 DPRINTFP((1,
"sion_endof_transaction_mpi", grank,
"enter end of transaction of sid %d blocksize=%d lrank=%d\n", sid,blocksize,lrank));
157 if(lrank+blocksize<lsize) {
158 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,
159 grank,lrank,step,lrank+blocksize);
160 MPI_Send(&step, 1, MPI_INT, lrank+blocksize, 1430, lComm);
163 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,
166 DPRINTFP((1,
"sion_endof_transaction_mpi", grank,
"leave end of transaction of sid %d\n", sid));
167 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