diff --git a/oshmem/mca/scoll/basic/scoll_basic_alltoall.c b/oshmem/mca/scoll/basic/scoll_basic_alltoall.c index eeb4964890..cc97a05f21 100644 --- a/oshmem/mca/scoll/basic/scoll_basic_alltoall.c +++ b/oshmem/mca/scoll/basic/scoll_basic_alltoall.c @@ -105,6 +105,10 @@ static int _algorithm_simple(struct oshmem_group_t *group, break; } } + /* fence (which currently acts as quiet) is needed + * because scoll level barrier does not guarantee put completion + */ + MCA_SPML_CALL(fence()); /* Wait for operation completion */ if (rc == OSHMEM_SUCCESS) { @@ -116,3 +120,4 @@ static int _algorithm_simple(struct oshmem_group_t *group, return rc; } + diff --git a/oshmem/mca/scoll/basic/scoll_basic_barrier.c b/oshmem/mca/scoll/basic/scoll_basic_barrier.c index bf51dc82aa..8f2c5970b6 100644 --- a/oshmem/mca/scoll/basic/scoll_basic_barrier.c +++ b/oshmem/mca/scoll/basic/scoll_basic_barrier.c @@ -528,7 +528,7 @@ static int _algorithm_basic(struct oshmem_group_t *group, long *pSync) for (i = 0; (i < group->proc_count) && (rc == OSHMEM_SUCCESS); i++) { pe_cur = oshmem_proc_pe(group->proc_array[i]); if (pe_cur != PE_root) { - rc = MCA_SPML_CALL(recv(NULL, 0, SHMEM_ANY_SOURCE)); + rc = MCA_SPML_CALL(recv(NULL, 0, pe_cur)); } if (OSHMEM_SUCCESS != rc) { return rc; diff --git a/oshmem/mca/scoll/basic/scoll_basic_broadcast.c b/oshmem/mca/scoll/basic/scoll_basic_broadcast.c index 5c66dfc06c..f184c110bc 100644 --- a/oshmem/mca/scoll/basic/scoll_basic_broadcast.c +++ b/oshmem/mca/scoll/basic/scoll_basic_broadcast.c @@ -146,11 +146,15 @@ 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 + */ + MCA_SPML_CALL(fence()); } - /* Wait for operation completion to set needed size */ if (rc == OSHMEM_SUCCESS) { SCOLL_VERBOSE(14, "[#%d] Wait for operation completion", group->my_pe); + /* wait until root finishes sending data */ rc = BARRIER_FUNC(group, (pSync + 1), SCOLL_DEFAULT_ALG);