X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a4fc28ec2b9c97fc5bff04e0e5f420703f5ab419..18adbd43b8c21a9a2ccfd89a68171cdefa27b206:/src/simdag/sd_task.cpp diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index c9243b018e..f15f7bc91d 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); @@ -321,7 +350,7 @@ void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) xbt_dynar_push(sd_global->completed_task_set,&task); task->finish_time = task->surf_action->getFinishTime(); task->remains = 0; -#ifdef HAVE_JEDULE +#if HAVE_JEDULE jedule_log_sd_event(task); #endif break; @@ -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 * @@ -818,7 +839,7 @@ double SD_task_get_execution_time(SD_task_t task, int workstation_nb, const sg_h for (int i = 0; i < workstation_nb; i++) { double time = 0.0; if (flops_amount != NULL) - time = flops_amount[i] / sg_host_speed(workstation_list[i]); + time = flops_amount[i] / workstation_list[i]->speed(); if (bytes_amount != NULL) for (int j = 0; j < workstation_nb; j++) { @@ -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 *