Selaa lähdekoodia

Fix prio scheduler: the mutex is already handled by the driver.

Samuel Thibault 13 vuotta sitten
vanhempi
commit
aa0e27fd3b
1 muutettua tiedostoa jossa 3 lisäystä ja 8 poistoa
  1. 3 8
      src/sched_policies/eager_central_priority_policy.c

+ 3 - 8
src/sched_policies/eager_central_priority_policy.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2011  Université de Bordeaux 1
+ * Copyright (C) 2010-2012  Université de Bordeaux 1
  * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -105,7 +105,6 @@ static void deinitialize_eager_center_priority_policy(struct starpu_machine_topo
 static int _starpu_priority_push_task(struct starpu_task *task)
 {
 	/* wake people waiting for a task */
-	_STARPU_PTHREAD_MUTEX_LOCK(&global_sched_mutex);
 
 	_STARPU_TRACE_JOB_PUSH(task, 1);
 
@@ -116,7 +115,6 @@ static int _starpu_priority_push_task(struct starpu_task *task)
 	taskq->total_ntasks++;
 
 	_STARPU_PTHREAD_COND_SIGNAL(&global_sched_cond);
-	_STARPU_PTHREAD_MUTEX_UNLOCK(&global_sched_mutex);
 
 	return 0;
 }
@@ -127,12 +125,10 @@ static struct starpu_task *_starpu_priority_pop_task(void)
 	struct starpu_task *task = NULL;
 
 	/* block until some event happens */
-	_STARPU_PTHREAD_MUTEX_LOCK(&global_sched_mutex);
 
 	if ((taskq->total_ntasks == 0) && _starpu_machine_is_running())
 	{
 #ifdef STARPU_NON_BLOCKING_DRIVERS
-		_STARPU_PTHREAD_MUTEX_UNLOCK(&global_sched_mutex);
 		return NULL;
 #else
 		_STARPU_PTHREAD_COND_WAIT(&global_sched_cond, &global_sched_mutex);
@@ -155,9 +151,8 @@ static struct starpu_task *_starpu_priority_pop_task(void)
 		}
 		while (!task && priolevel-- > 0);
 	}
-	STARPU_ASSERT_MSG(starpu_worker_can_execute_task(starpu_worker_get_id(), task, 0), "prio does not support \"can_execute\"");
-
-	_STARPU_PTHREAD_MUTEX_UNLOCK(&global_sched_mutex);
+	if (task)
+		STARPU_ASSERT_MSG(starpu_worker_can_execute_task(starpu_worker_get_id(), task, 0), "prio does not support \"can_execute\"");
 
 	return task;
 }