SimGrid
3.13
Versatile Simulation of Distributed Systems
|
Functions for managing the tasks. More...
Macros | |
#define | SD_SCHED_NO_COST NULL |
A constant to use in SD_task_schedule to mean that there is no cost. More... | |
Functions | |
SD_task_t | SD_task_create (const char *name, void *data, double amount) |
Creates a new task. More... | |
void * | SD_task_get_data (SD_task_t task) |
Returns the user data of a task. More... | |
void | SD_task_set_data (SD_task_t task, void *data) |
Sets the user data of a task. More... | |
e_SD_task_state_t | SD_task_get_state (SD_task_t task) |
Returns the state of a task. More... | |
const char * | SD_task_get_name (SD_task_t task) |
Returns the name of a task. More... | |
void | SD_task_set_name (SD_task_t task, const char *name) |
Allows to change the name of a task. More... | |
void | SD_task_set_rate (SD_task_t task, double rate) |
Sets the rate of a task. More... | |
void | SD_task_watch (SD_task_t task, e_SD_task_state_t state) |
Adds a watch point to a task. More... | |
void | SD_task_unwatch (SD_task_t task, e_SD_task_state_t state) |
Removes a watch point from a task. More... | |
double | SD_task_get_amount (SD_task_t task) |
Returns the total amount of work contained in a task. More... | |
void | SD_task_set_amount (SD_task_t task, double amount) |
Sets the total amount of work of a task For sequential typed tasks (COMP_SEQ and COMM_E2E), it also sets the appropriate values in the flops_amount and bytes_amount arrays respectively. More... | |
double | SD_task_get_alpha (SD_task_t task) |
Returns the alpha parameter of a SD_TASK_COMP_PAR_AMDAHL task. More... | |
double | SD_task_get_remaining_amount (SD_task_t task) |
Returns the remaining amount work to do till the completion of a task. More... | |
double | SD_task_get_execution_time (SD_task_t task, int workstation_nb, const sg_host_t *workstation_list, const double *flops_amount, const double *bytes_amount) |
Returns an approximative estimation of the execution time of a task. More... | |
e_SD_task_kind_t | SD_task_get_kind (SD_task_t task) |
void | SD_task_schedule (SD_task_t task, int workstation_nb, const sg_host_t *workstation_list, const double *flops_amount, const double *bytes_amount, double rate) |
Schedules a task. More... | |
void | SD_task_unschedule (SD_task_t task) |
Unschedules a task. More... | |
double | SD_task_get_start_time (SD_task_t task) |
Returns the start time of a task. More... | |
double | SD_task_get_finish_time (SD_task_t task) |
Returns the finish time of a task. More... | |
xbt_dynar_t | SD_task_get_parents (SD_task_t task) |
Returns the dynar of the parents of a task. More... | |
xbt_dynar_t | SD_task_get_children (SD_task_t task) |
Returns the dynar of the parents of a task. More... | |
int | SD_task_get_workstation_count (SD_task_t task) |
Returns the amount of workstations involved in a task. More... | |
sg_host_t * | SD_task_get_workstation_list (SD_task_t task) |
Returns the list of workstations involved in a task. More... | |
void | SD_task_destroy (SD_task_t task) |
Destroys a task. More... | |
void | SD_task_dump (SD_task_t task) |
Displays debugging informations about a task. More... | |
void | SD_task_dotty (SD_task_t task, void *out_FILE) |
Dumps the task in dotty formalism into the FILE* passed as second argument. More... | |
SD_task_t | SD_task_create_comp_seq (const char *name, void *data, double amount) |
create a sequential computation task that can then be auto-scheduled More... | |
SD_task_t | SD_task_create_comp_par_amdahl (const char *name, void *data, double amount, double alpha) |
create a parallel computation task that can then be auto-scheduled More... | |
SD_task_t | SD_task_create_comm_e2e (const char *name, void *data, double amount) |
create a end-to-end communication task that can then be auto-scheduled More... | |
SD_task_t | SD_task_create_comm_par_mxn_1d_block (const char *name, void *data, double amount) |
create a complex data redistribution task that can then be auto-scheduled More... | |
void | SD_task_distribute_comp_amdahl (SD_task_t task, int ws_count) |
void | SD_task_schedulev (SD_task_t task, int count, const sg_host_t *list) |
Auto-schedules a task. More... | |
void | SD_task_schedulel (SD_task_t task, int count,...) |
autoschedule a task on a list of workstations More... | |
Functions for managing the tasks.
This section describes the functions for managing the tasks.
A task is some working amount that can be executed in parallel on several hosts. A task may depend on other tasks, which means that the task cannot start until the other tasks are done. Each task has a state indicating whether the task is scheduled, running, done, ...
#define SD_SCHED_NO_COST NULL |
A constant to use in SD_task_schedule to mean that there is no cost.
For example, create a pure computation task (no comm) like this:
SD_task_schedule(task, my_host_count, my_host_list, my_flops_amount, SD_TASK_SCHED_NO_COST, my_rate);
Creates a new task.
name | the name of the task (can be NULL ) |
data | the user data you want to associate with the task (can be NULL ) |
amount | amount of the task |
Returns the user data of a task.
task | a task |
NULL
) Sets the user data of a task.
The new data can be NULL
. The old data should have been freed first if it was not NULL
.
task | a task |
data | the new data you want to associate with this task |
e_SD_task_state_t SD_task_get_state | ( | SD_task_t | task | ) |
Returns the state of a task.
task | a task |
const char* SD_task_get_name | ( | SD_task_t | task | ) |
Returns the name of a task.
task | a task |
NULL
) Sets the rate of a task.
This will change the network bandwidth a task can use. This rate cannot be dynamically changed. Once the task has started, this call is ineffective. This rate depends on both the nominal bandwidth on the route onto which the task is scheduled (
To divide the nominal bandwidth by 2, the rate then has to be : rate = bandwidth/(2*amount)
task | a |
rate | the new rate you want to associate with this task. |
void SD_task_watch | ( | SD_task_t | task, |
e_SD_task_state_t | state | ||
) |
Adds a watch point to a task.
SD_simulate() will stop as soon as the state of this task becomes the one given in argument. The watch point is then automatically removed.
task | a task |
state | the state you want to watch (cannot be SD_NOT_SCHEDULED) |
void SD_task_unwatch | ( | SD_task_t | task, |
e_SD_task_state_t | state | ||
) |
Removes a watch point from a task.
task | a task |
state | the state you no longer want to watch |
double SD_task_get_amount | ( | SD_task_t | task | ) |
Returns the total amount of work contained in a task.
task | a task |
Sets the total amount of work of a task For sequential typed tasks (COMP_SEQ and COMM_E2E), it also sets the appropriate values in the flops_amount and bytes_amount arrays respectively.
Nothing more than modifying task->amount is done for parallel typed tasks (COMP_PAR_AMDAHL and COMM_PAR_MXN_1D_BLOCK) as the distribution of the amount of work is done at scheduling time.
task | a task |
amount | the new amount of work to execute |
double SD_task_get_alpha | ( | SD_task_t | task | ) |
Returns the alpha parameter of a SD_TASK_COMP_PAR_AMDAHL task.
task | a parallel task assuming Amdahl's law as speedup model |
double SD_task_get_remaining_amount | ( | SD_task_t | task | ) |
Returns the remaining amount work to do till the completion of a task.
task | a task |
double SD_task_get_execution_time | ( | SD_task_t | task, |
int | workstation_nb, | ||
const sg_host_t * | workstation_list, | ||
const double * | flops_amount, | ||
const double * | bytes_amount | ||
) |
Returns an approximative estimation of the execution time of a task.
The estimation is very approximative because the value returned is the time the task would take if it was executed now and if it was the only task.
task | the task to evaluate |
workstation_nb | number of workstations on which the task would be executed |
workstation_list | the workstations on which the task would be executed |
flops_amount | computation amount for each workstation |
bytes_amount | communication amount between each pair of workstations |
e_SD_task_kind_t SD_task_get_kind | ( | SD_task_t | task | ) |
void SD_task_schedule | ( | SD_task_t | task, |
int | host_count, | ||
const sg_host_t * | workstation_list, | ||
const double * | flops_amount, | ||
const double * | bytes_amount, | ||
double | rate | ||
) |
Schedules a task.
The task state must be SD_NOT_SCHEDULED. Once scheduled, a task is executed as soon as possible in
task | the task you want to schedule |
host_count | number of workstations on which the task will be executed |
workstation_list | the workstations on which the task will be executed |
flops_amount | computation amount for each workstation |
bytes_amount | communication amount between each pair of workstations |
rate | task execution speed rate |
Unschedules a task.
The task state must be SD_SCHEDULED, SD_RUNNABLE, SD_RUNNING or SD_FAILED. If you call this function, the task state becomes SD_NOT_SCHEDULED. Call SD_task_schedule() to schedule it again.
task | the task you want to unschedule |
double SD_task_get_start_time | ( | SD_task_t | task | ) |
Returns the start time of a task.
The task state must be SD_RUNNING, SD_DONE or SD_FAILED.
task | a task |
double SD_task_get_finish_time | ( | SD_task_t | task | ) |
Returns the finish time of a task.
The task state must be SD_RUNNING, SD_DONE or SD_FAILED. If the state is not completed yet, the returned value is an estimation of the task finish time. This value can vary until the task is completed.
task | a task |
xbt_dynar_t SD_task_get_parents | ( | SD_task_t | task | ) |
Returns the dynar of the parents of a task.
task | a task |
xbt_dynar_t SD_task_get_children | ( | SD_task_t | task | ) |
Returns the dynar of the parents of a task.
task | a task |
int SD_task_get_workstation_count | ( | SD_task_t | task | ) |
Returns the amount of workstations involved in a task.
Only call this on already scheduled tasks!
task | a task |
Returns the list of workstations involved in a task.
Only call this on already scheduled tasks!
task | a task |
Destroys a task.
The user data (if any) should have been destroyed first.
task | the task you want to destroy |
Dumps the task in dotty formalism into the FILE* passed as second argument.
create a sequential computation task that can then be auto-scheduled
Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.
A sequential computation must be scheduled on 1 host, and the amount specified at creation to be run on hosts[0].
name | the name of the task (can be NULL ) |
data | the user data you want to associate with the task (can be NULL ) |
flops_amount | amount of compute work to be done by the task |
SD_task_t SD_task_create_comp_par_amdahl | ( | const char * | name, |
void * | data, | ||
double | flops_amount, | ||
double | alpha | ||
) |
create a parallel computation task that can then be auto-scheduled
Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.
A parallel computation can be scheduled on any number of host. The underlying speedup model is Amdahl's law. To be auto-scheduled,
name | the name of the task (can be NULL ) |
data | the user data you want to associate with the task (can be NULL ) |
flops_amount | amount of compute work to be done by the task |
alpha | purely serial fraction of the work to be done (in [0.;1.[) |
create a end-to-end communication task that can then be auto-scheduled
Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.
A end-to-end communication must be scheduled on 2 hosts, and the amount specified at creation is sent from hosts[0] to hosts[1].
create a complex data redistribution task that can then be auto-scheduled
Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should communicate.
A data redistribution can be scheduled on any number of host. The assumed distribution is a 1D block distribution. Each host owns the same share of the
name | the name of the task (can be NULL ) |
data | the user data you want to associate with the task (can be NULL ) |
amount | amount of data to redistribute by the task |
Auto-schedules a task.
Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.
To be auto-schedulable, a task must be type and created with one of the specialized creation functions.
autoschedule a task on a list of workstations
This function is very similar to SD_task_schedulev(), but takes the list of workstations to schedule onto as separate parameters. It builds a proper vector of workstations and then call SD_task_schedulev()