/*! \defgroup API_Modularized_Scheduler Modularized scheduler interface \struct starpu_sched_node \ingroup API_Modularized_Scheduler This structure represent a scheduler module. \var starpu_sched_node::push_task push a task in the scheduler module. \var starpu_sched_node::pop_task pop a task from the scheduler module, the task returned by this function is executable by the caller if its a worker \var starpu_sched_node::available notify workers downstairs that a task is waiting for a pop \var starpu_sched_node::estimated_load is an heuristic to compute load of scheduler module \var starpu_sched_node::estimated_execute_preds compute executions prediction for a task \var starpu_sched_node::nchilds the number of modules downstairs \var starpu_sched_node::childs modules downstairs \var starpu_sched_node::workers this member contain the set of underlaying workers \var starpu_sched_node::is_homogeneous this is set to true iff all underlaying workers are the same \var starpu_sched_node::data data used by the scheduler module \var starpu_sched_node::fathers the array of scheduler module above indexed by scheduling context index \var starpu_sched_node::init_data is called after all the scheduler is created and should init data member you can store things in node->data while calling _sched_node_create(arg) and use it with init_data \var starpu_sched_node::deinit_data is called just before starpu_sched_node_destroy \var starpu_sched_node::obj the hwloc object associed to scheduler module \struct starpu_task_execute_preds \ingroup API_Modularized_Scheduler this structure containt predictions for a task and is filled by starpu_sched_node::estimated_execute_preds \var starpu_task_execute_preds::state indicate status of prediction \var starpu_task_execute_preds::archtype \var starpu_task_execute_preds::impl those members are revelant is state is PERF_MODEL or CALIBRATING and is set to best or uncalibrated archtype and implementation, respectively, or suitable values if state is NO_PERF_MODEL \var starpu_task_execute_preds::expected_finish_time expected finish time of task \var starpu_task_execute_preds::expected_length expected compute time of task \var starpu_task_execute_preds::expected_transfer_length expected time for transfering data to worker's memory node \var starpu_task_execute_preds::expected_power expected power consumption for task \struct starpu_sched_tree \ingroup API_Modularized_Scheduler \var starpu_sched_tree::root this is the entry module of the scheduler \var starpu_sched_tree::workers this is the set of workers available in this context, this value is used to mask workers in modules \var lock this lock protect the worker member \fn struct starpu_sched_node * starpu_sched_node_create(void) allocate and initalise node field with defaults values : .pop_task make recursive call on father .available make a recursive call on childrens .estimated_load compute relative speedup and tasks in subtree .estimated_execute_preds return the average of recursive call on childs \fn void starpu_sched_node_destroy(struct starpu_sched_node * node) free data allocated by starpu_sched_node_create, but dont call node->deinit_data(node) \fn void starpu_sched_node_set_father(struct starpu_sched_node * node, struct starpu_sched_node * father_node, unsigned sched_ctx_id) set node->fathers[sched_ctx_id] to father_node \fn void starpu_sched_node_add_child(struct starpu_sched_node* node, struct starpu_sched_node * child) add child to node->childs and increment nchilds as well and dont modify child->fathers \fn void starpu_sched_node_remove_child(struct starpu_sched_node * node, struct starpu_sched_node * child) remove child from node->childs and decrement nchilds */