19 #ifndef __STARPU_SCHED_COMPONENT_H__ 20 #define __STARPU_SCHED_COMPONENT_H__ 24 #ifdef STARPU_HAVE_HWLOC 52 #define STARPU_SCHED_COMPONENT_IS_HOMOGENEOUS(component) ((component)->properties & STARPU_SCHED_COMPONENT_HOMOGENEOUS) 57 #define STARPU_SCHED_COMPONENT_IS_SINGLE_MEMORY_NODE(component) ((component)->properties & STARPU_SCHED_COMPONENT_SINGLE_MEMORY_NODE) 166 #ifdef STARPU_HAVE_HWLOC 203 void starpu_initialize_prio_center_policy(
unsigned sched_ctx_id);
424 unsigned ntasks_threshold;
425 double exp_len_threshold;
450 unsigned ntasks_threshold;
451 double exp_len_threshold;
637 struct starpu_sched_component_composed_recipe;
665 #ifdef STARPU_HAVE_HWLOC 716 #define STARPU_SCHED_SIMPLE_DECIDE_MASK (3<<0) 721 #define STARPU_SCHED_SIMPLE_DECIDE_WORKERS (1<<0) 726 #define STARPU_SCHED_SIMPLE_DECIDE_MEMNODES (2<<0) 731 #define STARPU_SCHED_SIMPLE_DECIDE_ARCHS (3<<0) 736 #define STARPU_SCHED_SIMPLE_DECIDE_ALWAYS (1<<3) 742 #define STARPU_SCHED_SIMPLE_PERFMODEL (1<<4) 747 #define STARPU_SCHED_SIMPLE_IMPL (1<<5) 754 #define STARPU_SCHED_SIMPLE_FIFO_ABOVE (1<<6) 759 #define STARPU_SCHED_SIMPLE_FIFO_ABOVE_PRIO (1<<7) 766 #define STARPU_SCHED_SIMPLE_FIFOS_BELOW (1<<8) 771 #define STARPU_SCHED_SIMPLE_FIFOS_BELOW_PRIO (1<<9) 776 #define STARPU_SCHED_SIMPLE_FIFOS_BELOW_READY (1<<10) 781 #define STARPU_SCHED_SIMPLE_WS_BELOW (1<<11) 786 #define STARPU_SCHED_SIMPLE_COMBINED_WORKERS (1<<12) 793 #define STARPU_SCHED_SIMPLE_PRE_DECISION (1<<14) 820 #define STARPU_COMPONENT_MUTEX_LOCK(m) \ 823 const int _relaxed_state = starpu_worker_get_relax_state(); \ 824 if (!_relaxed_state) \ 825 starpu_worker_relax_on(); \ 826 STARPU_PTHREAD_MUTEX_LOCK((m)); \ 827 if (!_relaxed_state) \ 828 starpu_worker_relax_off(); \ 832 #define STARPU_COMPONENT_MUTEX_TRYLOCK(m) STARPU_PTHREAD_MUTEX_TRYLOCK((m)) 834 #define STARPU_COMPONENT_MUTEX_UNLOCK(m) STARPU_PTHREAD_MUTEX_UNLOCK((m)) 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
void * data
Definition: starpu_sched_component.h:81
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)
uint32_t * workerids
Definition: starpu_task.h:1029
unsigned nparents
Definition: starpu_sched_component.h:88
void(* add_child)(struct starpu_sched_component *component, struct starpu_sched_component *child)
Definition: starpu_sched_component.h:93
void starpu_sched_tree_remove_workers(unsigned sched_ctx_id, int *workerids, unsigned nworkers)
int starpu_sched_tree_push_task(struct starpu_task *task)
struct starpu_sched_tree * tree
Definition: starpu_sched_component.h:70
int starpu_sched_component_is_simple_worker(struct starpu_sched_component *component)
void starpu_sched_tree_update_workers(struct starpu_sched_tree *t)
struct starpu_bitmap * workers_in_ctx
Definition: starpu_sched_component.h:79
void starpu_sched_component_destroy_rec(struct starpu_sched_component *component)
void starpu_sched_component_initialize_simple_scheduler(starpu_sched_component_create_t create_decision_component, void *data, unsigned flags, unsigned sched_ctx_id)
void starpu_sched_tree_destroy(struct starpu_sched_tree *tree)
int(* push_task)(struct starpu_sched_component *, struct starpu_task *)
Definition: starpu_sched_component.h:109
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_composed_recipe * starpu_sched_component_composed_recipe_create(void) STARPU_ATTRIBUTE_MALLOC
unsigned nchildren
Definition: starpu_sched_component.h:84
int starpu_sched_component_can_pull_all(struct starpu_sched_component *component)
struct starpu_task * starpu_sched_component_parents_pull_task(struct starpu_sched_component *component, struct starpu_sched_component *to)
struct starpu_sched_component * starpu_sched_component_best_implementation_create(struct starpu_sched_tree *tree, void *arg) STARPU_ATTRIBUTE_MALLOC
Definition: starpu_sched_component.h:44
starpu_worker_archtype
Definition: starpu_worker.h:62
Definition: starpu_sched_component.h:448
struct starpu_sched_component * starpu_sched_component_work_stealing_create(struct starpu_sched_tree *tree, void *arg) STARPU_ATTRIBUTE_MALLOC
double starpu_sched_component_estimated_end_min(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:533
int starpu_sched_component_can_pull(struct starpu_sched_component *component)
double starpu_sched_component_estimated_end_average(struct starpu_sched_component *component)
void starpu_sched_component_initialize_simple_schedulers(unsigned sched_ctx_id, unsigned ndecisions,...)
unsigned sched_ctx
Definition: starpu_task.h:1106
Definition: starpu_sched_component.h:567
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_destroy(struct starpu_sched_component *component)
struct starpu_sched_component_composed_recipe * hwloc_socket_composed_sched_component
Definition: starpu_sched_component.h:684
double(* estimated_load)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:148
void starpu_sched_tree_deinitialize(unsigned sched_ctx_id)
void(* deinit_data)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:158
struct starpu_sched_component ** parents
Definition: starpu_sched_component.h:90
Definition: starpu_sched_component.h:182
Definition: starpu_sched_component.h:46
int starpu_sched_component_is_fifo(struct starpu_sched_component *component)
Definition: starpu_task.h:566
struct starpu_sched_component_composed_recipe * hwloc_component_composed_sched_component
Definition: starpu_sched_component.h:680
struct starpu_sched_component ** children
Definition: starpu_sched_component.h:86
struct starpu_sched_component * starpu_sched_component_random_create(struct starpu_sched_tree *tree, void *arg) STARPU_ATTRIBUTE_MALLOC
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 *)
void(* remove_child)(struct starpu_sched_component *component, struct starpu_sched_component *child)
Definition: starpu_sched_component.h:95
struct starpu_sched_tree * starpu_sched_component_make_scheduler(unsigned sched_ctx_id, struct starpu_sched_component_specs s)
Definition: starpu_sched_component.h:422
hwloc_obj_t obj
Definition: starpu_sched_component.h:173
struct starpu_task * starpu_sched_component_pull_task(struct starpu_sched_component *from, struct starpu_sched_component *to)
struct starpu_sched_component_composed_recipe * hwloc_cache_composed_sched_component
Definition: starpu_sched_component.h:688
Definition: starpu_sched_component.h:670
int STARPU_WARN_UNUSED_RESULT starpu_sched_component_execute_preds(struct starpu_sched_component *component, struct starpu_task *task, double *length)
void starpu_sched_component_worker_pre_exec_hook(struct starpu_task *task, unsigned sched_ctx_id)
int(* can_pull)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:139
struct starpu_sched_component * starpu_sched_component_create(struct starpu_sched_tree *tree, const char *name) STARPU_ATTRIBUTE_MALLOC
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)
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
int starpu_sched_component_can_push(struct starpu_sched_component *component, struct starpu_sched_component *to)
double starpu_sched_component_transfer_length(struct starpu_sched_component *component, struct starpu_task *task)
starpu_sched_component_properties
Definition: starpu_sched_component.h:41
void starpu_sched_component_worker_post_exec_hook(struct starpu_task *task, unsigned sched_ctx_id)
struct starpu_task * starpu_sched_tree_pop_task(unsigned sched_ctx)
int starpu_sched_component_is_work_stealing(struct starpu_sched_component *component)
int mix_heterogeneous_workers
Definition: starpu_sched_component.h:701
struct starpu_bitmap * workers
Definition: starpu_sched_component.h:72
struct starpu_sched_component * starpu_sched_component_parallel_worker_create(struct starpu_sched_tree *tree, unsigned nworkers, unsigned *workers)
struct starpu_sched_component_composed_recipe * hwloc_machine_composed_sched_component
Definition: starpu_sched_component.h:676
struct starpu_sched_component * starpu_sched_component_worker_get(unsigned sched_ctx, int workerid)
int starpu_sched_component_worker_get_workerid(struct starpu_sched_component *worker_component)
double starpu_sched_component_estimated_load(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:598
double(* estimated_end)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:153
int starpu_sched_tree_work_stealing_push_task(struct starpu_task *task)
starpu_pthread_mutex_t lock
Definition: starpu_sched_component.h:200
void starpu_sched_tree_add_workers(unsigned sched_ctx_id, int *workerids, unsigned nworkers)
unsigned sched_ctx_id
Definition: starpu_sched_component.h:195
struct starpu_bitmap * workers
Definition: starpu_sched_component.h:191
int starpu_sched_component_is_worker(struct starpu_sched_component *component)
void(* notify_change_workers)(struct starpu_sched_component *component)
Definition: starpu_sched_component.h:163
int(* can_push)(struct starpu_sched_component *from, struct starpu_sched_component *to)
Definition: starpu_sched_component.h:127
Definition: starpu_sched_component.h:67
int starpu_sched_component_is_random(struct starpu_sched_component *)
double starpu_sched_component_estimated_end_min_add(struct starpu_sched_component *component, double exp_len)
struct starpu_sched_tree * starpu_sched_tree_create(unsigned sched_ctx_id) STARPU_ATTRIBUTE_MALLOC
struct starpu_sched_component * root
Definition: starpu_sched_component.h:187
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)