[Openmp-commits] [PATCH] D123042: [OpenMP] libomp: Add itt notifications to sync dependent tasks.
Andrey Churbanov via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Mon Apr 4 08:51:55 PDT 2022
AndreyChurbanov created this revision.
AndreyChurbanov added reviewers: hbae, jlpeyton, tlwilmar.
AndreyChurbanov added a project: OpenMP.
Herald added subscribers: guansong, yaxunl.
Herald added a project: All.
AndreyChurbanov requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: openmp-commits, sstefan1.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D123042
Files:
openmp/runtime/src/kmp_taskdeps.cpp
openmp/runtime/src/kmp_taskdeps.h
Index: openmp/runtime/src/kmp_taskdeps.h
===================================================================
--- openmp/runtime/src/kmp_taskdeps.h
+++ openmp/runtime/src/kmp_taskdeps.h
@@ -25,6 +25,9 @@
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 @@
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 "
Index: openmp/runtime/src/kmp_taskdeps.cpp
===================================================================
--- openmp/runtime/src/kmp_taskdeps.cpp
+++ openmp/runtime/src/kmp_taskdeps.cpp
@@ -45,6 +45,9 @@
#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) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123042.420197.patch
Type: text/x-patch
Size: 1630 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20220404/9ce2ddfc/attachment.bin>
More information about the Openmp-commits
mailing list