summaryrefslogtreecommitdiffstats
path: root/perform/pio_engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'perform/pio_engine.c')
-rw-r--r--perform/pio_engine.c56
1 files changed, 35 insertions, 21 deletions
diff --git a/perform/pio_engine.c b/perform/pio_engine.c
index 3b65f85..27251c3 100644
--- a/perform/pio_engine.c
+++ b/perform/pio_engine.c
@@ -34,7 +34,10 @@
/* Macro definitions */
/* sizes of various items. these sizes won't change during program execution */
+/* The following three must have the same type */
#define ELMT_SIZE (sizeof(int)) /* we're doing ints */
+#define ELMT_MPI_TYPE MPI_INT
+#define ELMT_H5_TYPE H5T_NATIVE_INT
#define GOTOERROR(errcode) { ret_code = errcode; goto done; }
#define GOTODONE { goto done; }
@@ -555,7 +558,7 @@ do_write(results *res, file_descr *fd, parameters *parms, long ndsets,
#endif
sprintf(dname, "Dataset_%ld", ndset);
- h5ds_id = H5Dcreate(fd->h5fd, dname, H5T_NATIVE_INT,
+ h5ds_id = H5Dcreate(fd->h5fd, dname, ELMT_H5_TYPE,
h5dset_space_id, dcpl);
if (h5ds_id < 0) {
@@ -672,16 +675,14 @@ do_write(results *res, file_descr *fd, parameters *parms, long ndsets,
nelmts_toxfer = elmts_count - nelmts_xfer;
}
-#ifdef AKCDEBUG
- /*Prepare write data*/
- {
+ if (parms->verify) {
+ /*Prepare write data for verify later*/
int *intptr = (int *)buffer;
register int i;
for (i = 0; i < nelmts_toxfer; ++i)
- *intptr++ = nelmts_toxfer + i;
+ *intptr++ = pio_mpi_rank_g;
}
-#endif
/* Write */
/* Calculate offset of write within a dataset/file */
@@ -750,7 +751,7 @@ HDfprintf(output,
case MPIO:
mpi_offset = dset_offset + (elmts_begin + nelmts_xfer)*ELMT_SIZE;
mrc = MPI_File_write_at(fd->mpifd, mpi_offset, buffer,
- (int)(nelmts_toxfer*ELMT_SIZE), MPI_CHAR,
+ (int)(nelmts_toxfer), ELMT_MPI_TYPE,
&mpi_status);
VRFY((mrc==MPI_SUCCESS), "MPIO_WRITE");
break;
@@ -772,7 +773,7 @@ HDfprintf(output,
}
/* set write time here */
- hrc = H5Dwrite(h5ds_id, H5T_NATIVE_INT, h5mem_space_id,
+ hrc = H5Dwrite(h5ds_id, ELMT_H5_TYPE, h5mem_space_id,
h5dset_space_id, H5P_DEFAULT, buffer);
VRFY((hrc >= 0), "H5Dwrite");
break;
@@ -1088,7 +1089,7 @@ HDfprintf(output,
mpi_offset = dset_offset + (elmts_begin + nelmts_xfer)*ELMT_SIZE;
mrc = MPI_File_read_at(fd->mpifd, mpi_offset, buffer,
- (int)(nelmts_toxfer*ELMT_SIZE), MPI_CHAR,
+ (int)(nelmts_toxfer), ELMT_MPI_TYPE,
&mpi_status);
VRFY((mrc==MPI_SUCCESS), "MPIO_read");
break;
@@ -1111,24 +1112,37 @@ HDfprintf(output,
}
/* set read time here */
- hrc = H5Dread(h5ds_id, H5T_NATIVE_INT, h5mem_space_id,
+ hrc = H5Dread(h5ds_id, ELMT_H5_TYPE, h5mem_space_id,
h5dset_space_id, H5P_DEFAULT, buffer);
VRFY((hrc >= 0), "H5Dread");
break;
- }
+ } /* switch (parms->io_type) */
-#ifdef AKCDEBUG
- /*verify read data*/
- {
+ if (parms->verify) {
+ /*verify read data*/
int *intptr = (int *)buffer;
register int i;
-
- for (i = 0; i < nelmts_toxfer; ++i)
- /* TO BE IMPLEMENTED */
- #error "NOT IMPLEMENTED YET"
- ;
- }
-#endif
+ register int nerror=0;
+
+ for (i = 0; i < nelmts_toxfer; ++i){
+ if (*intptr++ != pio_mpi_rank_g){
+ if (++nerror < 20){
+ /* report at most 20 errors */
+ HDprint_rank(output);
+ HDfprintf(output, "read data error, expected (%Hd), "
+ "got (%Hd)\n",
+ (long_long)pio_mpi_rank_g,
+ (long_long)*(intptr-1));
+ }
+ }
+ }
+ if (nerror >= 20) {
+ HDprint_rank(output);
+ HDfprintf(output, "...");
+ HDfprintf(output, "total read data errors=%Hd\n",
+ nerror);
+ }
+ } /* if (parms->verify) */
nelmts_xfer += nelmts_toxfer;
}