Bläddra i källkod

Tell valgrind that we are fine with reading outdated values

Samuel Thibault 12 år sedan
förälder
incheckning
0348a5b075
1 ändrade filer med 41 tillägg och 3 borttagningar
  1. 41 3
      src/sched_policies/parallel_heft.c

+ 41 - 3
src/sched_policies/parallel_heft.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2012 inria
- * Copyright (C) 2010-2012  Université de Bordeaux 1
+ * Copyright (C) 2010-2013  Université de Bordeaux 1
  * Copyright (C) 2011  Télécom-SudParis
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -185,10 +185,23 @@ static int push_task_on_best_worker(struct starpu_task *task, int best_workerid,
 
 static double compute_expected_end(int workerid, double length)
 {
+	_starpu_pthread_mutex_t *sched_mutex;
+	_starpu_pthread_cond_t *sched_cond;
+
+	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
+
 	if (!starpu_worker_is_combined_worker(workerid))
 	{
+		double res;
 		/* This is a basic worker */
-		return worker_exp_start[workerid] + worker_exp_len[workerid] + length;
+
+		VALGRIND_HG_MUTEX_LOCK_PRE(sched_mutex, 0);
+		VALGRIND_HG_MUTEX_LOCK_POST(sched_mutex);
+		res = worker_exp_start[workerid] + worker_exp_len[workerid] + length;
+		VALGRIND_HG_MUTEX_UNLOCK_PRE(sched_mutex);
+		VALGRIND_HG_MUTEX_UNLOCK_POST(sched_mutex);
+
+		return res;
 	}
 	else
 	{
@@ -199,6 +212,9 @@ static double compute_expected_end(int workerid, double length)
 
 		double exp_end = DBL_MIN;
 
+		VALGRIND_HG_MUTEX_LOCK_PRE(sched_mutex, 0);
+		VALGRIND_HG_MUTEX_LOCK_POST(sched_mutex);
+
 		int i;
 		for (i = 0; i < worker_size; i++)
 		{
@@ -208,6 +224,9 @@ static double compute_expected_end(int workerid, double length)
 			exp_end = STARPU_MAX(exp_end, local_exp_end);
 		}
 
+		VALGRIND_HG_MUTEX_UNLOCK_PRE(sched_mutex);
+		VALGRIND_HG_MUTEX_UNLOCK_POST(sched_mutex);
+
 		return exp_end;
 	}
 }
@@ -215,10 +234,23 @@ static double compute_expected_end(int workerid, double length)
 static double compute_ntasks_end(int workerid)
 {
 	enum starpu_perf_archtype perf_arch = starpu_worker_get_perf_archtype(workerid);
+	_starpu_pthread_mutex_t *sched_mutex;
+	_starpu_pthread_cond_t *sched_cond;
+
+	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
+
 	if (!starpu_worker_is_combined_worker(workerid))
 	{
+		double res;
 		/* This is a basic worker */
-		return ntasks[workerid] / starpu_worker_get_relative_speedup(perf_arch);
+
+		VALGRIND_HG_MUTEX_LOCK_PRE(sched_mutex, 0);
+		VALGRIND_HG_MUTEX_LOCK_POST(sched_mutex);
+		res = ntasks[workerid] / starpu_worker_get_relative_speedup(perf_arch);
+		VALGRIND_HG_MUTEX_UNLOCK_PRE(sched_mutex);
+		VALGRIND_HG_MUTEX_UNLOCK_POST(sched_mutex);
+
+		return res;
 	}
 	else
 	{
@@ -229,6 +261,9 @@ static double compute_ntasks_end(int workerid)
 
 		int ntasks_end=0;
 
+		VALGRIND_HG_MUTEX_LOCK_PRE(sched_mutex, 0);
+		VALGRIND_HG_MUTEX_LOCK_POST(sched_mutex);
+
 		int i;
 		for (i = 0; i < worker_size; i++)
 		{
@@ -236,6 +271,9 @@ static double compute_ntasks_end(int workerid)
 			ntasks_end = STARPU_MAX(ntasks_end, (int) ((double) ntasks[combined_workerid[i]] / starpu_worker_get_relative_speedup(perf_arch)));
 		}
 
+		VALGRIND_HG_MUTEX_UNLOCK_PRE(sched_mutex);
+		VALGRIND_HG_MUTEX_UNLOCK_POST(sched_mutex);
+
 		return ntasks_end;
 	}
 }