Browse Source

Added a hook function pre_exec_hook called in drivers.

Schedulers can use it to be notified when a task is about being computed.
Nicolas Collin 13 years ago
parent
commit
05fe4bd695

+ 3 - 0
include/starpu_scheduler.h

@@ -98,6 +98,9 @@ struct starpu_sched_policy
 	  * when this method is called. */
 	struct starpu_task *(*pop_every_task)(void);
 
+	/* This method is called every time a task is starting. (optionnal) */
+	void (*pre_exec_hook)(struct starpu_task *);
+
 	/* This method is called every time a task has been executed. (optionnal) */
 	void (*post_exec_hook)(struct starpu_task *);
 

+ 6 - 0
src/core/sched_policy.c

@@ -491,6 +491,12 @@ struct starpu_task *_starpu_pop_every_task(void)
 	return policy.pop_every_task();
 }
 
+void _starpu_sched_pre_exec_hook(struct starpu_task *task)
+{
+	if (policy.pre_exec_hook)
+		policy.pre_exec_hook(task);
+}
+
 void _starpu_sched_post_exec_hook(struct starpu_task *task)
 {
 	if (policy.post_exec_hook)

+ 3 - 0
src/drivers/driver_common/driver_common.c

@@ -38,6 +38,9 @@ void _starpu_driver_start_job(struct _starpu_worker *args, struct _starpu_job *j
 	if (cl->model && cl->model->benchmarking)
 		calibrate_model = 1;
 
+	if (rank == 0)
+		_starpu_sched_pre_exec_hook(task);
+
 	args->status = STATUS_EXECUTING;
 	task->status = STARPU_TASK_RUNNING;
 

+ 4 - 0
src/drivers/gordon/driver_gordon.c

@@ -261,6 +261,8 @@ int inject_task(struct _starpu_job *j, struct _starpu_worker *worker)
 		return STARPU_TRYAGAIN;
 	}
 
+	_starpu_sched_pre_exec_hook(task);
+
 	struct gordon_task_wrapper_s *task_wrapper = starpu_to_gordon_job(j);
 
 	task_wrapper->worker = worker;
@@ -316,6 +318,8 @@ int inject_task_list(struct _starpu_job_list *list, struct _starpu_worker *worke
 		ret = _starpu_fetch_task_input(j, 0);
 		STARPU_ASSERT(!ret);
 
+		_starpu_sched_pre_exec_hook(task);
+
 		gordon_jobs[index].index = _starpu_task_get_gordon_nth_implementation(task->cl, j->nimpl);
 
 		struct starpu_perfmodel *model = j->task->cl->model;

+ 4 - 0
src/sched_policies/deque_modeling_policy_data_aware.c

@@ -637,6 +637,7 @@ struct starpu_sched_policy _starpu_sched_dm_policy =
 	.deinit_sched = deinitialize_dmda_policy,
 	.push_task = dm_push_task,
 	.pop_task = dmda_pop_task,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dm",
@@ -649,6 +650,7 @@ struct starpu_sched_policy _starpu_sched_dmda_policy =
 	.deinit_sched = deinitialize_dmda_policy,
 	.push_task = dmda_push_task,
 	.pop_task = dmda_pop_task,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dmda",
@@ -661,6 +663,7 @@ struct starpu_sched_policy _starpu_sched_dmda_sorted_policy =
 	.deinit_sched = deinitialize_dmda_policy,
 	.push_task = dmda_push_sorted_task,
 	.pop_task = dmda_pop_ready_task,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dmdas",
@@ -673,6 +676,7 @@ struct starpu_sched_policy _starpu_sched_dmda_ready_policy =
 	.deinit_sched = deinitialize_dmda_policy,
 	.push_task = dmda_push_task,
 	.pop_task = dmda_pop_ready_task,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = dmda_pop_every_task,
 	.policy_name = "dmdar",

+ 1 - 0
src/sched_policies/eager_central_policy.c

@@ -73,6 +73,7 @@ struct starpu_sched_policy _starpu_sched_eager_policy =
 	.deinit_sched = deinitialize_eager_center_policy,
 	.push_task = push_task_eager_policy,
 	.pop_task = pop_task_eager_policy,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = pop_every_task_eager_policy,
 	.policy_name = "eager",

+ 1 - 0
src/sched_policies/eager_central_priority_policy.c

@@ -169,6 +169,7 @@ struct starpu_sched_policy _starpu_sched_prio_policy =
 	/* we always use priorities in that policy */
 	.push_task = _starpu_priority_push_task,
 	.pop_task = _starpu_priority_pop_task,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "prio",

+ 1 - 0
src/sched_policies/heft.c

@@ -531,6 +531,7 @@ struct starpu_sched_policy heft_policy =
 	.push_task_notify = heft_push_task_notify,
 	.pop_task = NULL,
 	.pop_every_task = NULL,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = heft_post_exec_hook,
 	.policy_name = "heft",
 	.policy_description = "Heterogeneous Earliest Finish Task"

+ 1 - 0
src/sched_policies/parallel_greedy.c

@@ -241,6 +241,7 @@ struct starpu_sched_policy _starpu_sched_pgreedy_policy =
 	.deinit_sched = deinitialize_pgreedy_policy,
 	.push_task = push_task_pgreedy_policy,
 	.pop_task = pop_task_pgreedy_policy,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "pgreedy",

+ 1 - 0
src/sched_policies/parallel_heft.c

@@ -448,6 +448,7 @@ struct starpu_sched_policy _starpu_sched_parallel_heft_policy =
 	.deinit_sched = NULL,
 	.push_task = parallel_heft_push_task,
 	.pop_task = NULL,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = parallel_heft_post_exec_hook,
 	.pop_every_task = NULL,
 	.policy_name = "pheft",

+ 1 - 0
src/sched_policies/random_policy.c

@@ -91,6 +91,7 @@ struct starpu_sched_policy _starpu_sched_random_policy =
 	.deinit_sched = NULL,
 	.push_task = random_push_task,
 	.pop_task = NULL,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "random",

+ 1 - 0
src/sched_policies/work_stealing_policy.c

@@ -227,6 +227,7 @@ struct starpu_sched_policy _starpu_sched_ws_policy =
 	.deinit_sched = NULL,
 	.push_task = ws_push_task,
 	.pop_task = ws_pop_task,
+	.pre_exec_hook = NULL,
 	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "ws",