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/H5D.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/H5D.c')
-rw-r--r-- | src/H5D.c | 109 |
1 files changed, 23 insertions, 86 deletions
@@ -76,7 +76,7 @@ const H5D_xfer_t H5D_xfer_dflt = { NULL, /* Background buffer or NULL */ H5T_BKG_NO, /* Type of background buffer needed */ #ifdef HAVE_PARALLEL - H5D_XFER_INDEPENDENT, /* Independent data transfer */ + H5D_XFER_DFLT, /* Independent data transfer */ #endif }; @@ -1155,9 +1155,6 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, #ifdef H5T_DEBUG H5_timer_t timer; #endif -#ifdef HAVE_PARALLEL - int access_mode_saved = -1; -#endif FUNC_ENTER(H5D_read, FAIL); @@ -1180,29 +1177,9 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, /* can always be simulated by independent access. */ /* Nevertheless, must check driver is MPIO before using those */ /* access_mode which exists only for MPIO case. */ - if (dataset->ent.file->shared->access_parms->driver == H5F_LOW_MPIO){ - /* - * -AKC- - * "plant" the collective access mode into the file information - * so that the lower level mpio routines know to use collective - * access. - * This is not thread-safe, is a klutch for now. - * Should change all the I/O routines to pass along the xfer - * property list to the low level I/O for proper execution. - * Make it to work now. Must fix it later. - * -AKC- - */ -#ifdef AKC - printf("%s: collective access requested\n", FUNC); -#endif - access_mode_saved = - dataset->ent.file->shared->access_parms->u.mpio.access_mode; - dataset->ent.file->shared->access_parms->u.mpio.access_mode = - H5D_XFER_COLLECTIVE; - }else{ + if (dataset->ent.file->shared->access_parms->driver != H5F_LOW_MPIO) HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access not permissible"); - } } #endif /*HAVE_PARALLEL*/ @@ -1241,18 +1218,19 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, * Check if collective data transfer requested. */ if (xfer_parms->xfer_mode == H5D_XFER_COLLECTIVE){ - /* Supports only no conversion, type or space, for now. */ - if (H5T_conv_noop==tconv_func && - NULL!=sconv_func->read) { - status = (sconv_func->read)(dataset->ent.file, &(dataset->layout), - &(dataset->create_parms->compress), - &(dataset->create_parms->efl), - H5T_get_size (dataset->type), file_space, - mem_space, buf/*out*/); - if (status>=0) goto succeed; - HGOTO_ERROR (H5E_DATASET, H5E_READERROR, FAIL, - "collective read failed"); - } + /* Supports only no conversion, type or space, for now. */ + if (H5T_conv_noop==tconv_func && + NULL!=sconv_func->read) { + status = (sconv_func->read)(dataset->ent.file, &(dataset->layout), + &(dataset->create_parms->compress), + &(dataset->create_parms->efl), + H5T_get_size (dataset->type), file_space, + mem_space, xfer_parms->xfer_mode, + buf/*out*/); + if (status>=0) goto succeed; + HGOTO_ERROR (H5E_DATASET, H5E_READERROR, FAIL, + "collective read failed"); + } } #endif /*HAVE_PARALLEL*/ @@ -1268,7 +1246,8 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, &(dataset->create_parms->compress), &(dataset->create_parms->efl), H5T_get_size (dataset->type), file_space, - mem_space, buf/*out*/); + mem_space, xfer_parms->xfer_mode, + buf/*out*/); if (status>=0) goto succeed; #ifdef H5D_DEBUG fprintf (stderr, "H5D: data space conversion could not be optimized " @@ -1356,6 +1335,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, &(dataset->create_parms->efl), H5T_get_size (dataset->type), file_space, &numbering, smine_start, smine_nelmts, + xfer_parms->xfer_mode, tconv_buf/*out*/)!=smine_nelmts) { HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file gather failed"); } @@ -1407,15 +1387,6 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, if (bkg_buf && NULL==xfer_parms->bkg_buf) { H5MM_xfree (bkg_buf); } -#ifdef HAVE_PARALLEL - /* - * Check if collective data transfer requested. - * If so, need to restore the access mode. Shouldnot needed. - */ - if (xfer_parms->xfer_mode == H5D_XFER_COLLECTIVE){ - dataset->ent.file->shared->access_parms->u.mpio.access_mode = access_mode_saved; - } -#endif /*HAVE_PARALLEL*/ FUNC_LEAVE(ret_value); } @@ -1461,9 +1432,6 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, #ifdef H5T_DEBUG H5_timer_t timer; #endif -#ifdef HAVE_PARALLEL - int access_mode_saved = -1; -#endif FUNC_ENTER(H5D_write, FAIL); @@ -1486,30 +1454,9 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, /* can always be simulated by independent access. */ /* Nevertheless, must check driver is MPIO before using those */ /* access_mode which exists only for MPIO case. */ - if (dataset->ent.file->shared->access_parms->driver == H5F_LOW_MPIO){ - /* - * -AKC- - * "plant" the collective access mode into the file information - * so that the lower level mpio routines know to use collective - * access. - * This is not thread-safe, is a klutch for now. - * Should change all the I/O routines to pass along the xfer - * property list to the low level I/O for proper execution. - * Make it to work now. Must fix it later. - * -AKC- - */ -#ifdef AKC - printf("%s: collective access requested\n", FUNC); -#endif - access_mode_saved = - dataset->ent.file->shared->access_parms->u.mpio.access_mode; - dataset->ent.file->shared->access_parms->u.mpio.access_mode = - H5D_XFER_COLLECTIVE; - } - else{ + if (dataset->ent.file->shared->access_parms->driver != H5F_LOW_MPIO) HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access not permissible"); - } } #endif /*HAVE_PARALLEL*/ @@ -1543,7 +1490,6 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, "unable to convert from memory to file data space"); } -#ifdef NO #ifdef HAVE_PARALLEL /* * Check if collective data transfer requested. @@ -1556,14 +1502,13 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, &(dataset->create_parms->compress), &(dataset->create_parms->efl), H5T_get_size (dataset->type), file_space, - mem_space, buf); + mem_space, xfer_parms->xfer_mode, buf); if (status>=0) goto succeed; HGOTO_ERROR (H5E_DATASET, H5E_WRITEERROR, FAIL, "collective write failed"); } } #endif /*HAVE_PARALLEL*/ -#endif /* @@ -1577,7 +1522,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, &(dataset->create_parms->compress), &(dataset->create_parms->efl), H5T_get_size (dataset->type), file_space, - mem_space, buf); + mem_space, xfer_parms->xfer_mode, buf); if (status>=0) goto succeed; #ifdef H5D_DEBUG fprintf (stderr, "H5D: data space conversion could not be optimized " @@ -1672,6 +1617,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, &(dataset->create_parms->efl), H5T_get_size (dataset->type), file_space, &numbering, smine_start, smine_nelmts, + xfer_parms->xfer_mode, bkg_buf/*out*/)!=smine_nelmts) { HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "file gather failed"); @@ -1703,7 +1649,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, &(dataset->create_parms->efl), H5T_get_size (dataset->type), file_space, &numbering, smine_start, smine_nelmts, - tconv_buf)<0) { + xfer_parms->xfer_mode, tconv_buf)<0) { HGOTO_ERROR (H5E_DATASET, H5E_WRITEERROR, FAIL, "scatter failed"); } } @@ -1720,15 +1666,6 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space, if (bkg_buf && NULL==xfer_parms->bkg_buf) { H5MM_xfree (bkg_buf); } -#ifdef HAVE_PARALLEL - /* - * Check if collective data transfer requested. - * If so, need to restore the access mode. Shouldnot needed. - */ - if (xfer_parms->xfer_mode == H5D_XFER_COLLECTIVE){ - dataset->ent.file->shared->access_parms->u.mpio.access_mode = access_mode_saved; - } -#endif /*HAVE_PARALLEL*/ FUNC_LEAVE(ret_value); } |