SD_create_environment(platform_file);
/* creation of the tasks and their dependencies */
- SD_task_t taskA = SD_task_create("Task A", NULL);
- SD_task_t taskB = SD_task_create("Task B", NULL);
- SD_task_t taskC = SD_task_create("Task C", NULL);
- SD_task_t taskD = SD_task_create("Task D", NULL);
+ SD_task_t taskA = SD_task_create("Task A", NULL, 10.0);
+ SD_task_t taskB = SD_task_create("Task B", NULL, 40.0);
+ SD_task_t taskC = SD_task_create("Task C", NULL, 30.0);
+ SD_task_t taskD = SD_task_create("Task D", NULL, 60.0);
SD_task_dependency_add(NULL, NULL, taskB, taskA);
SD_task_dependency_add(NULL, NULL, taskC, taskA);
*
* This section describes the functions for managing the tasks.
*
- * A task is some <em>computing amount</em> that can be executed
+ * A task is some <em>working amount</em> 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 <em>\ref e_SD_task_state_t "state"</em> indicating whether
* @see SD_task_t, SD_task_dependency_management
* @{
*/
-SD_task_t SD_task_create(const char *name, void *data);
+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);
xbt_swag_t state_set;
void *data; /* user data */
char *name;
+ double amount;
surf_action_t surf_action;
unsigned short watch_points;
int state_changed; /* used only by SD_simulate, to make sure we put
* \return the new task
* \see SD_task_destroy()
*/
-SD_task_t SD_task_create(const char *name, void *data) {
+SD_task_t SD_task_create(const char *name, void *data, double amount) {
SD_CHECK_INIT_DONE();
SD_task_t task = xbt_new0(s_SD_task_t, 1);
task->state_set = sd_global->not_scheduled_task_set;
xbt_swag_insert(task,task->state_set);
+ task->amount = amount;
task->surf_action = NULL;
task->watch_points = 0;
task->state_changed = 0;
double SD_task_get_amount(SD_task_t task) {
SD_CHECK_INIT_DONE();
xbt_assert0(task != NULL, "Invalid parameter");
- xbt_assert1(task->surf_action != NULL, "The task '%s' is not running", SD_task_get_name(task));
- return task->surf_action->cost;
+ return task->amount;
}
/**
double SD_task_get_remaining_amount(SD_task_t task) {
SD_CHECK_INIT_DONE();
xbt_assert0(task != NULL, "Invalid parameter");
- xbt_assert1(task->surf_action != NULL, "The task '%s' is not running", SD_task_get_name(task));
- return task->surf_action->remains / task->surf_action->cost;
+
+ if (task->surf_action)
+ return task->surf_action->remains;
+ else
+ return task->amount;
}
/* temporary function for debbuging */
task->workstation_list,
task->computation_amount,
task->communication_amount,
- 1.0,
+ task->amount,
task->rate);
__SD_task_destroy_scheduling_data(task); /* now the scheduling data are not useful anymore */