StarPU Handbook
starpu_sched_component.h
Go to the documentation of this file.
1 /* StarPU --- Runtime system for heterogeneous multicore architectures.
2  *
3  * Copyright (C) 2013-2014 Inria
4  * Copyright (C) 2014-2015 CNRS
5  * Copyright (C) 2014-2017 Université de Bordeaux
6  * Copyright (C) 2013 Simon Archipoff
7  *
8  * StarPU is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation; either version 2.1 of the License, or (at
11  * your option) any later version.
12  *
13  * StarPU is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
18  */
19 
20 #ifndef __STARPU_SCHED_COMPONENT_H__
21 #define __STARPU_SCHED_COMPONENT_H__
22 
23 #include <starpu.h>
24 
25 #ifdef STARPU_HAVE_HWLOC
26 #include <hwloc.h>
27 #endif
28 
29 #ifdef __cplusplus
30 extern "C"
31 {
32 #endif
33 
35 {
38 };
39 
40 #define STARPU_SCHED_COMPONENT_IS_HOMOGENEOUS(component) ((component)->properties & STARPU_SCHED_COMPONENT_HOMOGENEOUS)
41 #define STARPU_SCHED_COMPONENT_IS_SINGLE_MEMORY_NODE(component) ((component)->properties & STARPU_SCHED_COMPONENT_SINGLE_MEMORY_NODE)
42 
44 {
46  struct starpu_bitmap *workers;
47  struct starpu_bitmap *workers_in_ctx;
48  void *data;
49  char *name;
50  int nchildren;
52  int nparents;
54 
55  void (*add_child)(struct starpu_sched_component *component, struct starpu_sched_component *child);
56  void (*remove_child)(struct starpu_sched_component *component, struct starpu_sched_component *child);
57  void (*add_parent)(struct starpu_sched_component *component, struct starpu_sched_component *parent);
58  void (*remove_parent)(struct starpu_sched_component *component, struct starpu_sched_component *parent);
59 
60  int (*push_task)(struct starpu_sched_component *, struct starpu_task *);
61  struct starpu_task *(*pull_task)(struct starpu_sched_component *);
62 
63  int (*can_push)(struct starpu_sched_component *component);
64  void (*can_pull)(struct starpu_sched_component *component);
65 
66  double (*estimated_load)(struct starpu_sched_component *component);
67  double (*estimated_end)(struct starpu_sched_component *component);
68 
69  void (*deinit_data)(struct starpu_sched_component *component);
70  void (*notify_change_workers)(struct starpu_sched_component *component);
72 
73 #ifdef STARPU_HAVE_HWLOC
74  hwloc_obj_t obj;
75 #else
76  void *obj;
77 #endif
78 };
79 
81 {
83  struct starpu_bitmap *workers;
84  unsigned sched_ctx_id;
85  struct starpu_sched_component *worker_components[STARPU_NMAXWORKERS];
86  starpu_pthread_mutex_t lock;
87 };
88 
91 struct starpu_sched_tree *starpu_sched_tree_get(unsigned sched_ctx_id);
98 void starpu_sched_tree_add_workers(unsigned sched_ctx_id, int *workerids, unsigned nworkers);
99 void starpu_sched_tree_remove_workers(unsigned sched_ctx_id, int *workerids, unsigned nworkers);
100 
102 void starpu_sched_component_add_child(struct starpu_sched_component* component, struct starpu_sched_component * child);
106 int STARPU_WARN_UNUSED_RESULT starpu_sched_component_execute_preds(struct starpu_sched_component *component, struct starpu_task *task, double *length);
107 double starpu_sched_component_transfer_length(struct starpu_sched_component *component, struct starpu_task *task);
108 void starpu_sched_component_prefetch_on_node(struct starpu_sched_component *component, struct starpu_task *task);
109 
111 
112 struct starpu_sched_component *starpu_sched_component_worker_get(unsigned sched_ctx, int workerid);
119 
123 
125 {
128 };
129 
132 
134 {
137 };
140 
141 struct starpu_sched_component *starpu_sched_component_work_stealing_create(struct starpu_sched_tree *tree, void *arg STARPU_ATTRIBUTE_UNUSED) STARPU_ATTRIBUTE_MALLOC;
144 
145 struct starpu_sched_component *starpu_sched_component_random_create(struct starpu_sched_tree *tree, void *arg STARPU_ATTRIBUTE_UNUSED) STARPU_ATTRIBUTE_MALLOC;
147 
148 struct starpu_sched_component *starpu_sched_component_eager_create(struct starpu_sched_tree *tree, void *arg STARPU_ATTRIBUTE_UNUSED) STARPU_ATTRIBUTE_MALLOC;
150 
151 struct starpu_sched_component *starpu_sched_component_eager_calibration_create(struct starpu_sched_tree *tree, void *arg STARPU_ATTRIBUTE_UNUSED) STARPU_ATTRIBUTE_MALLOC;
153 
155 {
156  double alpha;
157  double beta;
158  double _gamma;
159  double idle_power;
160 };
163 
166 
167 struct starpu_sched_component *starpu_sched_component_best_implementation_create(struct starpu_sched_tree *tree, void *arg STARPU_ATTRIBUTE_UNUSED) STARPU_ATTRIBUTE_MALLOC;
168 
170 {
174 };
177 
178 void starpu_initialize_prio_center_policy(unsigned sched_ctx_id);
179 
183 void starpu_sched_component_composed_recipe_add(struct starpu_sched_component_composed_recipe *recipe, struct starpu_sched_component *(*create_component)(struct starpu_sched_tree *tree, void *arg), void *arg);
186 
187 #ifdef STARPU_HAVE_HWLOC
189 {
190  struct starpu_sched_component_composed_recipe *hwloc_machine_composed_sched_component;
191  struct starpu_sched_component_composed_recipe *hwloc_component_composed_sched_component;
192  struct starpu_sched_component_composed_recipe *hwloc_socket_composed_sched_component;
193  struct starpu_sched_component_composed_recipe *hwloc_cache_composed_sched_component;
194 
195  struct starpu_sched_component_composed_recipe *(*worker_composed_sched_component)(enum starpu_worker_archtype archtype);
196  int mix_heterogeneous_workers;
197 };
198 
200 #endif /* STARPU_HAVE_HWLOC */
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 
206 #endif /* __STARPU_SCHED_COMPONENT_H__ */
int starpu_sched_component_is_mct(struct starpu_sched_component *component)
double exp_len_threshold
Definition: starpu_sched_component.h:127
int starpu_sched_component_is_prio(struct starpu_sched_component *component)
int(* push_task)(struct starpu_sched_component *, struct starpu_task *)
Definition: starpu_sched_component.h:60
struct starpu_sched_component * starpu_sched_component_fifo_create(struct starpu_sched_tree *tree, struct starpu_sched_component_fifo_data *fifo_data) STARPU_ATTRIBUTE_MALLOC
struct starpu_sched_component ** children
Definition: starpu_sched_component.h:51
struct starpu_sched_component_composed_recipe * starpu_sched_component_composed_recipe_create_singleton(struct starpu_sched_component *(*create_component)(struct starpu_sched_tree *tree, void *arg), void *arg) STARPU_ATTRIBUTE_MALLOC
void starpu_sched_component_composed_recipe_add(struct starpu_sched_component_composed_recipe *recipe, struct starpu_sched_component *(*create_component)(struct starpu_sched_tree *tree, void *arg), void *arg)
struct starpu_sched_component ** parents
Definition: starpu_sched_component.h:53
int starpu_sched_component_is_perfmodel_select(struct starpu_sched_component *component)
void starpu_sched_tree_remove_workers(unsigned sched_ctx_id, int *workerids, unsigned nworkers)
int starpu_sched_tree_push_task(struct starpu_task *task)
void(* deinit_data)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:69
int starpu_sched_component_is_simple_worker(struct starpu_sched_component *component)
#define STARPU_ATTRIBUTE_MALLOC
Definition: starpu_util.h:62
void starpu_sched_tree_update_workers(struct starpu_sched_tree *t)
struct starpu_sched_component * no_perfmodel_component
Definition: starpu_sched_component.h:172
void starpu_sched_component_destroy_rec(struct starpu_sched_component *component)
struct starpu_bitmap * workers_in_ctx
Definition: starpu_sched_component.h:47
void starpu_sched_tree_destroy(struct starpu_sched_tree *tree)
double idle_power
Definition: starpu_sched_component.h:159
double _gamma
Definition: starpu_sched_component.h:158
void(* remove_parent)(struct starpu_sched_component *component, struct starpu_sched_component *parent)
Definition: starpu_sched_component.h:58
void(* add_child)(struct starpu_sched_component *component, struct starpu_sched_component *child)
Definition: starpu_sched_component.h:55
double beta
Definition: starpu_sched_component.h:157
struct starpu_sched_component * starpu_sched_component_prio_create(struct starpu_sched_tree *tree, struct starpu_sched_component_prio_data *prio_data) STARPU_ATTRIBUTE_MALLOC
starpu_worker_archtype
Definition: starpu_worker.h:31
Definition: starpu_sched_component.h:133
double starpu_sched_component_estimated_end_min(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:154
double(* estimated_load)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:66
double(* estimated_end)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:67
void(* add_parent)(struct starpu_sched_component *component, struct starpu_sched_component *parent)
Definition: starpu_sched_component.h:57
double starpu_sched_component_estimated_end_average(struct starpu_sched_component *component)
unsigned sched_ctx
Definition: starpu_task.h:192
void(* remove_child)(struct starpu_sched_component *component, struct starpu_sched_component *child)
Definition: starpu_sched_component.h:56
int nparents
Definition: starpu_sched_component.h:52
Definition: starpu_sched_component.h:36
unsigned ntasks_threshold
Definition: starpu_sched_component.h:135
void starpu_sched_component_destroy(struct starpu_sched_component *component)
struct starpu_sched_component * starpu_sched_component_heft_create(struct starpu_sched_tree *tree, struct starpu_sched_component_mct_data *mct_data) STARPU_ATTRIBUTE_MALLOC
Definition: starpu_sched_component.h:80
int starpu_sched_component_is_fifo(struct starpu_sched_component *component)
int(* can_push)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:63
int starpu_sched_component_is_heft(struct starpu_sched_component *component)
struct starpu_sched_component * perfmodel_component
Definition: starpu_sched_component.h:173
Definition: starpu_task.h:129
int nchildren
Definition: starpu_sched_component.h:50
int starpu_sched_component_is_eager(struct starpu_sched_component *)
struct starpu_task * starpu_sched_component_pull_task(struct starpu_sched_component *from, struct starpu_sched_component *to)
struct starpu_bitmap * workers
Definition: starpu_sched_component.h:83
struct starpu_sched_tree * starpu_sched_component_make_scheduler(unsigned sched_ctx_id, struct starpu_sched_component_specs s)
void starpu_sched_tree_update_workers_in_ctx(struct starpu_sched_tree *t)
void starpu_sched_component_composed_recipe_destroy(struct starpu_sched_component_composed_recipe *)
Definition: starpu_sched_component.h:124
double alpha
Definition: starpu_sched_component.h:156
hwloc_obj_t obj
Definition: starpu_sched_component.h:74
struct starpu_sched_tree * starpu_sched_tree_create(unsigned sched_ctx_id) STARPU_ATTRIBUTE_MALLOC
unsigned ntasks_threshold
Definition: starpu_sched_component.h:126
Definition: starpu_sched_component.h:188
#define STARPU_NMAXWORKERS
Definition: starpu_config.h:102
struct starpu_sched_component_composed_recipe * starpu_sched_component_composed_recipe_create(void) STARPU_ATTRIBUTE_MALLOC
struct starpu_sched_component * calibrator_component
Definition: starpu_sched_component.h:171
void starpu_sched_component_connect(struct starpu_sched_component *parent, struct starpu_sched_component *child)
int starpu_sched_component_push_task(struct starpu_sched_component *from, struct starpu_sched_component *to, struct starpu_task *task)
void(* notify_change_workers)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:70
void starpu_sched_component_worker_pre_exec_hook(struct starpu_task *task)
int STARPU_WARN_UNUSED_RESULT starpu_sched_component_execute_preds(struct starpu_sched_component *component, struct starpu_task *task, double *length)
double exp_len_threshold
Definition: starpu_sched_component.h:136
double starpu_sched_component_transfer_length(struct starpu_sched_component *component, struct starpu_task *task)
starpu_sched_component_properties
Definition: starpu_sched_component.h:34
void * data
Definition: starpu_sched_component.h:48
int starpu_sched_component_is_work_stealing(struct starpu_sched_component *component)
struct starpu_sched_component * starpu_sched_component_worker_get(unsigned sched_ctx, int workerid)
int properties
Definition: starpu_sched_component.h:71
int starpu_sched_component_is_eager_calibration(struct starpu_sched_component *)
struct starpu_task * starpu_sched_tree_pop_task(unsigned sched_ctx)
struct starpu_sched_component * starpu_sched_component_create(struct starpu_sched_tree *tree, const char *name) STARPU_ATTRIBUTE_MALLOC
void starpu_sched_component_worker_post_exec_hook(struct starpu_task *task)
#define STARPU_WARN_UNUSED_RESULT
Definition: starpu_util.h:96
struct starpu_sched_tree * tree
Definition: starpu_sched_component.h:45
int starpu_sched_component_worker_get_workerid(struct starpu_sched_component *worker_component)
struct starpu_sched_component * starpu_sched_component_perfmodel_select_create(struct starpu_sched_tree *tree, struct starpu_sched_component_perfmodel_select_data *perfmodel_select_data) STARPU_ATTRIBUTE_MALLOC
double starpu_sched_component_estimated_load(struct starpu_sched_component *component)
struct starpu_sched_component * starpu_sched_component_composed_component_create(struct starpu_sched_tree *tree, struct starpu_sched_component_composed_recipe *recipe) STARPU_ATTRIBUTE_MALLOC
Definition: starpu_sched_component.h:169
int starpu_sched_tree_work_stealing_push_task(struct starpu_task *task)
struct starpu_bitmap * workers
Definition: starpu_sched_component.h:46
starpu_pthread_mutex_t lock
Definition: starpu_sched_component.h:86
struct starpu_sched_component * root
Definition: starpu_sched_component.h:82
#define STARPU_ATTRIBUTE_UNUSED
Definition: starpu_util.h:59
void starpu_sched_tree_add_workers(unsigned sched_ctx_id, int *workerids, unsigned nworkers)
Definition: starpu_sched_component.h:37
unsigned sched_ctx_id
Definition: starpu_sched_component.h:84
int starpu_sched_component_is_worker(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:43
int starpu_sched_component_is_random(struct starpu_sched_component *)
struct starpu_sched_component * starpu_sched_component_mct_create(struct starpu_sched_tree *tree, struct starpu_sched_component_mct_data *mct_data) STARPU_ATTRIBUTE_MALLOC
void(* can_pull)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:64
int starpu_sched_component_is_combined_worker(struct starpu_sched_component *component)
int starpu_sched_component_can_execute_task(struct starpu_sched_component *component, struct starpu_task *task)