summaryrefslogtreecommitdiffstats
path: root/src/H5Smpio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Smpio.c')
-rw-r--r--src/H5Smpio.c78
1 files changed, 43 insertions, 35 deletions
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
index 91a42ba..e2c1375 100644
--- a/src/H5Smpio.c
+++ b/src/H5Smpio.c
@@ -12,8 +12,11 @@
#include <H5private.h>
#include <H5Eprivate.h>
+#include <H5FDprivate.h>
#include <H5Sprivate.h>
+#include <H5FDmpio.h> /*the MPIO file driver */
+
#ifndef HAVE_PARALLEL
/*
* The H5S_mpio_xxxx functions are for parallel I/O only and are
@@ -54,7 +57,7 @@ H5S_mpio_spaces_xfer(H5F_t *f, const struct H5O_layout_t *layout,
const struct H5O_pline_t UNUSED *pline,
const struct H5O_efl_t UNUSED *efl, size_t elmt_size,
const H5S_t *file_space, const H5S_t *mem_space,
- const H5F_xfer_t *xfer_parms, void *buf/*out*/,
+ hid_t dxpl_id, void *buf/*out*/,
hbool_t *must_convert/*out*/, const hbool_t do_write);
/*-------------------------------------------------------------------------
@@ -105,7 +108,8 @@ H5S_mpio_all_type( const H5S_t *space, const size_t elmt_size,
fprintf(stdout, "Leave %s total_bytes=%Hu\n", FUNC, total_bytes );
#endif
FUNC_LEAVE (SUCCEED);
-} /* H5S_mpio_all_type() */
+}
+
/*-------------------------------------------------------------------------
* Function: H5S_mpio_hyper_type
@@ -140,7 +144,7 @@ H5S_mpio_hyper_type( const H5S_t *space, const size_t elmt_size,
hsize_t count;
} d[32];
- int i, j, err, new_rank, num_to_collapse, stride_bytes;
+ int i, err, new_rank, num_to_collapse;
int offset[32], max_xtent[32], block_length[2], displacement[2];
H5S_hyper_dim_t *diminfo; /* [rank] */
intn rank;
@@ -403,7 +407,7 @@ H5S_mpio_hyper_type( const H5S_t *space, const size_t elmt_size,
fprintf(stdout, "Leave %s\n", FUNC );
#endif
FUNC_LEAVE (SUCCEED);
-} /* H5S_mpio_hyper_type() */
+}
/*-------------------------------------------------------------------------
@@ -488,7 +492,8 @@ H5S_mpio_space_type( const H5S_t *space, const size_t elmt_size,
}
FUNC_LEAVE (ret_value);
-} /* H5S_mpio_space_type() */
+}
+
/*-------------------------------------------------------------------------
* Function: H5S_mpio_spaces_xfer
@@ -508,11 +513,11 @@ H5S_mpio_space_type( const H5S_t *space, const size_t elmt_size,
*-------------------------------------------------------------------------
*/
herr_t
-H5S_mpio_spaces_xfer (H5F_t *f, const struct H5O_layout_t *layout,
+H5S_mpio_spaces_xfer(H5F_t *f, const struct H5O_layout_t *layout,
const struct H5O_pline_t UNUSED *pline,
const struct H5O_efl_t UNUSED *efl, size_t elmt_size,
const H5S_t *file_space, const H5S_t *mem_space,
- const H5F_xfer_t *xfer_parms, void *buf /*out*/,
+ hid_t dxpl_id, void *buf /*out*/,
hbool_t *must_convert /*out*/,
const hbool_t do_write )
{
@@ -534,7 +539,7 @@ H5S_mpio_spaces_xfer (H5F_t *f, const struct H5O_layout_t *layout,
assert (file_space);
assert (mem_space);
assert (buf);
- assert (f->shared->access_parms->driver == H5F_LOW_MPIO);
+ assert (H5FD_MPIO==f->shared->fapl->driver_id);
/* INCOMPLETE!!! rky 980816 */
/* Currently can only handle H5D_CONTIGUOUS layout */
@@ -556,8 +561,6 @@ H5S_mpio_spaces_xfer (H5F_t *f, const struct H5O_layout_t *layout,
&mbt_is_derived );
if (MPI_SUCCESS != err)
HRETURN_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't create MPI buf type");
- /* pass the buf type to low-level write via access_parms */
- f->shared->access_parms->u.mpio.btype = mpi_buf_type;
/* create the MPI file type */
err = H5S_mpio_space_type( file_space, elmt_size,
@@ -567,12 +570,9 @@ H5S_mpio_spaces_xfer (H5F_t *f, const struct H5O_layout_t *layout,
&mft_is_derived );
if (MPI_SUCCESS != err)
HRETURN_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't create MPI file type");
- /* pass the file type to low-level write via access_parms */
- f->shared->access_parms->u.mpio.ftype = mpi_file_type;
/* calculate the absolute base addr (i.e., the file view disp) */
disp = f->shared->base_addr + layout->addr;
- f->shared->access_parms->u.mpio.disp = disp;
#ifdef H5Smpi_DEBUG
fprintf(stdout, "spaces_xfer: disp=%Hu\n", disp.offset );
#endif
@@ -580,22 +580,26 @@ H5S_mpio_spaces_xfer (H5F_t *f, const struct H5O_layout_t *layout,
/* Effective address determined by base addr and the MPI file type */
addr = 0;
- /* request a dataspace xfer (instead of an elementary byteblock xfer) */
- f->shared->access_parms->u.mpio.use_types = 1;
+ /*
+ * Pass buf type, file type, and absolute base address (i.e., the file
+ * view disp) to the file driver. Request a dataspace transfer (instead
+ * of an elementary byteblock transfer).
+ */
+ H5FD_mpio_setup(f->shared->lf, mpi_buf_type, mpi_file_type, disp, 1);
/* transfer the data */
mpi_count = (size_t)mpi_buf_count;
- if (mpi_count != mpi_buf_count)
- HRETURN_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"transfer size overflows size_t");
+ if (mpi_count != mpi_buf_count) {
+ HRETURN_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,
+ "transfer size overflows size_t");
+ }
if (do_write) {
- err = H5F_low_write( f->shared->lf, f->shared->access_parms,
- xfer_parms, addr, mpi_count, buf );
+ err = H5FD_write(f->shared->lf, dxpl_id, addr, mpi_count, buf);
if (err) {
HRETURN_ERROR(H5E_IO, H5E_WRITEERROR, FAIL,"MPI write failed");
}
} else {
- err = H5F_low_read ( f->shared->lf, f->shared->access_parms,
- xfer_parms, addr, mpi_count, buf );
+ err = H5FD_read (f->shared->lf, dxpl_id, addr, mpi_count, buf);
if (err) {
HRETURN_ERROR(H5E_IO, H5E_READERROR, FAIL,"MPI read failed");
}
@@ -605,19 +609,22 @@ H5S_mpio_spaces_xfer (H5F_t *f, const struct H5O_layout_t *layout,
if (mbt_is_derived) {
err = MPI_Type_free( &mpi_buf_type );
if (MPI_SUCCESS != err) {
- HRETURN_ERROR(H5E_DATASPACE, H5E_MPI, FAIL,"couldn't free MPI file type");
+ HRETURN_ERROR(H5E_DATASPACE, H5E_MPI, FAIL,
+ "unable to free MPI file type");
}
}
if (mft_is_derived) {
err = MPI_Type_free( &mpi_file_type );
if (MPI_SUCCESS != err) {
- HRETURN_ERROR(H5E_DATASPACE, H5E_MPI, FAIL,"couldn't free MPI file type");
+ HRETURN_ERROR(H5E_DATASPACE, H5E_MPI, FAIL,
+ "unable to free MPI file type");
}
}
done:
FUNC_LEAVE (ret_value);
-} /* H5S_mpio_spaces_xfer() */
+}
+
/*-------------------------------------------------------------------------
* Function: H5S_mpio_spaces_read
@@ -636,11 +643,11 @@ H5S_mpio_spaces_xfer (H5F_t *f, const struct H5O_layout_t *layout,
*-------------------------------------------------------------------------
*/
herr_t
-H5S_mpio_spaces_read (H5F_t *f, const struct H5O_layout_t *layout,
+H5S_mpio_spaces_read(H5F_t *f, const struct H5O_layout_t *layout,
const struct H5O_pline_t *pline,
const struct H5O_efl_t *efl, size_t elmt_size,
const H5S_t *file_space, const H5S_t *mem_space,
- const H5F_xfer_t *xfer_parms, void *buf/*out*/,
+ hid_t dxpl_id, void *buf/*out*/,
hbool_t *must_convert/*out*/)
{
herr_t ret_value = FAIL;
@@ -648,11 +655,12 @@ H5S_mpio_spaces_read (H5F_t *f, const struct H5O_layout_t *layout,
FUNC_ENTER (H5S_mpio_spaces_read, FAIL);
ret_value = H5S_mpio_spaces_xfer(f, layout, pline, efl, elmt_size,
- file_space, mem_space, xfer_parms,
+ file_space, mem_space, dxpl_id,
buf, must_convert/*out*/, 0/*read*/);
FUNC_LEAVE (ret_value);
-} /* H5S_mpio_spaces_read() */
+}
+
/*-------------------------------------------------------------------------
* Function: H5S_mpio_spaces_write
@@ -672,22 +680,22 @@ H5S_mpio_spaces_read (H5F_t *f, const struct H5O_layout_t *layout,
*/
herr_t
H5S_mpio_spaces_write(H5F_t *f, const struct H5O_layout_t *layout,
- const struct H5O_pline_t *pline,
- const struct H5O_efl_t *efl, size_t elmt_size,
- const H5S_t *file_space, const H5S_t *mem_space,
- const H5F_xfer_t *xfer_parms, const void *buf,
- hbool_t *must_convert/*out*/)
+ const struct H5O_pline_t *pline,
+ const struct H5O_efl_t *efl, size_t elmt_size,
+ const H5S_t *file_space, const H5S_t *mem_space,
+ hid_t dxpl_id, const void *buf,
+ hbool_t *must_convert/*out*/)
{
herr_t ret_value = FAIL;
FUNC_ENTER (H5S_mpio_spaces_write, FAIL);
ret_value = H5S_mpio_spaces_xfer(f, layout, pline, efl, elmt_size,
- file_space, mem_space, xfer_parms,
+ file_space, mem_space, dxpl_id,
(void*)buf, must_convert/*out*/,
1/*write*/);
FUNC_LEAVE (ret_value);
-} /* H5S_mpio_spaces_write() */
+}
#endif /* HAVE_PARALLEL */