SimGrid: Task Management Functions

SimGrid 3.10 Versatile Simulation of Distributed Systems

- Home page
- Online documentation
- Dev's Corner

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Macros | Typedefs | Functions
Task Management Functions
MSG

This section describes the task structure of MSG (msg_task_t) and the functions for managing it. See Task Actions to see how to put the tasks in action. More...

## Macros
#define | MSG_TASK_UNINITIALIZED NULL
| Default value for an uninitialized msg_task_t.

## Typedefs
typedef struct msg_task * | msg_task_t
| Task datatype.A task may then be defined by a computing amount, a message size and some private data.
typedef struct msg_gpu_task * | msg_gpu_task_t
| GPU task datatype.A task may then be defined by a computing amount, a dispatch latency and a collect latency.

## Functions
msg_task_t | MSG_task_create (const char *name, double compute_duration, double message_size, void *data)
| Creates a new msg_task_t.
msg_task_t | MSG_parallel_task_create (const char *name, int host_nb, const msg_host_t *host_list, double *computation_amount, double *communication_amount, void *data)
| Creates a new msg_task_t (a parallel one....).
msg_gpu_task_t | MSG_gpu_task_create (const char *name, double compute_duration, double dispatch_latency, double collect_latency)
| Creates a new msg_gpu_task_t.
void * | MSG_task_get_data (msg_task_t task)
| Return the user data of a msg_task_t.
void | MSG_task_set_data (msg_task_t task, void *data)
| Sets the user data of a msg_task_t.
void | MSG_task_set_copy_callback (void(*callback)(msg_task_t task, msg_process_t sender, msg_process_t receiver))
| Sets a function to be called when a task has just been copied.
msg_process_t | MSG_task_get_sender (msg_task_t task)
| Return the sender of a msg_task_t.
msg_host_t | MSG_task_get_source (msg_task_t task)
| Return the source of a msg_task_t.
const char * | MSG_task_get_name (msg_task_t task)
| Return the name of a msg_task_t.
void | MSG_task_set_name (msg_task_t task, const char *name)
| Sets the name of a msg_task_t.
msg_error_t | MSG_task_destroy (msg_task_t task)
| Destroy a msg_task_t.
double | MSG_task_get_compute_duration (msg_task_t task)
| Returns the computation amount needed to process a task msg_task_t.
void | MSG_task_set_compute_duration (msg_task_t task, double computation_amount)
| set the computation amount needed to process a task msg_task_t.
void | MSG_task_set_data_size (msg_task_t task, double data_size)
| set the amount data attached with a task msg_task_t.
double | MSG_task_get_remaining_computation (msg_task_t task)
| Returns the remaining computation amount of a task msg_task_t.
double | MSG_task_get_remaining_communication (msg_task_t task)
| Returns the total amount received by a task msg_task_t. If the communication does not exist it will return 0. So, if the communication has FINISHED or FAILED it returns zero.
double | MSG_task_get_data_size (msg_task_t task)
| Returns the size of the data attached to a task msg_task_t.
void | MSG_task_set_priority (msg_task_t task, double priority)
| Changes the priority of a computation task. This priority doesn't affect the transfer rate. A priority of 2 will make a task receive two times more cpu power than the other ones.

## Detailed Description

This section describes the task structure of MSG (msg_task_t) and the functions for managing it. See Task Actions to see how to put the tasks in action.

Since most scheduling algorithms rely on a concept of task that can be either computed locally or transferred on another processor, it seems to be the right level of abstraction for our purposes. A task may then be defined by a computing amount, a message size and some private data.

## Typedef Documentation

typedef struct msg_gpu_task* msg_gpu_task_t

GPU task datatype.A task may then be defined by a computing amount, a dispatch latency and a collect latency.

See Also
  Task Management Functions

## Function Documentation

msg_task_t MSG_task_create | ( | const char * | name,
|  | double | compute_duration,
|  | double | message_size,
|  | void * | data
| ) |  |

Creates a new msg_task_t.

A constructor for msg_task_t taking four arguments and returning the corresponding object.

Parameters

  name | a name for the object. It is for user-level information and can be NULL.
  compute_duration | a value of the processing amount (in flop) needed to process this new task. If 0, then it cannot be executed with MSG_task_execute(). This value has to be >=0.
  message_size | a value of the amount of data (in bytes) needed to transfer this new task. If 0, then it cannot be transfered with MSG_task_send() and MSG_task_recv(). This value has to be >=0.
  data | a pointer to any data may want to attach to the new object. It is for user-level information and can be NULL. It can be retrieved with the function MSG_task_get_data.

See Also
  msg_task_t

Returns
  The new corresponding object.

msg_task_t MSG_parallel_task_create | ( | const char * | name,
|  | int | host_nb,
|  | const msg_host_t * | host_list,
|  | double * | computation_amount,
|  | double * | communication_amount,
|  | void * | data
| ) |  |

Creates a new msg_task_t (a parallel one....).

A constructor for msg_task_t taking six arguments and returning the corresponding object.

Parameters

  name | a name for the object. It is for user-level information and can be NULL.
  host_nb | the number of hosts implied in the parallel task.
  host_list | an array of `host_nb` msg_host_t.
  computation_amount | an array of `host_nb` doubles. computation_amount[i] is the total number of operations that have to be performed on host_list[i].
  communication_amount | an array of `host_nb*` `host_nb` doubles.
  data | a pointer to any data may want to attach to the new object. It is for user-level information and can be NULL. It can be retrieved with the function MSG_task_get_data.

See Also
  msg_task_t

Returns
  The new corresponding object.

msg_gpu_task_t MSG_gpu_task_create | ( | const char * | name,
|  | double | compute_duration,
|  | double | dispatch_latency,
|  | double | collect_latency
| ) |  |

Creates a new msg_gpu_task_t.

A constructor for msg_gpu_task_t taking four arguments and returning a pointer to the new created GPU task.

Parameters

  name | a name for the object. It is for user-level information and can be NULL.
  compute_duration | a value of the processing amount (in flop) needed to process this new task. If 0, then it cannot be executed with MSG_gpu_task_execute(). This value has to be >=0.
  dispatch_latency | time in seconds to load this task on the GPU
  collect_latency | time in seconds to transfer result from the GPU back to the CPU (host) when done

See Also
  msg_gpu_task_t

Returns
  The new corresponding object.

void* MSG_task_get_data | ( | msg_task_t | task | ) |

Return the user data of a msg_task_t.

This function checks whether task is a valid pointer or not and return the user data associated to task if it is possible.

void MSG_task_set_data | ( | msg_task_t | task,
|  | void * | data
| ) |  |

Sets the user data of a msg_task_t.

This function allows to associate a new pointer to the user data associated of task.

void MSG_task_set_copy_callback | ( | void(*)(msg_task_t task, msg_process_t sender, msg_process_t receiver) | callback | ) |

Sets a function to be called when a task has just been copied.

Parameters

  callback | a callback function

msg_process_t MSG_task_get_sender | ( | msg_task_t | task | ) |

Return the sender of a msg_task_t.

This functions returns the msg_process_t which sent this task

msg_host_t MSG_task_get_source | ( | msg_task_t | task | ) |

Return the source of a msg_task_t.

This functions returns the msg_host_t from which this task was sent

const char* MSG_task_get_name | ( | msg_task_t | task | ) |

Return the name of a msg_task_t.

This functions returns the name of a msg_task_t as specified on creation

void MSG_task_set_name | ( | msg_task_t | task,
|  | const char * | name
| ) |  |

Sets the name of a msg_task_t.

This functions allows to associate a name to a task

msg_error_t MSG_task_destroy | ( | msg_task_t | task | ) |

Destroy a msg_task_t.

Destructor for msg_task_t. Note that you should free user data, if any, before calling this function.

Only the process that owns the task can destroy it. The owner changes after a successful send. If a task is successfully sent, the receiver becomes the owner and is supposed to destroy it. The sender should not use it anymore. If the task failed to be sent, the sender remains the owner of the task.

double MSG_task_get_compute_duration | ( | msg_task_t | task | ) |

Returns the computation amount needed to process a task msg_task_t.

Once a task has been processed, this amount is set to 0. If you want, you can reset this value with MSG_task_set_compute_duration before restarting the task.

void MSG_task_set_compute_duration | ( | msg_task_t | task,
|  | double | computation_amount
| ) |  |

set the computation amount needed to process a task msg_task_t.

Warning
  If the computation is ongoing (already started and not finished), it is not modified by this call. And the termination of the ongoing task with set the computation_amount to zero, overriding any value set during the execution.

void MSG_task_set_data_size | ( | msg_task_t | task,
|  | double | data_size
| ) |  |

set the amount data attached with a task msg_task_t.

Warning
  If the transfer is ongoing (already started and not finished), it is not modified by this call.

double MSG_task_get_remaining_computation | ( | msg_task_t | task | ) |

Returns the remaining computation amount of a task msg_task_t.

If the task is ongoing, this call retrieves the remaining amount of work. If it is not ongoing, it returns the total amount of work that will be executed when the task starts.