diff --git a/oshmem/mca/scoll/basic/scoll_basic_alltoall.c b/oshmem/mca/scoll/basic/scoll_basic_alltoall.c index b2d2bf8df13..479e118ec44 100644 --- a/oshmem/mca/scoll/basic/scoll_basic_alltoall.c +++ b/oshmem/mca/scoll/basic/scoll_basic_alltoall.c @@ -72,10 +72,10 @@ int mca_scoll_basic_alltoall(struct oshmem_group_t *group, return rc; } - /* fence (which currently acts as quiet) is needed - * because scoll level barrier does not guarantee put completion + /* quiet is needed because scoll level barrier does not + * guarantee put completion */ - MCA_SPML_CALL(fence()); + MCA_SPML_CALL(quiet()); /* Wait for operation completion */ SCOLL_VERBOSE(14, "[#%d] Wait for operation completion", group->my_pe); diff --git a/oshmem/mca/scoll/basic/scoll_basic_barrier.c b/oshmem/mca/scoll/basic/scoll_basic_barrier.c index 8f2c5970b6f..e7f87a544f4 100644 --- a/oshmem/mca/scoll/basic/scoll_basic_barrier.c +++ b/oshmem/mca/scoll/basic/scoll_basic_barrier.c @@ -167,8 +167,7 @@ static int _algorithm_central_counter(struct oshmem_group_t *group, The root could leave the first barrier and in the second barrier it could get SHMEM_SYNC_WAIT value on remote node before the remote node receives its SHMEM_SYNC_RUN value in the first barrier */ - /* TODO: actually it must be quiet */ - MCA_SPML_CALL(fence()); + MCA_SPML_CALL(quiet()); } /* Wait for RUN signal */ else { diff --git a/oshmem/mca/scoll/basic/scoll_basic_broadcast.c b/oshmem/mca/scoll/basic/scoll_basic_broadcast.c index f184c110bca..bccf48c9c9d 100644 --- a/oshmem/mca/scoll/basic/scoll_basic_broadcast.c +++ b/oshmem/mca/scoll/basic/scoll_basic_broadcast.c @@ -146,10 +146,10 @@ static int _algorithm_central_counter(struct oshmem_group_t *group, rc = MCA_SPML_CALL(put(target, nlong, (void *)source, pe_cur)); } } - /* fence (which currently acts as quiet) is needed - * because scoll level barrier does not guarantee put completion + /* quiet is needed because scoll level barrier does not + * guarantee put completion */ - MCA_SPML_CALL(fence()); + MCA_SPML_CALL(quiet()); } if (rc == OSHMEM_SUCCESS) { diff --git a/oshmem/mca/spml/base/spml_base.c b/oshmem/mca/spml/base/spml_base.c index 75c0f71bb5e..3b950988fa5 100644 --- a/oshmem/mca/spml/base/spml_base.c +++ b/oshmem/mca/spml/base/spml_base.c @@ -153,11 +153,7 @@ int mca_spml_base_wait(void* addr, int cmp, void* value, int datatype) */ int mca_spml_base_wait_nb(void* handle) { - /* TODO fence is a gag for more accurate code - * Use shmem_quiet() (or a function calling shmem_quiet()) or - * shmem_wait_nb() to force completion of transfers for non-blocking operations. - */ - MCA_SPML_CALL(fence()); + MCA_SPML_CALL(quiet()); return OSHMEM_SUCCESS; } diff --git a/oshmem/mca/spml/ikrit/spml_ikrit.c b/oshmem/mca/spml/ikrit/spml_ikrit.c index c1500edeebb..2afe4705b89 100644 --- a/oshmem/mca/spml/ikrit/spml_ikrit.c +++ b/oshmem/mca/spml/ikrit/spml_ikrit.c @@ -168,6 +168,7 @@ mca_spml_ikrit_t mca_spml_ikrit = { mca_spml_ikrit_send, mca_spml_base_wait, mca_spml_base_wait_nb, + mca_spml_ikrit_fence, /* fence is implemented as quiet */ mca_spml_ikrit_fence, mca_spml_ikrit_cache_mkeys, mca_spml_base_rmkey_free, diff --git a/oshmem/mca/spml/spml.h b/oshmem/mca/spml/spml.h index d919cc12be4..f320e83e474 100644 --- a/oshmem/mca/spml/spml.h +++ b/oshmem/mca/spml/spml.h @@ -275,12 +275,19 @@ typedef int (*mca_spml_base_module_send_fn_t)(void *buf, mca_spml_base_put_mode_t mode); /** - * Wait for completion of all outstanding put() requests + * Assures ordering of delivery of put() requests * * @return - OSHMEM_SUCCESS or failure status. */ typedef int (*mca_spml_base_module_fence_fn_t)(void); +/** + * Wait for completion of all outstanding put() requests + * + * @return - OSHMEM_SUCCESS or failure status. + */ +typedef int (*mca_spml_base_module_quiet_fn_t)(void); + /** * Waits for completion of a non-blocking put or get issued by the calling PE. * @@ -321,6 +328,7 @@ struct mca_spml_base_module_1_0_0_t { mca_spml_base_module_wait_fn_t spml_wait; mca_spml_base_module_wait_nb_fn_t spml_wait_nb; mca_spml_base_module_fence_fn_t spml_fence; + mca_spml_base_module_quiet_fn_t spml_quiet; mca_spml_base_module_mkey_unpack_fn_t spml_rmkey_unpack; mca_spml_base_module_mkey_free_fn_t spml_rmkey_free; diff --git a/oshmem/mca/spml/ucx/spml_ucx.c b/oshmem/mca/spml/ucx/spml_ucx.c index 1ab9c7938ee..463b0f0a005 100644 --- a/oshmem/mca/spml/ucx/spml_ucx.c +++ b/oshmem/mca/spml/ucx/spml_ucx.c @@ -60,8 +60,8 @@ mca_spml_ucx_t mca_spml_ucx = { mca_spml_ucx_send, mca_spml_base_wait, mca_spml_base_wait_nb, - mca_spml_ucx_quiet, /* At the moment fence is the same as quite for - every spml */ + mca_spml_ucx_fence, + mca_spml_ucx_quiet, mca_spml_ucx_rmkey_unpack, mca_spml_ucx_rmkey_free, mca_spml_ucx_rmkey_ptr, @@ -520,7 +520,7 @@ int mca_spml_ucx_deregister(sshmem_mkey_t *mkeys) spml_ucx_mkey_t *ucx_mkey; map_segment_t *mem_seg; - MCA_SPML_CALL(fence()); + MCA_SPML_CALL(quiet()); if (!mkeys) return OSHMEM_SUCCESS; @@ -598,7 +598,7 @@ int mca_spml_ucx_fence(void) { ucs_status_t err; - err = ucp_worker_flush(mca_spml_ucx.ucp_worker); + err = ucp_worker_fence(mca_spml_ucx.ucp_worker); if (UCS_OK != err) { SPML_ERROR("fence failed: %s", ucs_status_string(err)); oshmem_shmem_abort(-1); diff --git a/oshmem/shmem/c/shmem_barrier.c b/oshmem/shmem/c/shmem_barrier.c index d524be32fd6..7ce0ddc96f7 100644 --- a/oshmem/shmem/c/shmem_barrier.c +++ b/oshmem/shmem/c/shmem_barrier.c @@ -36,7 +36,7 @@ void shmem_barrier(int PE_start, int logPE_stride, int PE_size, long *pSync) #if OSHMEM_SPEC_COMPAT == 1 /* all outstanding puts must be completed */ - shmem_fence(); + shmem_quiet(); #endif /* Create group basing PE_start, logPE_stride and PE_size */ @@ -54,7 +54,7 @@ void shmem_barrier_all(void) #if OSHMEM_SPEC_COMPAT == 1 /* all outstanding puts must be completed */ - shmem_fence(); + shmem_quiet(); #endif if (mca_scoll_sync_array) { diff --git a/oshmem/shmem/c/shmem_quiet.c b/oshmem/shmem/c/shmem_quiet.c index c0019dfaaf0..834e6c7fe12 100644 --- a/oshmem/shmem/c/shmem_quiet.c +++ b/oshmem/shmem/c/shmem_quiet.c @@ -23,5 +23,5 @@ void shmem_quiet(void) { - MCA_SPML_CALL(fence()); + MCA_SPML_CALL(quiet()); } diff --git a/oshmem/shmem/fortran/shmem_quiet_f.c b/oshmem/shmem/fortran/shmem_quiet_f.c index f7a8a5bf8a2..aa4af87563b 100644 --- a/oshmem/shmem/fortran/shmem_quiet_f.c +++ b/oshmem/shmem/fortran/shmem_quiet_f.c @@ -30,5 +30,5 @@ SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void, void shmem_quiet_f(void) { - MCA_SPML_CALL(fence()); + MCA_SPML_CALL(quiet()); }