Parcourir la source

Adding prefetching in tree-heft scheduler

Marc Sergent il y a 11 ans
Parent
commit
b31fbe2ce6

+ 1 - 0
include/starpu_sched_node.h

@@ -141,6 +141,7 @@ void starpu_sched_node_remove_child(struct starpu_sched_node * node, struct star
 int starpu_sched_node_can_execute_task(struct starpu_sched_node * node, struct starpu_task * task);
 int STARPU_WARN_UNUSED_RESULT starpu_sched_node_execute_preds(struct starpu_sched_node * node, struct starpu_task * task, double * length);
 double starpu_sched_node_transfer_length(struct starpu_sched_node * node, struct starpu_task * task);
+void starpu_sched_node_prefetch_on_node(struct starpu_sched_node * node, struct starpu_task * task);
 
 
 /* no public create function for workers because we dont want to have several node_worker for a single workerid */

+ 3 - 0
src/sched_policies/node_heft.c

@@ -118,6 +118,9 @@ static int heft_push_task(struct starpu_sched_node * node, struct starpu_task *
 
 	STARPU_ASSERT(best_inode != -1);
 	best_node = node->childs[best_inode];
+
+    starpu_sched_node_prefetch_on_node(best_node, task);
+
 	return best_node->push_task(best_node, task);
 }
 

+ 9 - 1
src/sched_policies/node_sched.c

@@ -428,7 +428,15 @@ double starpu_sched_node_transfer_length(struct starpu_sched_node * node, struct
 	return sum / nworkers;
 }
 
-
+void starpu_sched_node_prefetch_on_node(struct starpu_sched_node * node, struct starpu_task * task)
+{
+       if (starpu_get_prefetch_flag() && (node->properties >= STARPU_SCHED_NODE_SINGLE_MEMORY_NODE))
+       {
+               int worker = starpu_bitmap_first(node->workers_in_ctx);
+               unsigned memory_node = starpu_worker_get_memory_node(worker);
+               starpu_prefetch_task_input_on_node(task, memory_node);
+       }
+}
 
 
 void take_node_and_does_nothing(struct starpu_sched_node * node STARPU_ATTRIBUTE_UNUSED)