Accéder au contenu.
Menu Sympa

starpu-devel - [Starpu-devel] [PATCH 3/7] Heft: use a scheduler-specific fifo rather than pushing tasks directly to the workers' local tasks.

Objet : Developers list for StarPU

Archives de la liste

[Starpu-devel] [PATCH 3/7] Heft: use a scheduler-specific fifo rather than pushing tasks directly to the workers' local tasks.


Chronologique Discussions 
  • From: Cyril Roelandt <cyril.roelandt@inria.fr>
  • To: starpu-devel@lists.gforge.inria.fr
  • Subject: [Starpu-devel] [PATCH 3/7] Heft: use a scheduler-specific fifo rather than pushing tasks directly to the workers' local tasks.
  • Date: Tue, 16 Oct 2012 23:45:06 +0200
  • List-archive: <http://lists.gforge.inria.fr/pipermail/starpu-devel>
  • List-id: "Developers list. For discussion of new features, code changes, etc." <starpu-devel.lists.gforge.inria.fr>

This makes heft look a bit more like the dm* schedulers, thus probably making
a
future code factorization easier.

The "prio" variable used in many different places in heft.c seems no longer
needed, but has been kept so that heft really looks like dm*.
---
trunk/src/sched_policies/heft.c | 32 ++++++++++++++++++++++++++------
1 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/trunk/src/sched_policies/heft.c b/trunk/src/sched_policies/heft.c
index 6a5a2c9..9ec3c3f 100644
--- a/trunk/src/sched_policies/heft.c
+++ b/trunk/src/sched_policies/heft.c
@@ -230,9 +230,9 @@ static int push_task_on_best_worker(struct starpu_task
*task, int best_workerid,
starpu_prefetch_task_input_on_node(task, memory_node);
}

-
- //_STARPU_DEBUG("Heft : pushing local task\n");
- return starpu_push_local_task(best_workerid, task, prio);
+ return _starpu_fifo_push_task(queue_array[best_workerid],
+ &sched_mutex[best_workerid],
+ &sched_cond[best_workerid], task);
}

/* TODO: Correct the bugs in the scheduling !!! */
@@ -431,7 +431,7 @@ static int _heft_push_task(struct starpu_task *task,
unsigned prio)
* Our task uses multiformat handles, which may need
to be converted.
*/
push_conversion_tasks(task, forced_worker);
- prio = 0;
+ task->priority = 0;
}

return push_task_on_best_worker(task, forced_worker, 0.0,
0.0, prio);
@@ -513,7 +513,7 @@ static int _heft_push_task(struct starpu_task *task,
unsigned prio)
* Our task uses multiformat handles, which may need to be
converted.
*/
push_conversion_tasks(task, forced_worker);
- prio = 0;
+ task->priority = 0;
}

return push_task_on_best_worker(task, best, model_best,
transfer_model_best, prio);
@@ -527,6 +527,26 @@ static int heft_push_task(struct starpu_task *task)
return _heft_push_task(task, 0);
}

+static struct starpu_task *heft_pop_task(void)
+{
+ struct starpu_task *task;
+
+ int workerid = starpu_worker_get_id();
+ struct _starpu_fifo_taskq *fifo = queue_array[workerid];
+
+ task = _starpu_fifo_pop_task(fifo, workerid);
+ if (task)
+ {
+ double model = task->predicted;
+
+ fifo->exp_len -= model;
+ fifo->exp_start = starpu_timing_now() + model;
+ fifo->exp_end = fifo->exp_start + fifo->exp_len;
+ }
+
+ return task;
+}
+
static void heft_deinit(__attribute__ ((unused)) struct
starpu_machine_topology *topology,
__attribute__ ((unused)) struct starpu_sched_policy
*_policy)
{
@@ -545,7 +565,7 @@ struct starpu_sched_policy _starpu_sched_heft_policy =
.deinit_sched = heft_deinit,
.push_task = heft_push_task,
.push_task_notify = heft_push_task_notify,
- .pop_task = NULL,
+ .pop_task = heft_pop_task,
.pop_every_task = NULL,
.pre_exec_hook = heft_pre_exec_hook,
.post_exec_hook = NULL,
--
1.7.9






Archives gérées par MHonArc 2.6.19+.

Haut de le page