SimGrid
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

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()


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