This is an archive of the discontinued LLVM Phabricator instance.

[OpenMP] Fix bug 50022
ClosedPublic

Authored by tianshilei1992 on Jul 21 2021, 8:48 PM.

Details

Summary

Bug 50022 [0] reports target nowait fails in certain case, which is added in this
patch. The root cause of the failure is, when the second task is created, its
parent's td_incomplete_child_tasks will not be incremented because there is no
parallel region here thus its team is serialized. Therefore, when the initial
thread is waiting for its unfinished children tasks, it thought there is only
one, the first task, because it is hidden helper task, so it is tracked. The
second task will only be pushed to the queue when the first task is finished.
However, when the first task finishes, it first decrements the counter of its
parent, and then release dependences. Once the counter is decremented, the thread
will move on because its counter is reset, but actually, the second task has not
been executed at all. As a result, since in this case, the main function finishes,
then libomp starts to destroy. When the second task is pushed somewhere, all
some of the structures might already have already been destroyed, then anything
could happen.

This patch simply moves __kmp_release_deps ahead of decrement of the counter.
In this way, we can make sure that the initial thread is aware of the existence
of another task(s) so it will not move on. In addition, in order to tackle
dependence chain starting with hidden helper thread, when hidden helper task is
encountered, we force the task to release dependences.

Reference:
[0] https://bugs.llvm.org/show_bug.cgi?id=50022

Diff Detail

Event Timeline

tianshilei1992 created this revision.Jul 21 2021, 8:48 PM
tianshilei1992 requested review of this revision.Jul 21 2021, 8:48 PM
Herald added a project: Restricted Project. · View Herald Transcript

Ping.

@ye-luo Can you also try if this patch (plus those that already landed) can fix the issue in QMCPack?

Ping.

@ye-luo Can you also try if this patch (plus those that already landed) can fix the issue in QMCPack?

It fixes the bug but doesn't help QMCPACK.

Ping.

@ye-luo Can you also try if this patch (plus those that already landed) can fix the issue in QMCPack?

It fixes the bug but doesn't help QMCPACK.

Okay thanks. Then QMCPack is because of another issue.

This revision is now accepted and ready to land.Jul 23 2021, 1:45 PM
This revision was automatically updated to reflect the committed changes.