[llvm] [Parallel] Ensure getThreadIndex()==0 for sequential tasks (PR #109084)

Alexey Lapshin via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 19 13:25:49 PDT 2024


================
@@ -217,13 +194,18 @@ TaskGroup::~TaskGroup() {
 void TaskGroup::spawn(std::function<void()> F, bool Sequential) {
 #if LLVM_ENABLE_THREADS
   if (Parallel) {
+    if (Sequential) {
+      // Act as worker thread 0.
+      threadIndex = 0;
----------------
avl-llvm wrote:

If the threadIndex would be set to 0 then it might clash with another task which is already has threadIndex equal 0. In that cast the resource with index 0 would be accessed concurrently which is unwanted behavior.

if we will use old behavior:

`if (serial) 
    fn(); 
  else 
tg.execute(fn);
`

then we will have assertion checking that thread_index is not equal UINT_MAX. (thread_index is equal to UINT_MAX for main thread)

In my patch I use separate thread for sequential tasks. It looks like this solve the problem when thread_index equal UINT_MAX and when zero index clashes with another thread.



https://github.com/llvm/llvm-project/pull/109084


More information about the llvm-commits mailing list