SimGrid  3.21
Versatile Simulation of Distributed Systems

Detailed Description

Task management.

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

See also
SD_task_t,
Tasks dependencies

Macros

#define SD_SCHED_NO_COST   NULL
 A constant to use in SD_task_schedule to mean that there is no cost. More...
 

Typedefs

typedef struct s_SD_task_t * SD_task_t
 Task opaque datatypeA task is some computing amount that can be executed in parallel on several hosts. More...
 

Enumerations

enum  e_SD_task_state_t {
  SD_NOT_SCHEDULED = 0x0001, SD_SCHEDULABLE = 0x0002, SD_SCHEDULED = 0x0004, SD_RUNNABLE = 0x0008,
  SD_RUNNING = 0x0010, SD_DONE = 0x0020, SD_FAILED = 0x0040
}
 Task states. More...
 
enum  e_SD_task_kind_t {
  SD_TASK_NOT_TYPED = 0, SD_TASK_COMM_E2E = 1, SD_TASK_COMP_SEQ = 2, SD_TASK_COMP_PAR_AMDAHL = 3,
  SD_TASK_COMM_PAR_MXN_1D_BLOCK = 4
}
 Task kinds. More...
 

Functions

SD_task_t SD_task_create (const char *name, void *data, double amount)
 
void * SD_task_get_data (SD_task_t task)
 
void SD_task_set_data (SD_task_t task, void *data)
 
e_SD_task_state_t SD_task_get_state (SD_task_t task)
 
const char * SD_task_get_name (SD_task_t task)
 
void SD_task_set_name (SD_task_t task, const char *name)
 
void SD_task_set_rate (SD_task_t task, double rate)
 
void SD_task_watch (SD_task_t task, e_SD_task_state_t state)
 
void SD_task_unwatch (SD_task_t task, e_SD_task_state_t state)
 
double SD_task_get_amount (SD_task_t task)
 
void SD_task_set_amount (SD_task_t task, double amount)
 
double SD_task_get_alpha (SD_task_t task)
 
double SD_task_get_remaining_amount (SD_task_t task)
 
double SD_task_get_execution_time (SD_task_t task, int host_count, const sg_host_t *host_list, const double *flops_amount, const double *bytes_amount)
 
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 *host_list, const double *flops_amount, const double *bytes_amount, double rate)
 
void SD_task_unschedule (SD_task_t task)
 
double SD_task_get_start_time (SD_task_t task)
 
double SD_task_get_finish_time (SD_task_t task)
 
xbt_dynar_t SD_task_get_parents (SD_task_t task)
 
xbt_dynar_t SD_task_get_children (SD_task_t task)
 
int SD_task_get_workstation_count (SD_task_t task)
 
sg_host_t * SD_task_get_workstation_list (SD_task_t task)
 
void SD_task_destroy (SD_task_t task)
 
void SD_task_dump (SD_task_t task)
 
void SD_task_dotty (SD_task_t task, void *out_FILE)
 
SD_task_t SD_task_create_comp_seq (const char *name, void *data, double amount)
 
SD_task_t SD_task_create_comp_par_amdahl (const char *name, void *data, double amount, double alpha)
 
SD_task_t SD_task_create_comm_e2e (const char *name, void *data, double amount)
 
SD_task_t SD_task_create_comm_par_mxn_1d_block (const char *name, void *data, double amount)
 
void SD_task_distribute_comp_amdahl (SD_task_t task, int ws_count)
 
void SD_task_build_MxN_1D_block_matrix (SD_task_t task, int src_nb, int dst_nb)
 
void SD_task_schedulev (SD_task_t task, int count, const sg_host_t *list)
 
void SD_task_schedulel (SD_task_t task, int count,...)
 

Macro Definition Documentation

◆ SD_SCHED_NO_COST

#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 (i.e., with no communication) like this:

SD_task_schedule(task, my_host_count, my_host_list, my_flops_amount, SD_SCHED_NO_COST, my_rate);

Typedef Documentation

◆ SD_task_t

typedef struct s_SD_task_t* SD_task_t

Task opaque datatypeA task is some computing 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, ...

Enumeration Type Documentation

◆ e_SD_task_state_t

Task states.

Enumerator
SD_NOT_SCHEDULED 

Initial state (not valid for SD_watch and SD_unwatch).

SD_SCHEDULABLE 

A task becomes SD_SCHEDULABLE as soon as its dependencies are satisfied.

SD_SCHEDULED 

A task becomes SD_SCHEDULED when you call function SD_task_schedule.

SD_simulate will execute it when it becomes SD_RUNNABLE.

SD_RUNNABLE 

A scheduled task becomes runnable is SD_simulate as soon as its dependencies are satisfied.

SD_RUNNING 

An SD_RUNNABLE task becomes SD_RUNNING when it is launched.

SD_DONE 

The task is successfully finished.

SD_FAILED 

A problem occurred during the execution of the task.

◆ e_SD_task_kind_t

Task kinds.

Enumerator
SD_TASK_NOT_TYPED 

no specified type

SD_TASK_COMM_E2E 

end to end communication

SD_TASK_COMP_SEQ 

sequential computation

SD_TASK_COMP_PAR_AMDAHL 

parallel computation (Amdahl's law)

SD_TASK_COMM_PAR_MXN_1D_BLOCK 

MxN data redistribution (1D Block distribution)

Function Documentation

◆ SD_task_create()

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

◆ SD_task_get_data()

void* SD_task_get_data ( SD_task_t  task)

◆ SD_task_set_data()

void SD_task_set_data ( SD_task_t  task,
void *  data 
)

◆ SD_task_get_state()

e_SD_task_state_t SD_task_get_state ( SD_task_t  task)

◆ SD_task_get_name()

const char* SD_task_get_name ( SD_task_t  task)

◆ SD_task_set_name()

void SD_task_set_name ( SD_task_t  task,
const char *  name 
)

◆ SD_task_set_rate()

void SD_task_set_rate ( SD_task_t  task,
double  rate 
)

◆ SD_task_watch()

void SD_task_watch ( SD_task_t  task,
e_SD_task_state_t  state 
)

◆ SD_task_unwatch()

void SD_task_unwatch ( SD_task_t  task,
e_SD_task_state_t  state 
)

◆ SD_task_get_amount()

double SD_task_get_amount ( SD_task_t  task)

◆ SD_task_set_amount()

void SD_task_set_amount ( SD_task_t  task,
double  amount 
)

◆ SD_task_get_alpha()

double SD_task_get_alpha ( SD_task_t  task)

◆ SD_task_get_remaining_amount()

double SD_task_get_remaining_amount ( SD_task_t  task)

◆ SD_task_get_execution_time()

double SD_task_get_execution_time ( SD_task_t  task,
int  host_count,
const sg_host_t *  host_list,
const double *  flops_amount,
const double *  bytes_amount 
)

◆ SD_task_get_kind()

e_SD_task_kind_t SD_task_get_kind ( SD_task_t  task)

◆ SD_task_schedule()

void SD_task_schedule ( SD_task_t  task,
int  host_count,
const sg_host_t *  host_list,
const double *  flops_amount,
const double *  bytes_amount,
double  rate 
)

◆ SD_task_unschedule()

void SD_task_unschedule ( SD_task_t  task)

◆ SD_task_get_start_time()

double SD_task_get_start_time ( SD_task_t  task)

◆ SD_task_get_finish_time()

double SD_task_get_finish_time ( SD_task_t  task)

◆ SD_task_get_parents()

xbt_dynar_t SD_task_get_parents ( SD_task_t  task)

◆ SD_task_get_children()

xbt_dynar_t SD_task_get_children ( SD_task_t  task)

◆ SD_task_get_workstation_count()

int SD_task_get_workstation_count ( SD_task_t  task)

◆ SD_task_get_workstation_list()

sg_host_t* SD_task_get_workstation_list ( SD_task_t  task)

◆ SD_task_destroy()

void SD_task_destroy ( SD_task_t  task)

◆ SD_task_dump()

void SD_task_dump ( SD_task_t  task)

◆ SD_task_dotty()

void SD_task_dotty ( SD_task_t  task,
void *  out_FILE 
)

◆ SD_task_create_comp_seq()

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

◆ SD_task_create_comp_par_amdahl()

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

◆ SD_task_create_comm_e2e()

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

◆ SD_task_create_comm_par_mxn_1d_block()

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

◆ SD_task_distribute_comp_amdahl()

void SD_task_distribute_comp_amdahl ( SD_task_t  task,
int  ws_count 
)

◆ SD_task_build_MxN_1D_block_matrix()

void SD_task_build_MxN_1D_block_matrix ( SD_task_t  task,
int  src_nb,
int  dst_nb 
)

◆ SD_task_schedulev()

void SD_task_schedulev ( SD_task_t  task,
int  count,
const sg_host_t *  list 
)

◆ SD_task_schedulel()

void SD_task_schedulel ( SD_task_t  task,
int  count,
  ... 
)