浏览代码

Use pre_exec_hook in parallel_heft instead of post_exec_hook.

Nicolas Collin 13 年之前
父节点
当前提交
f9f4e490a0
共有 1 个文件被更改,包括 12 次插入8 次删除
  1. 12 8
      src/sched_policies/parallel_heft.c

+ 12 - 8
src/sched_policies/parallel_heft.c

@@ -51,7 +51,7 @@ static double worker_exp_end[STARPU_NMAXWORKERS];
 static double worker_exp_len[STARPU_NMAXWORKERS];
 static int ntasks[STARPU_NMAXWORKERS];
 
-static void parallel_heft_post_exec_hook(struct starpu_task *task)
+static void parallel_heft_pre_exec_hook(struct starpu_task *task)
 {
 	if (!task->cl || task->execute_on_a_specific_worker)
 		return;
@@ -67,7 +67,7 @@ static void parallel_heft_post_exec_hook(struct starpu_task *task)
 	 * of work. */
 	_STARPU_PTHREAD_MUTEX_LOCK(&sched_mutex[workerid]);
 	worker_exp_len[workerid] -= model + transfer_model;
-	worker_exp_start[workerid] = starpu_timing_now();
+	worker_exp_start[workerid] = starpu_timing_now() + model;
 	worker_exp_end[workerid] = worker_exp_start[workerid] + worker_exp_len[workerid];
 	ntasks[workerid]--;
 	_STARPU_PTHREAD_MUTEX_UNLOCK(&sched_mutex[workerid]);
@@ -95,12 +95,14 @@ static int push_task_on_best_worker(struct starpu_task *task, int best_workerid,
 		task->predicted = exp_end_predicted - worker_exp_end[best_workerid];
 		/* TODO */
 		task->predicted_transfer = 0;
+
 		_STARPU_PTHREAD_MUTEX_LOCK(&sched_mutex[best_workerid]);
+
+		worker_exp_start[best_workerid] = STARPU_MAX(worker_exp_start[best_workerid], starpu_timing_now());
 		worker_exp_len[best_workerid] += task->predicted;
 		worker_exp_end[best_workerid] = exp_end_predicted;
-		worker_exp_start[best_workerid] = exp_end_predicted - worker_exp_len[best_workerid];
-
 		ntasks[best_workerid]++;
+
 		_STARPU_PTHREAD_MUTEX_UNLOCK(&sched_mutex[best_workerid]);
 
 		ret = starpu_push_local_task(best_workerid, task, prio);
@@ -133,15 +135,17 @@ static int push_task_on_best_worker(struct starpu_task *task, int best_workerid,
 			alias->predicted_transfer = 0;
 
 			_STARPU_PTHREAD_MUTEX_LOCK(&sched_mutex[local_worker]);
+
+			worker_exp_start[local_worker] = STARPU_MAX(worker_exp_start[local_worker], starpu_timing_now());
 			worker_exp_len[local_worker] += alias->predicted;
 			worker_exp_end[local_worker] = exp_end_predicted;
-			worker_exp_start[local_worker] = exp_end_predicted - worker_exp_len[local_worker];
-
 			ntasks[local_worker]++;
+
 			_STARPU_PTHREAD_MUTEX_UNLOCK(&sched_mutex[local_worker]);
 
 			ret |= starpu_push_local_task(local_worker, alias, prio);
 		}
+		//TODO : free task
 
 	}
 
@@ -461,8 +465,8 @@ 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,
+	.pre_exec_hook = parallel_heft_pre_exec_hook,
+	.post_exec_hook = NULL,
 	.pop_every_task = NULL,
 	.policy_name = "pheft",
 	.policy_description = "parallel HEFT"