浏览代码

Fix modular-heft-prio: tasks should be accumulated before the eager scheduler

Samuel Thibault 8 年之前
父节点
当前提交
8ff5a532f4
共有 1 个文件被更改,包括 7 次插入8 次删除
  1. 7 8
      src/sched_policies/modular_heft_prio.c

+ 7 - 8
src/sched_policies/modular_heft_prio.c

@@ -46,13 +46,13 @@ static void initialize_heft_prio_policy(unsigned sched_ctx_id)
  *                                    |
  *  mct_component <--push-- perfmodel_select_component --push--> eager_component
  *  |     |     |                                                  |
+ * prio  prio  prio                                                |
+ *  |     |     |                                                  |
  * eager eager eager                                               |
  *  |     |     |                                                  |
  *  >--------------------------------------------------------------<
  *                    |                                |
  *              best_impl_component              best_impl_component
- *                    |                                |
- *                prio_component                  prio_component
  *                    |                               |
  *               worker_component                   worker_component
  *
@@ -100,7 +100,7 @@ static void initialize_heft_prio_policy(unsigned sched_ctx_id)
 
 	struct starpu_sched_component * eagers[starpu_memory_nodes_get_count()];
 
-	/* Create one eager component per memory node, below mct */
+	/* Create one fifo+eager component pair per memory node, below mct */
 	for(i = 0; i < starpu_memory_nodes_get_count(); i++)
 	{
 		for(j = 0; j < starpu_worker_get_count() + starpu_combined_worker_get_count(); j++)
@@ -109,22 +109,21 @@ static void initialize_heft_prio_policy(unsigned sched_ctx_id)
 		if (j == starpu_worker_get_count() + starpu_combined_worker_get_count())
 			/* Don't create a component for this memory node with no worker */
 			continue;
+		struct starpu_sched_component * prio_component = starpu_sched_component_prio_create(t, &prio_data);
 		eagers[i] = starpu_sched_component_eager_create(t, NULL);
-		starpu_sched_component_connect(perfmodel_component, eagers[i]);
+		starpu_sched_component_connect(perfmodel_component, prio_component);
+		starpu_sched_component_connect(prio_component, eagers[i]);
 	}
 
 	for(i = 0; i < starpu_worker_get_count() + starpu_combined_worker_get_count(); i++)
 	{
 		struct starpu_sched_component * worker_component = starpu_sched_component_worker_get(sched_ctx_id, i);
-		struct starpu_sched_component * prio_component = starpu_sched_component_prio_create(t, &prio_data);
 		struct starpu_sched_component * impl_component = starpu_sched_component_best_implementation_create(t, NULL);
 
-		starpu_sched_component_connect(prio_component, worker_component);
-		starpu_sched_component_connect(impl_component, prio_component);
-
 		starpu_sched_component_connect(eagers[starpu_worker_get_memory_node(i)], impl_component);
 		starpu_sched_component_connect(no_perfmodel_component, impl_component);
 		starpu_sched_component_connect(calibrator_component, impl_component);
+		starpu_sched_component_connect(impl_component, worker_component);
 	}
 
 	starpu_sched_tree_update_workers(t);