From 0f83a1fd57d717207e8b89a70306d161fe367f9e Mon Sep 17 00:00:00 2001 From: Alex Mikheev Date: Wed, 23 Nov 2016 14:57:03 +0200 Subject: [PATCH] oshmem: scoll: fixes basic barrier broadcast and alltoall Add missing fence() call to alltoall and central counter broadcast. Signed-off-by: Alex Mikheev --- oshmem/mca/scoll/basic/scoll_basic_alltoall.c | 5 +++++ oshmem/mca/scoll/basic/scoll_basic_barrier.c | 2 +- oshmem/mca/scoll/basic/scoll_basic_broadcast.c | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) 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);