diff options
author | Kwok Cheung Yeung <kcy@codesourcery.com> | 2020-07-14 10:31:35 -0700 |
---|---|---|
committer | Kwok Cheung Yeung <kcy@codesourcery.com> | 2020-07-14 11:34:20 -0700 |
commit | a1c022d1b9a43f85f0c451b6422fd095a704fe96 (patch) | |
tree | 91aa1d6839752a46678969dbd227309772f87390 /fixincludes/config.h.in | |
parent | 74d4c8bda2998e32e6c3b397cc61eadb4b208f0b (diff) | |
download | gcc-a1c022d1b9a43f85f0c451b6422fd095a704fe96.tar.gz |
libgomp: Fix hang when profiling OpenACC programs with CUDA 9.0 nvprof
The version of nvprof in CUDA 9.0 causes a hang when used to profile an
OpenACC program. This is because it calls acc_get_device_type from
a callback called during device initialization, which then attempts
to acquire acc_device_lock while it is already taken, resulting in
deadlock. This works around the issue by returning acc_device_none
from acc_get_device_type without attempting to acquire the lock when
initialization has not completed yet.
2020-07-14 Tom de Vries <tom@codesourcery.com>
Cesar Philippidis <cesar@codesourcery.com>
Thomas Schwinge <thomas@codesourcery.com>
Kwok Cheung Yeung <kcy@codesourcery.com>
libgomp/
* oacc-init.c (acc_init_state_lock, acc_init_state, acc_init_thread):
New variable.
(acc_init_1): Set acc_init_thread to pthread_self (). Set
acc_init_state to initializing at the start, and to initialized at the
end.
(self_initializing_p): New function.
(acc_get_device_type): Return acc_device_none if called by thread that
is currently executing acc_init_1.
* libgomp.texi (acc_get_device_type): Update documentation.
(Implementation Status and Implementation-Defined Behavior): Likewise.
* testsuite/libgomp.oacc-c-c++-common/acc_prof-init-2.c: New.
(cherry picked from commit b52643ab9004ba8ecea06a399885fe1e04183eda)
Diffstat (limited to 'fixincludes/config.h.in')
0 files changed, 0 insertions, 0 deletions