From 03531ab4afa2bf62d267e1efb4b59cdf97a6af39 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Fri, 11 Sep 2015 14:41:52 +0200 Subject: [PATCH] src/h5core - h5priv_start_throttle() and h5priv_end_throttle() are now inline functions, whereby the serial version is just a dummy --- src/h5core/h5_model.c | 63 --------------------------- src/h5core/h5_model_private.h | 80 ++++++++++++++++++++++++++++++++--- src/h5core/h5_readwrite.c | 9 ---- src/h5core/h5b_readwrite.c | 8 ---- src/h5core/h5t_readwrite.c | 19 --------- src/h5core/h5t_tags.c | 4 -- src/h5core/h5u_readwrite.c | 8 ---- 7 files changed, 75 insertions(+), 116 deletions(-) diff --git a/src/h5core/h5_model.c b/src/h5core/h5_model.c index b6e7dd2..23773e3 100644 --- a/src/h5core/h5_model.c +++ b/src/h5core/h5_model.c @@ -157,66 +157,3 @@ h5priv_normalize_dataset_name ( H5_CORE_API_RETURN (H5_SUCCESS); } -#ifdef PARALLEL_IO -h5_err_t -h5priv_start_throttle ( - const h5_file_p f - ) { - H5_CORE_API_ENTER (h5_err_t, "f=%p", f); - if (f->props->throttle > 0) { - // throttle only if VFD is MPIO independent od POSIX - h5_int64_t mask = H5_VFD_MPIO_INDEPENDENT; -#if H5_VERSION_LE(1,8,12) - mask |= H5_VFD_MPIO_POSIX; -#endif - if (! (f->props->flags & mask)) { - h5_warn ( - "Throttling is only permitted with the MPI-POSIX " - "or MPI-IO Independent VFD." ); - H5_CORE_API_LEAVE (H5_SUCCESS); - } - - int token = 1; - h5_info ( - "Throttling with factor = %lld", - (long long int)f->props->throttle); - if (f->myproc / f->props->throttle > 0) { - h5_debug ( - "throttle: waiting on token from %lld", - (long long int)(f->myproc - f->props->throttle)); - // wait to receive token before continuing with read - TRY( h5priv_mpi_recv( - &token, 1, MPI_INT, - f->myproc - f->props->throttle, // receive from previous proc - f->myproc, // use this proc id as message tag - f->props->comm - ) ); - } - h5_debug ("throttle: received token"); - } - H5_CORE_API_RETURN (H5_SUCCESS); -} - -h5_err_t -h5priv_end_throttle ( - const h5_file_p f - ) { - H5_PRIV_API_ENTER (h5_err_t, "f=%p", f); - if (f->props->throttle > 0) { - int token; - if (f->myproc + f->props->throttle < f->nprocs) { - // pass token to next proc - h5_debug ( - "throttle: passing token to %lld", - (long long int)(f->myproc + f->props->throttle)); - TRY (h5priv_mpi_send( - &token, 1, MPI_INT, - f->myproc + f->props->throttle, // send to next proc - f->myproc + f->props->throttle, // use the id of the target as tag - f->props->comm - )); - } - } - H5_PRIV_API_RETURN (H5_SUCCESS); -} -#endif // PARALLEL_IO diff --git a/src/h5core/h5_model_private.h b/src/h5core/h5_model_private.h index 163e93b..6841424 100644 --- a/src/h5core/h5_model_private.h +++ b/src/h5core/h5_model_private.h @@ -26,15 +26,85 @@ #include "h5core/h5_types.h" #include "h5core/h5_model.h" +#include "h5_mpi_private.h" - -h5_err_t +#ifdef PARALLEL_IO +static inline h5_err_t h5priv_start_throttle ( - const h5_file_p); + const h5_file_p f + ) { + H5_CORE_API_ENTER (h5_err_t, "f=%p", f); + if (f->props->throttle > 0) { + // throttle only if VFD is MPIO independent + h5_int64_t mask = H5_VFD_MPIO_INDEPENDENT; +#if H5_VERSION_LE(1,8,12) + // or MPI POSIX - which has been removed in newer versions of hdf5 + mask |= H5_VFD_MPIO_POSIX; +#endif + if (! (f->props->flags & mask)) { + h5_warn ( + "Throttling is only permitted with the MPI-POSIX " + "or MPI-IO Independent VFD." ); + H5_CORE_API_LEAVE (H5_SUCCESS); + } -h5_err_t + int token = 1; + h5_info ( + "Throttling with factor = %lld", + (long long int)f->props->throttle); + if (f->myproc / f->props->throttle > 0) { + h5_debug ( + "throttle: waiting on token from %lld", + (long long int)(f->myproc - f->props->throttle)); + // wait to receive token before continuing with read + TRY( h5priv_mpi_recv( + &token, 1, MPI_INT, + f->myproc - f->props->throttle, // receive from previous proc + f->myproc, // use this proc id as message tag + f->props->comm + ) ); + } + h5_debug ("throttle: received token"); + } + H5_CORE_API_RETURN (H5_SUCCESS); +} + +static inline h5_err_t h5priv_end_throttle ( - const h5_file_p); + const h5_file_p f + ) { + H5_PRIV_API_ENTER (h5_err_t, "f=%p", f); + if (f->props->throttle > 0) { + int token; + if (f->myproc + f->props->throttle < f->nprocs) { + // pass token to next proc + h5_debug ( + "throttle: passing token to %lld", + (long long int)(f->myproc + f->props->throttle)); + TRY (h5priv_mpi_send( + &token, 1, MPI_INT, + f->myproc + f->props->throttle, // send to next proc + f->myproc + f->props->throttle, // use the id of the target as tag + f->props->comm + )); + } + } + H5_PRIV_API_RETURN (H5_SUCCESS); +} +#else // PARALLEL_IO +static inline h5_err_t +h5priv_start_throttle (const h5_file_p f) { + UNUSED_ARGUMENT (f); + return H5_SUCCESS; +} +static inline +h5priv_end_throttle (const h5_file_p f) + UNUSED_ARGUMENT (f); + return H5_SUCCESS; +} + +#endif // PARALLEL_IO + h5_err_t h5priv_close_step ( diff --git a/src/h5core/h5_readwrite.c b/src/h5core/h5_readwrite.c index fc49f22..aa780c3 100644 --- a/src/h5core/h5_readwrite.c +++ b/src/h5core/h5_readwrite.c @@ -80,9 +80,7 @@ h5priv_write_dataset_by_name ( } TRY (memspace_id = (*set_memspace)(m, 0)); TRY (diskspace_id = (*set_diskspace)(m, dataspace_id)); -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (f)); -#endif TRY (hdf5_write_dataset ( dset_id, dsinfo->type_id, @@ -90,9 +88,7 @@ h5priv_write_dataset_by_name ( diskspace_id, f->props->xfer_prop, data)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (f)); -#endif TRY (hdf5_close_dataspace (diskspace_id)); TRY (hdf5_close_dataspace (memspace_id)); TRY (hdf5_close_dataset (dset_id)); @@ -138,9 +134,7 @@ h5priv_write_dataset_by_name_id ( H5_PRIV_API_LEAVE (h5priv_handle_file_mode_error(f->props->flags)); } -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (f)); -#endif TRY (hdf5_write_dataset ( dset_id, dsinfo->type_id, @@ -148,10 +142,7 @@ h5priv_write_dataset_by_name_id ( diskspace_id, f->props->xfer_prop, data)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (f)); -#endif - H5_PRIV_API_RETURN (H5_SUCCESS); } diff --git a/src/h5core/h5b_readwrite.c b/src/h5core/h5b_readwrite.c index 6b9bfc7..2fc5c1d 100644 --- a/src/h5core/h5b_readwrite.c +++ b/src/h5core/h5b_readwrite.c @@ -228,9 +228,7 @@ _write_data ( b->shape, b->dcreate_prop)); } -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (f)); -#endif TRY (hdf5_write_dataset( dataset, type, @@ -238,9 +236,7 @@ _write_data ( b->diskshape, f->props->xfer_prop, data)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (f)); -#endif TRY (hdf5_close_dataset (dataset)); H5_PRIV_FUNC_RETURN (H5_SUCCESS); @@ -391,9 +387,7 @@ read_data ( TRY (dataset = hdf5_open_dataset (b->field_gid, dataset_name)); TRY (_select_hyperslab_for_reading (f, dataset) ); -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (f)); -#endif TRY (hdf5_read_dataset( dataset, type, @@ -401,9 +395,7 @@ read_data ( f->b->diskshape, f->props->xfer_prop, data)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (f)); -#endif TRY (hdf5_close_dataset(dataset)); H5_PRIV_FUNC_RETURN (H5_SUCCESS); diff --git a/src/h5core/h5t_readwrite.c b/src/h5core/h5t_readwrite.c index 51810f1..c9bd6cc 100644 --- a/src/h5core/h5t_readwrite.c +++ b/src/h5core/h5t_readwrite.c @@ -479,10 +479,7 @@ write_vertices_chk ( } TRY (h5priv_mpi_barrier (m->f->props->comm)); m->timing.measure[m->timing.next_time++] = MPI_Wtime(); -#if defined(WITH_PARALLEL_H5FED) TRY (h5priv_start_throttle (m->f)); -#endif - TRY( h5priv_write_dataset_by_name_id ( m->f, @@ -516,9 +513,7 @@ write_vertices_chk ( m->num_leaf_levels, 1)); -#if defined(WITH_PARALLEL_H5FED) TRY (h5priv_end_throttle (m->f)); -#endif TRY (hdf5_close_dataspace (dspace_id)); TRY (hdf5_close_dataspace (mspace_id)); TRY (hdf5_close_dataset (dset_id)); @@ -1135,10 +1130,7 @@ read_vertices ( TRY (h5tpriv_alloc_loc_vertices (m, num_vertices)); } -#if defined(WITH_PARALLEL_H5FED) TRY (h5priv_start_throttle (m->f)); -#endif - TRY (hdf5_read_dataset ( dset_id, m->dsinfo_vertices.type_id, @@ -1146,9 +1138,7 @@ read_vertices ( dspace_id, m->f->props->xfer_prop, m->vertices)); -#if defined(WITH_PARALLEL_H5FED) TRY (h5priv_end_throttle (m->f)); -#endif TRY (hdf5_close_dataspace (dspace_id)); TRY (hdf5_close_dataspace (mspace_id)); TRY (hdf5_close_dataset (dset_id)); @@ -1183,10 +1173,7 @@ read_elems ( &hstart, &hstride, &hcount, NULL)); -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (m->f)); -#endif - TRY (hdf5_read_dataset ( dset_id, m->dsinfo_elems.type_id, @@ -1194,9 +1181,7 @@ read_elems ( dspace_id, m->f->props->xfer_prop, glb_elems)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (m->f)); -#endif TRY (hdf5_close_dataspace (dspace_id)); TRY (hdf5_close_dataspace (mspace_id)); @@ -2620,9 +2605,7 @@ read_chunked_elements ( seloper = H5S_SELECT_OR; } -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (m->f)); -#endif TRY (hdf5_read_dataset ( dset_id, m->dsinfo_elems.type_id, @@ -2630,9 +2613,7 @@ read_chunked_elements ( dspace_id, m->f->props->xfer_prop, *glb_elems)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (m->f)); -#endif TRY (hdf5_close_dataspace (dspace_id)); TRY (hdf5_close_dataspace (mspace_id)); TRY (hdf5_close_dataset (dset_id)); diff --git a/src/h5core/h5t_tags.c b/src/h5core/h5t_tags.c index afc5adb..febde25 100644 --- a/src/h5core/h5t_tags.c +++ b/src/h5core/h5t_tags.c @@ -49,9 +49,7 @@ read_dataset ( TRY (mspace_id = (*set_mspace)(m, dset_id)); TRY (dspace_id = (*set_dspace)(m, dset_id)); -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (f)); -#endif TRY (hdf5_read_dataset ( dset_id, dsinfo->type_id, @@ -59,9 +57,7 @@ read_dataset ( dspace_id, f->props->xfer_prop, data)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (f)); -#endif TRY (hdf5_close_dataspace (dspace_id)); TRY (hdf5_close_dataspace (mspace_id)); diff --git a/src/h5core/h5u_readwrite.c b/src/h5core/h5u_readwrite.c index 0dc1432..a57ff63 100644 --- a/src/h5core/h5u_readwrite.c +++ b/src/h5core/h5u_readwrite.c @@ -154,9 +154,7 @@ h5u_read_data ( memspace_id = H5S_ALL; } } -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (f)); -#endif TRY (hdf5_read_dataset ( dataset_id, type, @@ -164,9 +162,7 @@ h5u_read_data ( space_id, f->props->xfer_prop, data )); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (f)); -#endif if (space_id != f->u->diskshape) { TRY (hdf5_close_dataspace (space_id)); } @@ -215,9 +211,7 @@ h5u_write_data ( H5P_DEFAULT)); } -#ifdef PARALLEL_IO TRY (h5priv_start_throttle (f)); -#endif h5_info ("Writing dataset %s/%s.", hdf5_get_objname(f->step_gid), name2); TRY (hdf5_write_dataset ( @@ -227,9 +221,7 @@ h5u_write_data ( u->diskshape, f->props->xfer_prop, data)); -#ifdef PARALLEL_IO TRY (h5priv_end_throttle (f)); -#endif if (f->props->flags & H5_FLUSH_STEP) TRY (hdf5_flush (f->step_gid, H5F_SCOPE_LOCAL));