libgomp: disable barriers in nested teams
authorAndrew Stubbs <ams@codesourcery.com>
Thu, 17 Sep 2020 11:53:39 +0000 (12:53 +0100)
committerAndrew Stubbs <ams@codesourcery.com>
Tue, 29 Sep 2020 10:48:04 +0000 (11:48 +0100)
commit6f513951972b47e3f86898ff2ce59ed8abe2dd39
tree7d429d1099482b891546e466971af6061965605c
parent95e10b8aa1066dbd5c433e613652674b0636fcd1
libgomp: disable barriers in nested teams

Both GCN and NVPTX allow nested parallel regions, but the barrier
implementation did not allow the nested teams to run independently of each
other (due to hardware limitations).  This patch fixes that, under the
assumption that each thread will create a new subteam of one thread, by
simply not using barriers when there's no other thread to synchronise.

libgomp/ChangeLog:

* config/gcn/bar.c (gomp_barrier_wait_end): Skip the barrier if the
total number of threads is one.
(gomp_team_barrier_wake): Likewise.
(gomp_team_barrier_wait_end): Likewise.
(gomp_team_barrier_wait_cancel_end): Likewise.
* config/nvptx/bar.c (gomp_barrier_wait_end): Likewise.
(gomp_team_barrier_wake): Likewise.
(gomp_team_barrier_wait_end): Likewise.
(gomp_team_barrier_wait_cancel_end): Likewise.
* testsuite/libgomp.c-c++-common/nested-parallel-unbalanced.c: New test.
libgomp/config/gcn/bar.c
libgomp/config/nvptx/bar.c
libgomp/testsuite/libgomp.c-c++-common/nested-parallel-unbalanced.c [new file with mode: 0644]