| 
					
				 | 
			
			
				@@ -9,8 +9,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \section Introduction 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-StarPU's Modularized Schedulers are made of individual Scheduling Components  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Modularizedly assembled as a Scheduling Tree. Each Scheduling Component has an  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+StarPU's Modularized Schedulers are made of individual Scheduling Components 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Modularizedly assembled as a Scheduling Tree. Each Scheduling Component has an 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 unique purpose, such as prioritizing tasks or mapping tasks over resources. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 A typical Scheduling Tree is shown below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -21,30 +21,30 @@ A typical Scheduling Tree is shown below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                   v 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             Fifo_Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 |  ^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                |  |         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                |  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            Eager_Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 |  ^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                |  |     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                |  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  --------><--------------><-------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  |  ^                          |  ^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 |  |                          |  |         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 |  |                          |  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  v  |                          v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              Fifo_Component                 Fifo_Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  |  ^                          |  ^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 |  |                          |  |         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 |  |                          |  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  v  |                          v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Worker_Component               Worker_Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 When a task is pushed by StarPU in a Modularized Scheduler, the task moves from 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 a Scheduling Component to an other, following the hierarchy of the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Scheduling Tree, and is stored in one of the Scheduling Components of the  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Scheduling Tree, and is stored in one of the Scheduling Components of the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 strategy. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 When a worker wants to pop a task from the Modularized Scheduler, the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-corresponding Worker Component of the Scheduling Tree tries to pull a task from  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-its parents, following the hierarchy, and gives it to the worker if it succeded  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+corresponding Worker Component of the Scheduling Tree tries to pull a task from 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+its parents, following the hierarchy, and gives it to the worker if it succeded 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 to get one. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -52,7 +52,7 @@ to get one. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection ExistingModularizedSchedulers Existing Modularized Schedulers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-StarPU is currently shipped with the following pre-defined Modularized  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+StarPU is currently shipped with the following pre-defined Modularized 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Schedulers : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - Eager-based Schedulers (with/without prefetching) : \n 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -60,11 +60,11 @@ Naive scheduler, which tries to map a task on the first available resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 it finds. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - Prio-based Schedulers (with/without prefetching) : \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Similar to Eager-Based Schedulers. Can handle tasks which have a defined  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Similar to Eager-Based Schedulers. Can handle tasks which have a defined 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 priority and schedule them accordingly. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - Random-based Schedulers (with/without prefetching) : \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Selects randomly a resource to be mapped on for each task.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Selects randomly a resource to be mapped on for each task. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - HEFT Scheduler : \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Heterogeneous Earliest Finish Time Scheduler. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,8 +73,8 @@ defined performance model (\ref PerformanceModelCalibration) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 to work efficiently, but can handle tasks without a performance 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 model. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-It is currently needed to set the environment variable \ref STARPU_SCHED  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-to use those Schedulers. Modularized Schedulers' naming is tree-* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+To use one of these schedulers, one can set the environment variable \ref STARPU_SCHED. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+All modularized schedulers are named following the RE <c>tree-*</c> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection ExampleTreeEagerPrefetchingStrategy An Example : The Tree-Eager-Prefetching Strategy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -89,7 +89,7 @@ to use those Schedulers. Modularized Schedulers' naming is tree-* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           Eager_Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 |  ^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                |  |     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                |  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               --------><-------------------><--------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               |  ^                                |  ^ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -104,22 +104,22 @@ to use those Schedulers. Modularized Schedulers' naming is tree-* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection Interface 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Each Scheduling Component must follow the following pre-defined Interface  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Each Scheduling Component must follow the following pre-defined Interface 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 to be able to interact with other Scheduling Components. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	- Push (Caller_Component, Child_Component, Task) \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	The calling Scheduling Component transfers a task to its  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Child Component. When the Push function returns, the task no longer  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	belongs to the calling Component. The Modularized Schedulers'  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	The calling Scheduling Component transfers a task to its 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Child Component. When the Push function returns, the task no longer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	belongs to the calling Component. The Modularized Schedulers' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	model relies on this function to perform prefetching. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	- Pull (Caller_Component, Parent_Component)  ->  Task \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	The calling Scheduling Component requests a task from 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	its Parent Component. When the Pull function ends, the returned  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	its Parent Component. When the Pull function ends, the returned 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	task belongs to the calling Component. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	- Can_Push (Caller_Component, Parent_Component) \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	The calling Scheduling Component notifies its Parent Component that  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	The calling Scheduling Component notifies its Parent Component that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	it is ready to accept new tasks. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	- Can_Pull (Caller_Component, Child_Component) \n 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -127,13 +127,13 @@ to be able to interact with other Scheduling Components. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	that it is ready to give new tasks. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\section BuildAModularizedScheduler Build a Modularized Scheduler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\section BuildAModularizedScheduler Building a Modularized Scheduler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection PreImplementedComponents Pre-implemented Components 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-StarPU is currently shipped with the following four Scheduling Components :  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+StarPU is currently shipped with the following four Scheduling Components : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	- Flow-control Components : Fifo, Prio \n  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	- Flow-control Components : Fifo, Prio \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Components which store tasks. They can also prioritize them if 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	they have a defined priority. It is possible to define a threshold 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for those Components following two criterias : the number of tasks 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -148,19 +148,19 @@ StarPU is currently shipped with the following four Scheduling Components : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Each Worker Component modelize a concrete worker. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	- Special-Purpose Components : Perfmodel_Select, Best_Implementation \n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Components dedicated to original purposes. The Perfmodel_Select  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Component decides which Resource-Mapping Component should be used to  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Components dedicated to original purposes. The Perfmodel_Select 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Component decides which Resource-Mapping Component should be used to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	schedule a task. The Best_Implementation Component chooses which 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	implementation of a task should be used on the choosen resource. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection ProgressionAndValidationRules Progression And Validation Rules 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Some rules must be followed to ensure the correctness of a Modularized  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Some rules must be followed to ensure the correctness of a Modularized 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Scheduler : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	- At least one Flow-control Component without threshold per Worker Component  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	is needed in a Modularized Scheduler, to store incoming tasks from StarPU  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	and to give tasks to Worker Components who asks for it. It is possible to  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	- At least one Flow-control Component without threshold per Worker Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	is needed in a Modularized Scheduler, to store incoming tasks from StarPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	and to give tasks to Worker Components who asks for it. It is possible to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	use one Flow-control Component per Worker Component, or one for all Worker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Components, depending on how the Scheduling Tree is defined. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -168,7 +168,7 @@ Scheduler : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Scheduler. Resource-Mapping Components are the only ones who can make 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	scheduling choices, and so the only ones who can have several child. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\subsection ImplementAModularizedScheduler Implement a Modularized Scheduler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\subsection ImplementAModularizedScheduler Implementing a Modularized Scheduler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The following code shows how the Tree-Eager-Prefetching Scheduler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 shown in Section \ref ExampleTreeEagerPrefetchingStrategy is implemented : 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -188,7 +188,7 @@ static void initialize_eager_prefetching_center_policy(unsigned sched_ctx_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (sched_ctx_id, STARPU_WORKER_LIST); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* Create the Scheduling Tree */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  struct starpu_sched_tree * t =  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  struct starpu_sched_tree * t = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     starpu_sched_tree_create(sched_ctx_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* The Root Component is a Flow-control Fifo Component */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -199,16 +199,16 @@ static void initialize_eager_prefetching_center_policy(unsigned sched_ctx_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   struct starpu_sched_component * eager_component = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     starpu_sched_component_eager_create(NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* Create links between Components : the Eager Component is the child  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* Create links between Components : the Eager Component is the child 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * of the Root Component */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   t->root->add_child 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (t->root, eager_component); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   eager_component->add_father 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (eager_component, t->root); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* A task threshold is set for the Flow-control Components which will  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * be connected to Worker Components. By doing so, this Modularized  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Scheduler will be able to perform some prefetching on the resources  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* A task threshold is set for the Flow-control Components which will 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * be connected to Worker Components. By doing so, this Modularized 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Scheduler will be able to perform some prefetching on the resources 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   struct starpu_sched_component_fifo_data fifo_data = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -218,11 +218,11 @@ static void initialize_eager_prefetching_center_policy(unsigned sched_ctx_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   unsigned i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for(i = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    i < starpu_worker_get_count() +  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    i < starpu_worker_get_count() + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     starpu_combined_worker_get_count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* Each Worker Component has a Flow-control Fifo Component as  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Each Worker Component has a Flow-control Fifo Component as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * father */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     struct starpu_sched_component * worker_component = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  starpu_sched_component_worker_get(i); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -233,8 +233,8 @@ static void initialize_eager_prefetching_center_policy(unsigned sched_ctx_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     worker_component->add_father 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (worker_component, fifo_component); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* Each Flow-control Fifo Component associated to a Worker  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * Component is linked to the Eager Component as one of its  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Each Flow-control Fifo Component associated to a Worker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Component is linked to the Eager Component as one of its 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * children */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     eager_component->add_child 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (eager_component, fifo_component); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -276,7 +276,7 @@ struct starpu_sched_policy _starpu_sched_tree_eager_prefetching_policy = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \endcode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\section WriteASchedulingComponent Write a Scheduling Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\section WriteASchedulingComponent Writing a Scheduling Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection GenericSchedulingComponent Generic Scheduling Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -284,10 +284,10 @@ Each Scheduling Component is instantiated from a Generic Scheduling Component, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 which implements a generic version of the Interface. The generic implementation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 of Pull, Can_Pull and Can_Push functions are recursive calls to their parents 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (respectively to their children). However, as a Generic Scheduling Component do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-not know how much children it will have when it will be instantiated, it does  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+not know how much children it will have when it will be instantiated, it does 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 not implement the Push function. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\subsection InstantiationRedefineInterface Instantiation : Redefine the Interface 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\subsection InstantiationRedefineInterface Instantiation : Redefining the Interface 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 A Scheduling Component must implement all the functions of the Interface. It is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 so necessary to implement a Push function to instantiate a Scheduling Component. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -297,7 +297,7 @@ to the Scheduling Component he is implementing, it is possible to reimplement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 all the functions of the Interface. For example, a Flow-control Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 reimplements the Pull and the Can_Push functions of the Interface, allowing him 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 to catch the generic recursive calls of these functions. The Pull function of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-a Flow-control Component can, for example, pop a task from the local storage  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+a Flow-control Component can, for example, pop a task from the local storage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 queue of the Component, and give it to the calling Component which asks for it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \subsection DetailedProgressionAndValidationRules Detailed Progression and Validation Rules 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -307,18 +307,18 @@ queue of the Component, and give it to the calling Component which asks for it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Areas in the Scheduling Tree. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	- A Pump is the engine source of the Scheduler : it pushes/pulls tasks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	to/from a Scheduling Component to an other. Native Pumps of a Scheduling  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Tree are located at the root of the Tree (incoming Push calls from StarPU),  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	and at the leafs of the Tree (Pop calls coming from StarPU Workers).  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Pre-implemented Scheduling Components currently shipped with Pumps are  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Flow-Control Components and the Resource-Mapping Component Heft, within  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	to/from a Scheduling Component to an other. Native Pumps of a Scheduling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Tree are located at the root of the Tree (incoming Push calls from StarPU), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	and at the leafs of the Tree (Pop calls coming from StarPU Workers). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Pre-implemented Scheduling Components currently shipped with Pumps are 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Flow-Control Components and the Resource-Mapping Component Heft, within 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	their defined Can_Push functions. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	- A correct Scheduling Tree requires a Pump per Scheduling Area and per  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Execution Flow.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	- A correct Scheduling Tree requires a Pump per Scheduling Area and per 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Execution Flow. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The Tree-Eager-Prefetching Scheduler shown in Section  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The Tree-Eager-Prefetching Scheduler shown in Section 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 \ref ExampleTreeEagerPrefetchingStrategy follows the previous assumptions : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <pre> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -335,7 +335,7 @@ The Tree-Eager-Prefetching Scheduler shown in Section 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                         v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  Area 2                           Eager_Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                         |  ^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        |  |     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        |  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                         v  | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       --------><-------------------><--------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       |  ^                                |  ^ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -350,4 +350,3 @@ The Tree-Eager-Prefetching Scheduler shown in Section 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 |