From 7e23b46ab8da7ccd038a0987e947e4bec5ce2d4b Mon Sep 17 00:00:00 2001 From: Hansang Bae Date: Mon, 2 May 2022 13:42:26 -0500 Subject: [PATCH] [OpenMP] Possible fix for sporadic test failure from loop_dispatch.c This patch tries to fix sporadic test failure after the change https://reviews.llvm.org/D122107. Made the test wait until every thread has at least one loop iteration. Differential Revision: https://reviews.llvm.org/D124812 --- .../test/ompt/worksharing/for/loop_dispatch.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/openmp/runtime/test/ompt/worksharing/for/loop_dispatch.c b/openmp/runtime/test/ompt/worksharing/for/loop_dispatch.c index 9fe3616847ad..2bd8af427f61 100644 --- a/openmp/runtime/test/ompt/worksharing/for/loop_dispatch.c +++ b/openmp/runtime/test/ompt/worksharing/for/loop_dispatch.c @@ -9,22 +9,33 @@ int main() { int i; + int wait_s = 0; #pragma omp parallel num_threads(4) { + int wait_id = 0; + int team_size = omp_get_num_threads(); #pragma omp for schedule(static, WORK_SIZE / 4) for (i = 0; i < WORK_SIZE; i++) {} #pragma omp for schedule(dynamic) for (i = 0; i < WORK_SIZE; i++) { - // Make every iteration takes at least 1ms. - delay(1000); + if (wait_id == 0) { + // Wait until every thread has at least one iteration assigned + OMPT_SIGNAL(wait_s); + OMPT_WAIT(wait_s, team_size); + wait_id++; + } } #pragma omp for schedule(guided) for (i = 0; i < WORK_SIZE; i++) { - // Make every iteration takes at least 1ms. - delay(1000); + if (wait_id == 1) { + // Wait until every thread has at least one iteration assigned + OMPT_SIGNAL(wait_s); + OMPT_WAIT(wait_s, 2 * team_size); + wait_id++; + } } }