Forráskód Böngészése

Tell helgrind that we're fine with reading outdated values of njobs

Samuel Thibault 12 éve
szülő
commit
f14d5596de
1 módosított fájl, 16 hozzáadás és 1 törlés
  1. 16 1
      src/sched_policies/work_stealing_policy.c

+ 16 - 1
src/sched_policies/work_stealing_policy.c

@@ -59,10 +59,25 @@ static unsigned select_victim_round_robin(unsigned sched_ctx_id)
 	unsigned worker = ws->last_pop_worker;
 	unsigned nworkers = starpu_sched_ctx_get_nworkers(sched_ctx_id);
 
+	_starpu_pthread_mutex_t *victim_sched_mutex;
+	_starpu_pthread_cond_t *victim_sched_cond;
+
 	/* If the worker's queue is empty, let's try
 	 * the next ones */
-	while (!ws->queue_array[worker]->njobs)
+	while (1)
 	{
+		unsigned njobs;
+
+		starpu_worker_get_sched_condition(worker, &victim_sched_mutex, &victim_sched_cond);
+		VALGRIND_HG_MUTEX_LOCK_PRE(victim_sched_mutex, 0);
+		VALGRIND_HG_MUTEX_LOCK_POST(victim_sched_mutex);
+		njobs = ws->queue_array[worker]->njobs;
+		VALGRIND_HG_MUTEX_UNLOCK_PRE(victim_sched_mutex);
+		VALGRIND_HG_MUTEX_UNLOCK_POST(victim_sched_mutex);
+
+		if (njobs)
+			break;
+
 		worker = (worker + 1) % nworkers;
 		if (worker == ws->last_pop_worker)
 		{