Ver código fonte

Plug perfmodel_select children normally from the scheduling strategy, instead of internally within perfmodel_select. This makes the room call go through the MCT node

Samuel Thibault 12 anos atrás
pai
commit
30c9f2732c

+ 0 - 26
src/sched_policies/node_perfmodel_select.c

@@ -71,27 +71,6 @@ int starpu_sched_node_is_perfmodel_select(struct starpu_sched_node * node)
 	return node->push_task == perfmodel_select_push_task;
 }
 
-void perfmodel_select_add_child(struct starpu_sched_node * node, struct starpu_sched_node * child)
-{
-	STARPU_ASSERT(starpu_sched_node_is_perfmodel_select(node));
-	starpu_sched_node_add_child(node, child);
-	struct _starpu_perfmodel_select_data * data = node->data;
-	starpu_sched_node_add_child(data->calibrator_node,child);
-	starpu_sched_node_add_child(data->no_perfmodel_node,child);
-	starpu_sched_node_add_child(data->perfmodel_node, child);
-}
-
-void perfmodel_select_remove_child(struct starpu_sched_node * node, struct starpu_sched_node * child)
-{
-
-	STARPU_ASSERT(starpu_sched_node_is_perfmodel_select(node));
-	starpu_sched_node_remove_child(node, child);
-	struct _starpu_perfmodel_select_data * data = node->data;
-	starpu_sched_node_remove_child(data->calibrator_node,child);
-	starpu_sched_node_remove_child(data->no_perfmodel_node,child);
-	starpu_sched_node_remove_child(data->perfmodel_node, child);
-}
-
 static void perfmodel_select_notify_change_in_workers(struct starpu_sched_node * node)
 {
 	STARPU_ASSERT(starpu_sched_node_is_perfmodel_select(node));
@@ -121,9 +100,6 @@ void perfmodel_select_node_deinit_data(struct starpu_sched_node * node)
 {
 	STARPU_ASSERT(node && node->data);
 	struct _starpu_perfmodel_select_data * d = node->data;
-	starpu_sched_node_destroy(d->calibrator_node);
-	starpu_sched_node_destroy(d->no_perfmodel_node);
-	starpu_sched_node_destroy(d->perfmodel_node);
 	free(d);
 }
 
@@ -140,8 +116,6 @@ struct starpu_sched_node * starpu_sched_node_perfmodel_select_create(struct star
 	
 	node->data = data;
 	node->push_task = perfmodel_select_push_task;
-	node->add_child = perfmodel_select_add_child;
-	node->remove_child = perfmodel_select_remove_child;
 	node->deinit_data = perfmodel_select_node_deinit_data;
 	node->notify_change_workers = perfmodel_select_notify_change_in_workers;
 

+ 9 - 2
src/sched_policies/tree_heft.c

@@ -98,6 +98,13 @@ static void initialize_heft_center_policy(unsigned sched_ctx_id)
 	window_node->add_child(window_node, perfmodel_select_node);
 	starpu_sched_node_set_father(perfmodel_select_node, window_node, sched_ctx_id);
 
+	perfmodel_select_node->add_child(perfmodel_select_node, calibrator_node);
+	starpu_sched_node_set_father(calibrator_node, perfmodel_select_node, sched_ctx_id);
+	perfmodel_select_node->add_child(perfmodel_select_node, perfmodel_node);
+	starpu_sched_node_set_father(perfmodel_node, perfmodel_select_node, sched_ctx_id);
+	perfmodel_select_node->add_child(perfmodel_select_node, no_perfmodel_node);
+	starpu_sched_node_set_father(no_perfmodel_node, perfmodel_select_node, sched_ctx_id);
+
 	struct starpu_prio_data prio_data =
 		{
 			.ntasks_threshold = ntasks_threshold,
@@ -118,8 +125,8 @@ static void initialize_heft_center_policy(unsigned sched_ctx_id)
 		impl_node->add_child(impl_node, prio);
 		starpu_sched_node_set_father(prio, impl_node, sched_ctx_id);
 
-		perfmodel_select_node->add_child(perfmodel_select_node, impl_node);
-		starpu_sched_node_set_father(impl_node, perfmodel_select_node, sched_ctx_id);
+		perfmodel_node->add_child(perfmodel_node, impl_node);
+		starpu_sched_node_set_father(impl_node, perfmodel_node, sched_ctx_id);
 	}
 
 	starpu_sched_tree_update_workers(t);