https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97649
Bug ID: 97649
Summary: OpenMP: 'target teams' with host-fallback: race
condition according to TSAN
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Keywords: openmp
Severity: normal
Priority: P3
Component: libgomp
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
CC: jakub at gcc dot gnu.org
Target Milestone: ---
Created attachment 49474
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49474&action=edit
Test case - run with: -fopenmp -fsanitize=thread -foffload=disable
Based on https://github.com/SOLLVE/sollve_vv/pull/226/files
If I use
#pragma omp teams distribute parallel for ...
TSAN is happy.
However, if I nest this in 'target'
#pragma omp target teams distribute parallel for ...
and run it with host fallback (here: compiler not configured for offloading)
TSAN complains that
- one thread is already reading the value in loop 3
- while another one is writing to it in loop 2.
(If I don't use TSAN, it passes on the host and also with nvptx offloading,
but does does not rule out any race condition, either.)
With -O0, I get one error:
WARNING: ThreadSanitizer: data race (pid=2194215)
Read of size 4 at 0x7ffc78d34718 by main thread:
#0 test_target_teams_distribute_parallel_for_collapse <null>
(a.out+0x40239f)
#1 main <null> (a.out+0x401144)
Previous write of size 4 at 0x7ffc78d34718 by thread T1:
#0 test_target_teams_distribute_parallel_for_collapse._omp_fn.1 <null>
(a.out+0x401572)
#1 gomp_thread_start ../../../repos/gcc/libgomp/team.c:123
(libgomp.so.1+0x1ce05)
With -O3, I get plenty.