SimGrid 3.7.1
Scalable simulation of distributed systems
Defines | Functions
Tasks
SimDag

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_tSD_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.

Detailed Description

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.

See also:
SD_task_t, Tasks dependencies

Define Documentation

#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);


Function Documentation

SD_task_t SD_task_create ( const char *  name,
void *  data,
double  amount 
)

Creates a new task.

Parameters:
namethe name of the task (can be NULL)
datathe user data you want to associate with the task (can be NULL)
amountamount of the task
Returns:
the new task
See also:
SD_task_destroy()
void* SD_task_get_data ( SD_task_t  task)

Returns the user data of a task.

Parameters:
taska task
Returns:
the user data associated with this task (can be NULL)
See also:
SD_task_set_data()
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.

Parameters:
taska task
datathe new data you want to associate with this task
See also:
SD_task_get_data()
e_SD_task_state_t SD_task_get_state ( SD_task_t  task)

Returns the state of a task.

Parameters:
taska task
Returns:
the current state of this task: SD_NOT_SCHEDULED, SD_SCHEDULED, SD_RUNNABLE, SD_RUNNING, SD_DONE or SD_FAILED
See also:
e_SD_task_state_t
const char* SD_task_get_name ( SD_task_t  task)

Returns the name of a task.

Parameters:
taska task
Returns:
the name of this task (can be 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.

Parameters:
taska task
statethe state you want to watch (cannot be SD_NOT_SCHEDULED)
See also:
SD_task_unwatch()
void SD_task_unwatch ( SD_task_t  task,
e_SD_task_state_t  state 
)

Removes a watch point from a task.

Parameters:
taska task
statethe state you no longer want to watch
See also:
SD_task_watch()
double SD_task_get_amount ( SD_task_t  task)

Returns the total amount of work contained in a task.

Parameters:
taska task
Returns:
the total amount of work (computation or data transfer) for this task
See also:
SD_task_get_remaining_amount()
double SD_task_get_remaining_amount ( SD_task_t  task)

Returns the remaining amount work to do till the completion of a task.

Parameters:
taska task
Returns:
the remaining amount of work (computation or data transfer) of this task
See also:
SD_task_get_amount()
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.

Parameters:
taskthe task to evaluate
workstation_nbnumber of workstations on which the task would be executed
workstation_listthe workstations on which the task would be executed
computation_amountcomputation amount for each workstation
communication_amountcommunication amount between each pair of workstations
See also:
SD_schedule()
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.

Parameters:
taskthe task you want to schedule
workstation_countnumber of workstations on which the task will be executed
workstation_listthe workstations on which the task will be executed
computation_amountcomputation amount for each workstation
communication_amountcommunication amount between each pair of workstations
ratetask execution speed rate
See also:
SD_task_unschedule()
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.

Parameters:
taskthe task you want to unschedule
See also:
SD_task_schedule()
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.

Parameters:
task,:a task
Returns:
the start time of this 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.

Parameters:
task,:a task
Returns:
the start time of this task
xbt_dynar_t SD_task_get_parents ( SD_task_t  task)

Returns the dynar of the parents of a task.

Parameters:
taska task
Returns:
a newly allocated dynar comprising the parents of this task
xbt_dynar_t SD_task_get_children ( SD_task_t  task)

Returns the dynar of the parents of a task.

Parameters:
taska task
Returns:
a newly allocated dynar comprising the parents of this 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!

Parameters:
taska task
SD_workstation_t* SD_task_get_workstation_list ( SD_task_t  task)

Returns the list of workstations involved in a task.

Only call this on already scheduled tasks!

Parameters:
taska task
void SD_task_destroy ( SD_task_t  task)

Destroys a task.

The user data (if any) should have been destroyed first.

Parameters:
taskthe task you want to destroy
See also:
SD_task_create()
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.

Todo:
We should create tasks kind for the following categories:

- Point to point communication (done)

  • Sequential computation (done)
  • group communication (redistribution, several kinds)
  • parallel tasks with no internal communication (one kind per speedup model such as amdal)
  • idem+ internal communication. Task type not enough since we cannot store comm cost alongside to comp one)
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.

Parameters:
taskThe task to be considered
categorythe name of the category to be associated to the task
See also:
SD_task_get_category, TRACE_category, TRACE_category_with_color
const char* SD_task_get_category ( SD_task_t  task)

Gets the current tracing category of a task.

Parameters:
taskThe task to be considered
See also:
SD_task_set_category
Returns:
Returns the name of the tracing category of the given task, NULL otherwise


Back to the main Simgrid Documentation page The version of SimGrid documented here is v3.7.1.
Documentation of other versions can be found in their respective archive files (directory doc/html).
Generated by doxygen