SimGrid
3.7
Scalable simulation of distributed systems
|
Functions for managing the tasks. More...
Defines | |
#define | SD_SCHED_NO_COST NULL |
A constant to use in SD_task_schedule to mean that there is no cost. | |
Functions | |
SD_task_t | SD_task_create (const char *name, void *data, double amount) |
Creates a new task. | |
void * | SD_task_get_data (SD_task_t task) |
Returns the user data of a task. | |
void | SD_task_set_data (SD_task_t task, void *data) |
Sets the user data of a task. | |
e_SD_task_state_t | SD_task_get_state (SD_task_t task) |
Returns the state of a task. | |
const char * | SD_task_get_name (SD_task_t task) |
Returns the name of a task. | |
void | SD_task_set_name (SD_task_t task, const char *name) |
Allows to change the name of a task. | |
void | SD_task_watch (SD_task_t task, e_SD_task_state_t state) |
Adds a watch point to a task. | |
void | SD_task_unwatch (SD_task_t task, e_SD_task_state_t state) |
Removes a watch point from a task. | |
double | SD_task_get_amount (SD_task_t task) |
Returns the total amount of work contained in a task. | |
double | SD_task_get_remaining_amount (SD_task_t task) |
Returns the remaining amount work to do till the completion of a task. | |
double | SD_task_get_execution_time (SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount) |
Returns an approximative estimation of the execution time of a task. | |
void | SD_task_schedule (SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount, double rate) |
Schedules a task. | |
void | SD_task_unschedule (SD_task_t task) |
Unschedules a task. | |
double | SD_task_get_start_time (SD_task_t task) |
Returns the start time of a task. | |
double | SD_task_get_finish_time (SD_task_t task) |
Returns the finish time of a task. | |
xbt_dynar_t | SD_task_get_parents (SD_task_t task) |
Returns the dynar of the parents of a task. | |
xbt_dynar_t | SD_task_get_children (SD_task_t task) |
Returns the dynar of the parents of a task. | |
int | SD_task_get_workstation_count (SD_task_t task) |
Returns the amount of workstations involved in a task. | |
SD_workstation_t * | SD_task_get_workstation_list (SD_task_t task) |
Returns the list of workstations involved in a task. | |
void | SD_task_destroy (SD_task_t task) |
Destroys a task. | |
void | SD_task_dump (SD_task_t task) |
Displays debugging informations about a task. | |
void | SD_task_dotty (SD_task_t task, void *out_FILE) |
Dumps the task in dotty formalism into the FILE* passed as second argument. | |
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 | |
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 | |
void | SD_task_schedulev (SD_task_t task, int count, const SD_workstation_t *list) |
Auto-schedules a task. | |
void | SD_task_schedulel (SD_task_t task, int count,...) |
autoschedule a task on a list of workstations | |
void | SD_task_set_category (SD_task_t task, const char *category) |
Sets the tracing category of a task. | |
const char * | SD_task_get_category (SD_task_t task) |
Gets the current tracing category of a task. |
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 workstations. A task may depend on other tasks, this 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, etc.
#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_workstation_nb, my_workstation_list, my_computation_amount, SD_TASK_SCHED_NO_COST, my_rate);
SD_task_t SD_task_create | ( | const char * | name, |
void * | data, | ||
double | amount | ||
) |
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 |
void* SD_task_get_data | ( | SD_task_t | task | ) |
Returns the user data of a task.
task | a task |
NULL
) void SD_task_set_data | ( | SD_task_t | task, |
void * | data | ||
) |
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 |
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
) 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 |
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 SD_workstation_t * | workstation_list, | ||
const double * | computation_amount, | ||
const double * | communication_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 |
computation_amount | computation amount for each workstation |
communication_amount | communication amount between each pair of workstations |
void SD_task_schedule | ( | SD_task_t | task, |
int | workstation_count, | ||
const SD_workstation_t * | workstation_list, | ||
const double * | computation_amount, | ||
const double * | communication_amount, | ||
double | rate | ||
) |
Schedules a task.
The task state must be SD_NOT_SCHEDULED. Once scheduled, a task will be executed as soon as possible in SD_simulate(), i.e. when its dependencies are satisfied.
task | the task you want to schedule |
workstation_count | number of workstations on which the task will be executed |
workstation_list | the workstations on which the task will be executed |
computation_amount | computation amount for each workstation |
communication_amount | communication amount between each pair of workstations |
rate | task execution speed rate |
void SD_task_unschedule | ( | SD_task_t | task | ) |
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 fluctuate 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 |
void SD_task_destroy | ( | SD_task_t | task | ) |
Destroys a task.
The user data (if any) should have been destroyed first.
task | the task you want to destroy |
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
Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decorelate 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].
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
Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decorelate 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].
void SD_task_schedulev | ( | SD_task_t | task, |
int | count, | ||
const SD_workstation_t * | list | ||
) |
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 decorelate them from the scheduling process where you just specify which resource should deliver the mandatory power.
To be auto-schedulable, a task must be created with SD_task_create_comm_e2e() or SD_task_create_comp_seq(). Check their definitions for the exact semantic of each of them.
void SD_task_schedulel | ( | SD_task_t | task, |
int | count, | ||
... | |||
) |
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()
void SD_task_set_category | ( | SD_task_t | task, |
const char * | category | ||
) |
Sets the tracing category of a task.
This function should be called after the creation of a SimDAG task, to define the category of that task. The first parameter must contain a task that was created with the function SD_task_create. The second parameter must contain a category that was previously declared with the function TRACE_category.
task | The task to be considered |
category | the name of the category to be associated to the task |
const char* SD_task_get_category | ( | SD_task_t | task | ) |
Gets the current tracing category of a task.
task | The task to be considered |
Back to the main Simgrid Documentation page |
The version of SimGrid documented here is v3.7. Documentation of other versions can be found in their respective archive files (directory doc/html). |
Generated by ![]() |