diff options
author | Albert Cheng <acheng@hdfgroup.org> | 1998-06-07 04:38:16 (GMT) |
---|---|---|
committer | Albert Cheng <acheng@hdfgroup.org> | 1998-06-07 04:38:16 (GMT) |
commit | dadb964ba64517ce3ae2628e6155555fc5542e65 (patch) | |
tree | 7eab1ce899c9a358baf10d36aca93ceda9a1e318 /src/H5Fmpio.c | |
parent | 1e8ebeecfc67073a3019f9c2084a5977d2b8c62e (diff) | |
download | hdf5-dadb964ba64517ce3ae2628e6155555fc5542e65.zip hdf5-dadb964ba64517ce3ae2628e6155555fc5542e65.tar.gz hdf5-dadb964ba64517ce3ae2628e6155555fc5542e65.tar.bz2 |
[svn-r411] Added data-transfer-mode to various function to specify which
mode to use for data transfer. Currently, INDEPENDENT transfer
is the default mode. Collective is supported for files opened
via the MPIO driver. Specific changes to individual files follow.
H5D.c:
Replaced previous kludge of passing xfer_mode via the file access_mode
with xfer_mode function parameter all the way to the low level I/O
drivers.
H5Dprivate.h:
The H5D_xfer_t.xfer_mode is now used in serial and parallel modes.
Removed the "HAVE_PARALLEL" macro condition to support it.
H5Dpublic.h:
Added H5D_XFER_DFLT as a new value for H5D_transfer_t and removed
the HAVE_PARALLEL condition macro to make the H5D_transfer_t
definition available to both serial and parallel version.
H5B.c:
H5F.c:
H5Farray.c:
H5Fcore.c:
H5Ffamily.c:
H5Fistore.c:
H5Flow.c:
H5Fmpio.c:
H5Fsec2.c:
H5Fsplit.c:
H5Fstdio.c:
H5Gnode.c:
H5HG.c:
H5HL.c:
H5O.c:
H5Sprivate.h:
H5Ssimp.c:
debug.c:
Added xfer_mode to the argument lists of the following routines to
specify data transfer mode. Then updated calls to these routines
with appropriate transfer mode. Whenever cases that collective
mode is inappropriate (e.g. object header read-write, flush),
H5D_XFER_DFLT is used. The H5D_XFER_DFLT mode is currently
acting the same as the independent mode.
H5F_block_read
H5F_block_write
H5F_arr_read
H5F_arr_write
H5F_core_read
H5F_core_write
H5F_fam_read
H5F_fam_write
H5F_mpio_read
H5F_mpio_write
H5F_low_write
H5F_low_read
H5F_sec2_read
H5F_sec2_write
H5F_split_read
H5F_split_write
H5F_stdio_read
H5F_stdio_write
H5S_simp_fgath
H5S_simp_fscat
H5S_simp_read
H5S_simp_write
H5Fprivate.h:
H5P.c:
Removed access_mode field from struct H5F_access_t type.
The access-mode was the initial design to control independent
or collective I/O mode. It is now supported by the data
transfer mode.
Diffstat (limited to 'src/H5Fmpio.c')
-rw-r--r-- | src/H5Fmpio.c | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/src/H5Fmpio.c b/src/H5Fmpio.c index d55716c..7b28698 100644 --- a/src/H5Fmpio.c +++ b/src/H5Fmpio.c @@ -68,11 +68,11 @@ static H5F_low_t *H5F_mpio_open(const char *name, H5F_search_t *key/*out*/); static herr_t H5F_mpio_close(H5F_low_t *lf, const H5F_access_t *access_parms); static herr_t H5F_mpio_read(H5F_low_t *lf, const H5F_access_t *access_parms, - const haddr_t *addr, size_t size, - uint8 *buf/*out*/); + const H5D_transfer_t xfer_mode, + const haddr_t *addr, size_t size, uint8 *buf/*out*/); static herr_t H5F_mpio_write(H5F_low_t *lf, const H5F_access_t *access_parms, - const haddr_t *addr, size_t size, - const uint8 *buf); + const H5D_transfer_t xfer_mode, + const haddr_t *addr, size_t size, const uint8 *buf); static herr_t H5F_mpio_flush(H5F_low_t *lf, const H5F_access_t *access_parms); static herr_t H5F_MPIOff_to_haddr(MPI_Offset mpi_off, haddr_t *addr); static herr_t H5F_haddr_to_MPIOff(haddr_t addr, MPI_Offset *mpi_off); @@ -241,16 +241,6 @@ H5F_mpio_open(const char *name, const H5F_access_t *access_parms, uintn flags, fprintf(stdout, "Entering H5F_mpio_open name=%s flags=%x\n", name, flags ); #endif - switch (access_parms->u.mpio.access_mode){ - case H5D_XFER_INDEPENDENT: - case H5D_XFER_COLLECTIVE: - /*void*/ - break; - - default: - HRETURN_ERROR(H5E_IO, H5E_BADVALUE, NULL, "invalid file access mode"); - } - /* convert HDF5 flags to MPI-IO flags */ /* some combinations are illegal; let MPI-IO figure it out */ mpi_amode = (flags&H5F_ACC_RDWR) ? MPI_MODE_RDWR : MPI_MODE_RDONLY; @@ -385,10 +375,14 @@ H5F_mpio_close(H5F_low_t *lf, const H5F_access_t *access_parms) * rky, 10 Apr 1998 * Call independent or collective MPI read, based on ACCESS_PARMS. * + * Albert Cheng, June 1, 1998 + * Added xfer_mode to control independent or collective MPI read. + * *------------------------------------------------------------------------- */ static herr_t H5F_mpio_read(H5F_low_t *lf, const H5F_access_t *access_parms, + const H5D_transfer_t xfer_mode, const haddr_t *addr, size_t size, uint8 *buf/*out*/) { MPI_Offset mpi_off; @@ -415,13 +409,17 @@ H5F_mpio_read(H5F_low_t *lf, const H5F_access_t *access_parms, } /* Read the data. */ - switch (access_parms->u.mpio.access_mode){ + switch (xfer_mode){ case H5D_XFER_INDEPENDENT: + case H5D_XFER_DFLT: mpierr = MPI_File_read_at ( lf->u.mpio.f, mpi_off, (void*) buf, size_i, MPI_BYTE, &mpi_stat ); break; case H5D_XFER_COLLECTIVE: +#ifdef H5F_MPIO_DEBUG + printf("%s: using MPIO collective mode\n", FUNC); +#endif mpierr = MPI_File_read_at_all ( lf->u.mpio.f, mpi_off, (void*) buf, size_i, MPI_BYTE, &mpi_stat ); break; @@ -501,12 +499,15 @@ H5F_mpio_read(H5F_low_t *lf, const H5F_access_t *access_parms, * rky, 24 April * Removed redundant write from H5F_Mpio_write. * + * Albert Cheng, June 1, 1998 + * Added xfer_mode to control independent or collective MPI write. + * *------------------------------------------------------------------------- */ static herr_t H5F_mpio_write(H5F_low_t *lf, const H5F_access_t *access_parms, - const haddr_t *addr, size_t size, - const uint8 *buf) + const H5D_transfer_t xfer_mode, + const haddr_t *addr, size_t size, const uint8 *buf) { MPI_Offset mpi_off; MPI_Status mpi_stat; @@ -530,13 +531,17 @@ H5F_mpio_write(H5F_low_t *lf, const H5F_access_t *access_parms, } /* Write the data. */ - switch (access_parms->u.mpio.access_mode){ + switch (xfer_mode){ case H5D_XFER_INDEPENDENT: + case H5D_XFER_DFLT: mpierr = MPI_File_write_at ( lf->u.mpio.f, mpi_off, (void*) buf, size_i, MPI_BYTE, &mpi_stat ); break; case H5D_XFER_COLLECTIVE: +#ifdef H5F_MPIO_DEBUG + printf("%s: using MPIO collective mode\n", FUNC); +#endif mpierr = MPI_File_write_at_all( lf->u.mpio.f, mpi_off, (void*) buf, size_i, MPI_BYTE, &mpi_stat ); break; |