瀏覽代碼

update graph_test policy with new synchro scheme

Olivier Aumage 8 年之前
父節點
當前提交
7f6c965ee1
共有 2 個文件被更改,包括 11 次插入2 次删除
  1. 1 1
      src/core/sched_policy.c
  2. 10 1
      src/sched_policies/graph_test_policy.c

+ 1 - 1
src/core/sched_policy.c

@@ -72,7 +72,6 @@ static struct starpu_sched_policy *predefined_policies[] =
 	&_starpu_sched_dmda_sorted_decision_policy,
 	&_starpu_sched_parallel_heft_policy,
 	&_starpu_sched_heteroprio_policy,
-	&_starpu_sched_graph_test_policy,
 #else
 	&_starpu_sched_eager_policy,
 	&_starpu_sched_prio_policy,
@@ -80,6 +79,7 @@ static struct starpu_sched_policy *predefined_policies[] =
 	&_starpu_sched_peager_policy,
 	&_starpu_sched_ws_policy,
 	&_starpu_sched_lws_policy,
+	&_starpu_sched_graph_test_policy,
 #warning TODO: update sched policies with new synchro scheme
 #endif
 	NULL

+ 10 - 1
src/sched_policies/graph_test_policy.c

@@ -200,7 +200,9 @@ static void do_schedule_graph_test_policy(unsigned sched_ctx_id)
 	{
 		/* Wake each worker */
 		unsigned worker = workers->get_next(workers, &it);
+		STARPU_PTHREAD_MUTEX_LOCK_SCHED(&worker->sched_mutex);
 		starpu_wake_worker(worker);
+		STARPU_PTHREAD_MUTEX_UNLOCK_SCHED(&worker->sched_mutex);
 	}
 #endif
 }
@@ -277,8 +279,13 @@ static int push_task_graph_test_policy(struct starpu_task *task)
 	{
 		unsigned worker = workers->get_next(workers, &it);
 		if (dowake[worker])
-			if (starpu_wake_worker(worker))
+		{
+			STARPU_PTHREAD_MUTEX_LOCK_SCHED(&worker->sched_mutex);
+			int ret = starpu_wake_worker(worker);
+			STARPU_PTHREAD_MUTEX_UNLOCK_SCHED(&worker->sched_mutex);
+			if (ret)
 				break; // wake up a single worker
+		}
 	}
 #endif
 
@@ -313,7 +320,9 @@ static struct starpu_task *pop_task_graph_test_policy(unsigned sched_ctx_id)
 		return NULL;
 #endif
 
+	_starpu_worker_enter_section_safe_for_observation();
 	STARPU_PTHREAD_MUTEX_LOCK(&data->policy_mutex);
+	_starpu_worker_leave_section_safe_for_observation();
 	if (!data->computed)
 	{
 		STARPU_PTHREAD_MUTEX_UNLOCK(&data->policy_mutex);