From 977b08f7e585fe6eb84f550cfe7706e81c929767 Mon Sep 17 00:00:00 2001
From: Thierry <thierry.gautier@inrialpes.fr>
Date: Tue, 17 Jan 2017 23:46:09 +0100
Subject: [PATCH] Fix steal_task & random NUMA node selection

---
 runtime/src/kmp_tasking.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/runtime/src/kmp_tasking.c b/runtime/src/kmp_tasking.c
index 70b6793..2d29aef 100644
--- a/runtime/src/kmp_tasking.c
+++ b/runtime/src/kmp_tasking.c
@@ -1913,6 +1913,8 @@ __kmp_steal_task( kmp_info_t *victim, kmp_int32 gtid, kmp_task_team_t *task_team
     taskdata = 0;
 
 #if LIBOMP_USE_AFFINITY
+    kmp_info_t*  thread = __kmp_threads[ gtid ];
+
     for (int ii=0; ii<8; ++ii)
     {
       for (int i=0; i<8; ++i)
@@ -1933,22 +1935,19 @@ __kmp_steal_task( kmp_info_t *victim, kmp_int32 gtid, kmp_task_team_t *task_team
       }
 
       victim_queue = &victim_td->td.td_tasks_queues[KMP_LEVEL_CORE]->qd;
-      if (!kaapi_wsqueue_empty(&(victim_queue->td_wsdeque)))
+      if (!kaapi_wsqueue_empty(&victim_queue->td_wsdeque))
       {
-        taskdata = kaapi_wsqueue_steal_task( &(victim_queue->td_wsdeque) );
+        taskdata = kaapi_wsqueue_steal_task( &victim_queue->td_wsdeque );
         if (taskdata) goto return_from;
       }
 
-#if 0 
       { /* random steal on NUMA node */
-        int numa_victim = __kmp_get_random(thread) % kaapi_all_places_count[KAAPI_HWS_LEVELID_NUMA];
-        if (!kaapi_wsqueue_empty(kaapi_all_places[KAAPI_HWS_LEVELID_NUMA][numa_victim]->queue))
-          taskdata = kaapi_wsqueue_steal_task(
-            kaapi_all_places[KAAPI_HWS_LEVELID_NUMA][numa_victim]->queue
-          );
+        int numa_victim = __kmp_get_random(thread) % task_team->tt.tt_nodes_count;
+        victim_queue = &task_team->tt.tt_nodes_tasks_queues[numa_victim]->qd;
+        if (!kaapi_wsqueue_empty( &victim_queue->td_wsdeque ))
+          taskdata = kaapi_wsqueue_steal_task( &victim_queue->td_wsdeque );
         if (taskdata) goto return_from;
       }
-#endif
   }
 #endif
   victim_queue = &victim_td->td.td_tasks_queues[KMP_LEVEL_CORE]->qd;
-- 
GitLab