#include "xbt/misc.h"
#include "xbt/dynar.h"
#include "xbt/dict.h"
-
#include "simgrid/link.h"
SG_BEGIN_DECL()
SD_TASK_COMM_PAR_MXN_1D_BLOCK = 4 /**< @brief MxN data redistribution (1D Block distribution) */
} e_SD_task_kind_t;
-
/** @brief Storage datatype
@ingroup SD_datatypes_management
typedef xbt_dictelm_t SD_storage_t;
/************************** Workstation handling ****************************/
-
/** @defgroup sg_host_management Hosts
* @brief Functions for managing the Hosts
*
/** @} */
/************************** Task handling ************************************/
-
/** @defgroup SD_task_management Tasks
* @brief Functions for managing the tasks
*
/** @} */
-
/** @defgroup SD_task_dependency_management Tasks dependencies
* @brief Functions for managing the task dependencies
*
/** @} */
/************************** Global *******************************************/
-
/** @defgroup SD_simulation Simulation
* @brief Functions for creating the environment and launching the simulation
*
//TRACE_sd_set_task_category
SG_END_DECL()
-
-#include "simgrid/instr.h"
-
#endif
#undef register
}
-bool children_are_marked(SD_task_t task);
-bool parents_are_marked(SD_task_t task);
-
-/* Parsing helpers */
-
static double dax_parse_double(const char *string)
{
double value;
-
int ret = sscanf(string, "%lg", &value);
xbt_assert (ret == 1, "Parse error on line %d: %s is not a double", dax_lineno, string);
return value;
free(new_name);
}
-bool children_are_marked(SD_task_t task){
+static bool children_are_marked(SD_task_t task){
SD_dependency_t depafter = NULL;
unsigned int count;
xbt_dynar_foreach(task->tasks_after,count,depafter){
- if(depafter->dst->marked == 0) {
+ if(depafter->dst->marked == 0)
return false;
- }
}
return true;
}
-bool parents_are_marked(SD_task_t task){
+static bool parents_are_marked(SD_task_t task){
SD_dependency_t depbefore = NULL;
unsigned int count;
xbt_dynar_foreach(task->tasks_before,count,depbefore){
- if(depbefore->src->marked == 0) {
+ if(depbefore->src->marked == 0)
return false;
- }
}
return true;
}
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)
{
}
}
-/* 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
*
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)
{
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
*