Fix race condition on info.thread_id in OpenMP scheduler (#399)
authorSimone Pellegrini <37897514+simpel01@users.noreply.github.com>
Thu, 29 Mar 2018 09:59:28 +0000 (11:59 +0200)
committerAnthony Barbier <Anthony.barbier@arm.com>
Thu, 29 Mar 2018 09:59:28 +0000 (10:59 +0100)
Additionally refactor improper use of OpenMP's worksharing
construct (for).

src/runtime/OMP/OMPScheduler.cpp

index 1dd2511..d68b8af 100644 (file)
@@ -71,15 +71,12 @@ void OMPScheduler::schedule(ICPPKernel *kernel, unsigned int split_dimension)
     }
     else
     {
-        #pragma omp parallel num_threads(info.num_threads)
+        #pragma omp parallel private(info) num_threads(info.num_threads)
         {
-            #pragma omp for
-            for(int t = 0; t < info.num_threads; ++t)
-            {
-                Window win     = max_window.split_window(split_dimension, t, info.num_threads);
-                info.thread_id = t;
-                kernel->run(win, info);
-            }
+            const int tid  = omp_get_thread_num();
+            Window win     = max_window.split_window(split_dimension, tid, info.num_threads);
+            info.thread_id = tid;
+            kernel->run(win, info);
         }
     }
 }