[OpenMP] libomp: Add itt notifications to sync dependent tasks.

Intel Inspector uses itt notifications to analyze code execution, and it
reports race conditions in dependent tasks.
This patch fixes the issue notifying Inspector on tasks dependency
synchronizations.

Differential Revision: https://reviews.llvm.org/D123042
This commit is contained in:
AndreyChurbanov 2022-05-05 11:27:48 -05:00 committed by Jonathan Peyton
parent 87e3646a1f
commit 52d0ef3c00
2 changed files with 12 additions and 0 deletions

View File

@ -45,6 +45,9 @@ static void __kmp_init_node(kmp_depnode_t *node) {
#ifdef KMP_SUPPORT_GRAPH_OUTPUT
node->dn.id = KMP_ATOMIC_INC(&kmp_node_id_seed);
#endif
#if USE_ITT_BUILD && USE_ITT_NOTIFY
__itt_sync_create(node, "OMP task dep node", NULL, 0);
#endif
}
static inline kmp_depnode_t *__kmp_node_ref(kmp_depnode_t *node) {

View File

@ -25,6 +25,9 @@ static inline void __kmp_node_deref(kmp_info_t *thread, kmp_depnode_t *node) {
kmp_int32 n = KMP_ATOMIC_DEC(&node->dn.nrefs) - 1;
KMP_DEBUG_ASSERT(n >= 0);
if (n == 0) {
#if USE_ITT_BUILD && USE_ITT_NOTIFY
__itt_sync_destroy(node);
#endif
KMP_ASSERT(node->dn.nrefs == 0);
#if USE_FAST_MEMORY
__kmp_fast_free(thread, node);
@ -125,11 +128,17 @@ static inline void __kmp_release_deps(kmp_int32 gtid, kmp_taskdata_t *task) {
kmp_taskdata_t *next_taskdata;
for (kmp_depnode_list_t *p = node->dn.successors; p; p = next) {
kmp_depnode_t *successor = p->node;
#if USE_ITT_BUILD && USE_ITT_NOTIFY
__itt_sync_releasing(successor);
#endif
kmp_int32 npredecessors = KMP_ATOMIC_DEC(&successor->dn.npredecessors) - 1;
// successor task can be NULL for wait_depends or because deps are still
// being processed
if (npredecessors == 0) {
#if USE_ITT_BUILD && USE_ITT_NOTIFY
__itt_sync_acquired(successor);
#endif
KMP_MB();
if (successor->dn.task) {
KA_TRACE(20, ("__kmp_release_deps: T#%d successor %p of %p scheduled "