[Openmp-commits] [PATCH] D112861: [OpenMP][DeviceRTL] Fixed an issue that causes hang in SU3

Ye Luo via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Sat Oct 30 17:52:12 PDT 2021


ye-luo added inline comments.


================
Comment at: openmp/libomptarget/DeviceRTL/src/Parallelism.cpp:129
+    // __kmpc_target_deinit may not hold.
+    synchronize::threadsAligned();
+
----------------
ye-luo wrote:
> tianshilei1992 wrote:
> > ye-luo wrote:
> > > ye-luo wrote:
> > > > tianshilei1992 wrote:
> > > > > ye-luo wrote:
> > > > > > This explanation seems plausible. Are the synchronization requirement of ASSERT and why being documented somewhere?
> > > > > Have no idea.
> > > > synchronize::threadsAligned() has been called at the end of above scope.
> > > > What caused the out of  sync and needs this additional call?
> > > > Why ASSERT requires synchronization.
> > > > All needs explanation or documentation.
> > > > "Synchronize all threads to make sure every thread exits the scope above;"
> > > > Just sounds plausible
> > > Making code slower by the addtional synchronization can also potentially skip triggering the hang. So it needs to be well understood and explained.
> > The key point here is the scope because state configuration is via RAII. The synchronization at the end of the scope can only make sure threads are aligned *before* exiting the scope, but since then, it is undetermined which threads exits first.
> If the destructor sets a state which is supposed to be shared by all the threads, can synchronize::threadsAligned() be called inside the destructor?
OK. The destructor is only for a single value and having one alignment for multiple destructors is beneficial.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112861/new/

https://reviews.llvm.org/D112861



More information about the Openmp-commits mailing list