createSimgridObjects();
HEFT(dag);
-
- printDAG(dag);
+
+ /* not recommanded with big DAGs! */
+ /* printDAG(dag); */
changed_tasks = SD_simulate(-1.0);
-
INFO0("Tasks whose state has changed:");
i = 0;
while(changed_tasks[i] != NULL) {
default:
INFO1("Unknown status for %s", SD_task_get_name(changed_tasks[i]));
break;
- }
+ }
i++;
}
free(changed_tasks);
+ INFO1("Total: %d", i);
/* clear some memory */
freeNodeAttributes(dag);
SD_workstation_route_get_communication_time(w1, w2, communication_amount12));
INFO4("Communication time for %f bytes between %s and %s: %f", communication_amount21, name2, name1,
SD_workstation_route_get_communication_time(w2, w1, communication_amount21));
+ xbt_free(route);
/* creation of the tasks and their dependencies */
SD_task_t taskA = SD_task_create("Task A", NULL, 10.0);
}
i++;
}
- free(changed_tasks);
+ xbt_free(changed_tasks);
changed_tasks = SD_simulate(100);
}
- free(changed_tasks);
+ xbt_free(changed_tasks);
DEBUG0("Destroying tasks...");
/* explore the ready tasks */
xbt_swag_foreach(task, sd_global->ready_task_set) {
INFO1("Executing task '%s'", SD_task_get_name(task));
- action = __SD_task_run(task);
- surf_workstation_resource->common_public->action_set_data(action, task);
+ task->surf_action = __SD_task_run(task);
+ surf_workstation_resource->common_public->action_set_data(task->surf_action, task);
task->state_changed = 1;
changed_tasks[changed_task_number++] = task; /* replace NULL by the task */
DEBUG1("Total time: %f", total_time);
elapsed_time = surf_solve();
+ DEBUG1("surf_solve() returns %f", elapsed_time);
if (elapsed_time > 0.0)
total_time += elapsed_time;
task = action->data;
INFO1("Task '%s' done", SD_task_get_name(task));
__SD_task_set_state(task, SD_DONE);
+ xbt_free(action);
+ task->surf_action = NULL;
/* the state has changed */
if (!task->state_changed) {
/* is dst ready now? */
if (__SD_task_is_ready(dst) && !sd_global->watch_point_reached) {
INFO1("Executing task '%s'", SD_task_get_name(dst));
- action = __SD_task_run(dst);
- surf_workstation_resource->common_public->action_set_data(action, dst);
+ dst->surf_action = __SD_task_run(dst);
+ surf_workstation_resource->common_public->action_set_data(dst->surf_action, dst);
dst->state_changed = 1;
changed_tasks[changed_task_number++] = dst;
task = action->data;
INFO1("Task '%s' failed", SD_task_get_name(task));
__SD_task_set_state(task, SD_FAILED);
+ xbt_free(action);
+ task->surf_action = NULL;
+
if (!task->state_changed) {
task->state_changed = 1;
changed_tasks[changed_task_number++] = task;
SD_CHECK_INIT_DONE();
xbt_assert0(SD_link_get_number() > 0, "There is no link!");
- SD_link_t *array = sd_global->link_list;
xbt_dict_cursor_t cursor;
char *key;
void *data;
int i;
- if (array == NULL) { /* this is the first time the function is called */
- array = xbt_new0(SD_link_t, sd_global->link_count);
+ if (sd_global->link_list == NULL) { /* this is the first time the function is called */
+ sd_global->link_list = xbt_new0(SD_link_t, sd_global->link_count);
i = 0;
xbt_dict_foreach(sd_global->links, cursor, key, data) {
- array[i++] = (SD_link_t) data;
+ sd_global->link_list[i++] = (SD_link_t) data;
}
}
- return array;
+ return sd_global->link_list;
}
/**
*
* \param name the name of the task (can be \c NULL)
* \param data the user data you want to associate with the task (can be \c NULL)
+ * \param amount amount of the task
* \return the new task
* \see SD_task_destroy()
*/
if (task->name != NULL)
xbt_free(task->name);
+ if (task->surf_action != NULL)
+ xbt_free(task->surf_action);
+
xbt_dynar_free(&task->tasks_before);
xbt_dynar_free(&task->tasks_after);
xbt_free(task);
SD_CHECK_INIT_DONE();
xbt_assert0(SD_workstation_get_number() > 0, "There is no workstation!");
- SD_workstation_t *array = sd_global->workstation_list;
xbt_dict_cursor_t cursor;
char *key;
void *data;
int i;
- if (array == NULL) { /* this is the first time the function is called */
- array = xbt_new0(SD_workstation_t, sd_global->workstation_count);
+ if (sd_global->workstation_list == NULL) { /* this is the first time the function is called */
+ sd_global->workstation_list = xbt_new0(SD_workstation_t, sd_global->workstation_count);
i = 0;
xbt_dict_foreach(sd_global->workstations, cursor, key, data) {
- array[i++] = (SD_workstation_t) data;
+ sd_global->workstation_list[i++] = (SD_workstation_t) data;
}
}
- return array;
+ return sd_global->workstation_list;
}
/**
if (bandwidth < min_bandwidth || min_bandwidth == -1.0)
min_bandwidth = bandwidth;
}
+ xbt_free(links);
return latency + (communication_amount / min_bandwidth);
}