X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a4fc28ec2b9c97fc5bff04e0e5f420703f5ab419..507785035fffb029577ed608142f0cb8a43f77e9:/src/simdag/sd_task.cpp diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index c9243b018e..c13942043e 100644 --- a/src/simdag/sd_task.cpp +++ b/src/simdag/sd_task.cpp @@ -4,18 +4,47 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include "src/surf/HostImpl.hpp" #include "src/surf/surf_interface.hpp" -#include "src/surf/host_interface.hpp" #include "src/simdag/simdag_private.h" #include "simgrid/simdag.h" -#include "xbt/sysdep.h" -#include "xbt/dynar.h" #include "src/instr/instr_private.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_task, sd, "Logging specific to SimDag (task)"); -static void __SD_task_remove_dependencies(SD_task_t task); -static void __SD_task_destroy_scheduling_data(SD_task_t task); +/* Destroys a dependency between two tasks. */ +static void __SD_task_dependency_destroy(void *dependency) +{ + xbt_free(((SD_dependency_t)dependency)->name); + xbt_free(dependency); +} + +/* Remove all dependencies associated with a task. This function is called when the task is destroyed. */ +static void __SD_task_remove_dependencies(SD_task_t task) +{ + /* we must destroy the dependencies carefuly (with SD_dependency_remove) because each one is stored twice */ + SD_dependency_t dependency; + while (!xbt_dynar_is_empty(task->tasks_before)) { + xbt_dynar_get_cpy(task->tasks_before, 0, &dependency); + SD_task_dependency_remove(dependency->src, dependency->dst); + } + + while (!xbt_dynar_is_empty(task->tasks_after)) { + xbt_dynar_get_cpy(task->tasks_after, 0, &dependency); + SD_task_dependency_remove(dependency->src, dependency->dst); + } +} + +/* Destroys the data memorized by SD_task_schedule. Task state must be SD_SCHEDULED or SD_RUNNABLE. */ +static void __SD_task_destroy_scheduling_data(SD_task_t task) +{ + if (task->state != SD_SCHEDULED && task->state != SD_RUNNABLE) + THROWF(arg_error, 0, "Task '%s' must be SD_SCHEDULED or SD_RUNNABLE", SD_task_get_name(task)); + + xbt_free(task->flops_amount); + xbt_free(task->bytes_amount); + task->flops_amount = task->bytes_amount = NULL; +} void* SD_task_new_f(void) { @@ -87,7 +116,7 @@ SD_task_t SD_task_create(const char *name, void *data, double amount) return task; } -static XBT_INLINE SD_task_t SD_task_create_sized(const char *name, void *data, double amount, int ws_count) +static inline SD_task_t SD_task_create_sized(const char *name, void *data, double amount, int ws_count) { SD_task_t task = SD_task_create(name, data, amount); task->bytes_amount = xbt_new0(double, ws_count * ws_count); @@ -561,14 +590,6 @@ void SD_task_dotty(SD_task_t task, void *out) } } -/* Destroys a dependency between two tasks. - */ -static void __SD_task_dependency_destroy(void *dependency) -{ - xbt_free(((SD_dependency_t)dependency)->name); - xbt_free(dependency); -} - /** * \brief Adds a dependency between two tasks * @@ -836,7 +857,7 @@ double SD_task_get_execution_time(SD_task_t task, int workstation_nb, const sg_h return max_time; } -static XBT_INLINE void SD_task_do_schedule(SD_task_t task) +static inline void SD_task_do_schedule(SD_task_t task) { if (SD_task_get_state(task) > SD_SCHEDULABLE) THROWF(arg_error, 0, "Task '%s' has already been scheduled", SD_task_get_name(task)); @@ -932,18 +953,6 @@ void SD_task_unschedule(SD_task_t task) task->start_time = -1.0; } -/* Destroys the data memorized by SD_task_schedule. Task state must be SD_SCHEDULED or SD_RUNNABLE. - */ -static void __SD_task_destroy_scheduling_data(SD_task_t task) -{ - if (task->state != SD_SCHEDULED && task->state != SD_RUNNABLE) - THROWF(arg_error, 0, "Task '%s' must be SD_SCHEDULED or SD_RUNNABLE", SD_task_get_name(task)); - - xbt_free(task->flops_amount); - xbt_free(task->bytes_amount); - task->flops_amount = task->bytes_amount = NULL; -} - /* Runs a task. */ void SD_task_run(SD_task_t task) { @@ -981,24 +990,6 @@ void SD_task_run(SD_task_t task) SD_task_set_state(task, SD_RUNNING); } -/* - * Remove all dependencies associated with a task. This function is called when the task is destroyed. - */ -static void __SD_task_remove_dependencies(SD_task_t task) -{ - /* we must destroy the dependencies carefuly (with SD_dependency_remove) because each one is stored twice */ - SD_dependency_t dependency; - while (!xbt_dynar_is_empty(task->tasks_before)) { - xbt_dynar_get_cpy(task->tasks_before, 0, &dependency); - SD_task_dependency_remove(dependency->src, dependency->dst); - } - - while (!xbt_dynar_is_empty(task->tasks_after)) { - xbt_dynar_get_cpy(task->tasks_after, 0, &dependency); - SD_task_dependency_remove(dependency->src, dependency->dst); - } -} - /** * \brief Returns the start time of a task *