computation_amount, communication_amount, rate);
printf("Launching simulation...\n");
- SD_simulate(100);
+ SD_task_t *changed_tasks = SD_simulate(100);
+ int i = 0;
+
+ printf("Simulation results:\n");
+ while(changed_tasks[i] != NULL) {
+ switch (SD_task_get_state(changed_tasks[i])) {
+ case SD_DONE:
+ printf("%s is done.\n", SD_task_get_name(changed_tasks[i]));
+ break;
+ case SD_FAILED:
+ printf("%s is failed.\n", SD_task_get_name(changed_tasks[i]));
+ break;
+ default:
+ printf("Unknown status for %s\n", SD_task_get_name(changed_tasks[i]));
+ break;
+ }
+ i++;
+ }
+ free(changed_tasks);
SD_task_destroy(taskA);
SD_task_destroy(taskB);
double elapsed_time = 0.0;
SD_task_t task;
surf_action_t action;
+ SD_task_t *changed_tasks = NULL;
+ int changed_task_number = 0;
+ int changed_task_capacity = 16;
/* create the array that will be returned */
- const int task_number = xbt_swag_size(sd_global->scheduled_task_set) + xbt_swag_size(sd_global->running_task_set);
- SD_task_t *changed_tasks = xbt_new0(SD_task_t, task_number + 1);
- changed_tasks[task_number] = NULL;
- int changed_task_number = 0;
+ changed_tasks = xbt_new0(SD_task_t, changed_task_capacity); /* changed_task_capacity will be increased if necessary */
+ changed_tasks[0] = NULL;
surf_solve(); /* Takes traces into account. Returns 0.0 */
action = __SD_task_run(task);
surf_workstation_resource->common_public->action_set_data(action, task);
task->state_changed = 1;
- changed_tasks[changed_task_number++] = task;
+
+ changed_tasks[changed_task_number++] = task; /* replace NULL by the task */
+ if (changed_task_number == changed_task_capacity) {
+ changed_task_capacity *= 2;
+ changed_tasks = xbt_realloc(changed_tasks, sizeof(SD_task_t) * changed_task_capacity);
+ }
+ changed_tasks[changed_task_number] = NULL;
}
else {
INFO1("Cannot execute task '%s' now because some depencies are not satisfied.", SD_task_get_name(task));