A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
One more dynar less.
[simgrid.git]
/
src
/
simdag
/
sd_global.cpp
diff --git
a/src/simdag/sd_global.cpp
b/src/simdag/sd_global.cpp
index
38a5852
..
bc5f199
100644
(file)
--- a/
src/simdag/sd_global.cpp
+++ b/
src/simdag/sd_global.cpp
@@
-1,14
+1,14
@@
-/* Copyright (c) 2006-2016. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2006-2019. The SimGrid Team. All rights reserved. */
/* 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. */
/* 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 "simgrid/sg_config.h"
-#include "simgrid/host.h"
-#include "src/surf/surf_interface.hpp"
-#include "simgrid/s4u/engine.hpp"
#include "simdag_private.hpp"
#include "simdag_private.hpp"
+#include "simgrid/kernel/resource/Action.hpp"
+#include "simgrid/kernel/resource/Model.hpp"
+#include "simgrid/s4u/Engine.hpp"
+#include "simgrid/sg_config.hpp"
+#include "src/surf/surf_interface.hpp"
XBT_LOG_NEW_CATEGORY(sd, "Logging specific to SimDag");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_kernel, sd, "Logging specific to SimDag (kernel)");
XBT_LOG_NEW_CATEGORY(sd, "Logging specific to SimDag");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_kernel, sd, "Logging specific to SimDag (kernel)");
@@
-39,13
+39,14
@@
std::set<SD_task_t>* simulate(double how_long){
sd_global->return_set->clear();
/* explore the runnable tasks */
sd_global->return_set->clear();
/* explore the runnable tasks */
- while
(!
sd_global->runnable_tasks->empty())
+ while
(not
sd_global->runnable_tasks->empty())
SD_task_run(*(sd_global->runnable_tasks->begin()));
double elapsed_time = 0.0;
double total_time = 0.0;
/* main loop */
SD_task_run(*(sd_global->runnable_tasks->begin()));
double elapsed_time = 0.0;
double total_time = 0.0;
/* main loop */
- while (elapsed_time >= 0 && (how_long < 0 || 0.00001 < (how_long -total_time)) && !sd_global->watch_point_reached) {
+ while (elapsed_time >= 0 && (how_long < 0 || 0.00001 < (how_long - total_time)) &&
+ not sd_global->watch_point_reached) {
XBT_DEBUG("Total time: %f", total_time);
XBT_DEBUG("Total time: %f", total_time);
@@
-55,10
+56,10
@@
std::set<SD_task_t>* simulate(double how_long){
total_time += elapsed_time;
/* let's see which tasks are done */
total_time += elapsed_time;
/* let's see which tasks are done */
- for (auto
model : *
all_existing_models) {
- s
urf_action_t action = surf_model_extract_done_action_set(model
);
- while (action != nullptr) {
- SD_task_t task = static_cast<SD_task_t>(action->get
D
ata());
+ for (auto
const& model :
all_existing_models) {
+ s
imgrid::kernel::resource::Action* action = model->extract_done_action(
);
+ while (action != nullptr
&& action->get_data() != nullptr
) {
+ SD_task_t task = static_cast<SD_task_t>(action->get
_d
ata());
XBT_VERB("Task '%s' done", SD_task_get_name(task));
SD_task_set_state(task, SD_DONE);
XBT_VERB("Task '%s' done", SD_task_get_name(task));
SD_task_set_state(task, SD_DONE);
@@
-67,7
+68,7
@@
std::set<SD_task_t>* simulate(double how_long){
sd_global->return_set->insert(task);
/* remove the dependencies after this task */
sd_global->return_set->insert(task);
/* remove the dependencies after this task */
- for (auto succ : *task->successors) {
+ for (auto
const&
succ : *task->successors) {
succ->predecessors->erase(task);
succ->inputs->erase(task);
XBT_DEBUG("Release dependency on %s: %zu remain(s). Becomes schedulable if %zu=0", SD_task_get_name(succ),
succ->predecessors->erase(task);
succ->inputs->erase(task);
XBT_DEBUG("Release dependency on %s: %zu remain(s). Becomes schedulable if %zu=0", SD_task_get_name(succ),
@@
-79,12
+80,12
@@
std::set<SD_task_t>* simulate(double how_long){
if (SD_task_get_state(succ) == SD_SCHEDULED && succ->predecessors->empty() && succ->inputs->empty())
SD_task_set_state(succ, SD_RUNNABLE);
if (SD_task_get_state(succ) == SD_SCHEDULED && succ->predecessors->empty() && succ->inputs->empty())
SD_task_set_state(succ, SD_RUNNABLE);
- if (SD_task_get_state(succ) == SD_RUNNABLE &&
!
sd_global->watch_point_reached)
+ if (SD_task_get_state(succ) == SD_RUNNABLE &&
not
sd_global->watch_point_reached)
SD_task_run(succ);
}
task->successors->clear();
SD_task_run(succ);
}
task->successors->clear();
- for (auto output : *task->outputs) {
+ for (auto
const&
output : *task->outputs) {
output->start_time = task->finish_time;
output->predecessors->erase(task);
if (SD_task_get_state(output) == SD_SCHEDULED)
output->start_time = task->finish_time;
output->predecessors->erase(task);
if (SD_task_get_state(output) == SD_SCHEDULED)
@@
-98,28
+99,28
@@
std::set<SD_task_t>* simulate(double how_long){
SD_task_get_name(output), SD_task_get_name(comm_dst), comm_dst->predecessors->size());
SD_task_set_state(comm_dst, SD_SCHEDULABLE);
}
SD_task_get_name(output), SD_task_get_name(comm_dst), comm_dst->predecessors->size());
SD_task_set_state(comm_dst, SD_SCHEDULABLE);
}
- if (SD_task_get_state(output) == SD_RUNNABLE &&
!
sd_global->watch_point_reached)
+ if (SD_task_get_state(output) == SD_RUNNABLE &&
not
sd_global->watch_point_reached)
SD_task_run(output);
}
task->outputs->clear();
SD_task_run(output);
}
task->outputs->clear();
- action =
surf_model_extract_done_action_set(model
);
+ action =
model->extract_done_action(
);
}
/* let's see which tasks have just failed */
}
/* let's see which tasks have just failed */
- action =
surf_model_extract_failed_action_set(model
);
+ action =
model->extract_failed_action(
);
while (action != nullptr) {
while (action != nullptr) {
- SD_task_t task = static_cast<SD_task_t>(action->get
D
ata());
+ SD_task_t task = static_cast<SD_task_t>(action->get
_d
ata());
XBT_VERB("Task '%s' failed", SD_task_get_name(task));
SD_task_set_state(task, SD_FAILED);
sd_global->return_set->insert(task);
XBT_VERB("Task '%s' failed", SD_task_get_name(task));
SD_task_set_state(task, SD_FAILED);
sd_global->return_set->insert(task);
- action =
surf_model_extract_failed_action_set(model
);
+ action =
model->extract_failed_action(
);
}
}
}
}
}
}
- if (
!sd_global->watch_point_reached && how_long < 0 && !
sd_global->initial_tasks->empty()) {
+ if (
not sd_global->watch_point_reached && how_long < 0 && not
sd_global->initial_tasks->empty()) {
XBT_WARN("Simulation is finished but %zu tasks are still not done", sd_global->initial_tasks->size());
XBT_WARN("Simulation is finished but %zu tasks are still not done", sd_global->initial_tasks->size());
- for (auto t : *sd_global->initial_tasks)
+ for (auto
const&
t : *sd_global->initial_tasks)
XBT_WARN("%s is in %s state", SD_task_get_name(t), __get_state_name(SD_task_get_state(t)));
}
XBT_WARN("%s is in %s state", SD_task_get_name(t), __get_state_name(SD_task_get_state(t)));
}
@@
-133,9
+134,9
@@
std::set<SD_task_t>* simulate(double how_long){
}
/**
}
/**
- *
\
brief helper for pretty printing of task state
- *
\
param state the state of a task
- *
\
return the equivalent as a readable string
+ *
@
brief helper for pretty printing of task state
+ *
@
param state the state of a task
+ *
@
return the equivalent as a readable string
*/
const char *__get_state_name(e_SD_task_state_t state){
static std::string state_names[7] =
*/
const char *__get_state_name(e_SD_task_state_t state){
static std::string state_names[7] =
@@
-144,15
+145,15
@@
const char *__get_state_name(e_SD_task_state_t state){
}
/**
}
/**
- *
\
brief Initializes SD internal data
+ *
@
brief Initializes SD internal data
*
* This function must be called before any other SD function. Then you should call SD_create_environment().
*
*
* This function must be called before any other SD function. Then you should call SD_create_environment().
*
- *
\
param argc argument number
- *
\
param argv argument list
- *
\
see SD_create_environment(), SD_exit()
+ *
@
param argc argument number
+ *
@
param argv argument list
+ *
@
see SD_create_environment(), SD_exit()
*/
*/
-void SD_init(int *argc, char **argv)
+void SD_init
_nocheck
(int *argc, char **argv)
{
xbt_assert(sd_global == nullptr, "SD_init() already called");
{
xbt_assert(sd_global == nullptr, "SD_init() already called");
@@
-160,49
+161,49
@@
void SD_init(int *argc, char **argv)
surf_init(argc, argv);
surf_init(argc, argv);
- xbt_cfg_setdefault_string("host/model", "ptask_L07");
-
+ simgrid::config::set_default<std::string>("host/model", "ptask_L07");
+ if (simgrid::config::get_value<bool>("clean-atexit"))
+ atexit(SD_exit);
if (_sg_cfg_exit_asap) {
if (_sg_cfg_exit_asap) {
- SD_exit();
exit(0);
}
}
exit(0);
}
}
-/**
\
brief set a configuration variable
+/**
@
brief set a configuration variable
*
* Do --help on any simgrid binary to see the list of currently existing configuration variables, and
* see Section @ref options.
*
*
* Do --help on any simgrid binary to see the list of currently existing configuration variables, and
* see Section @ref options.
*
- * Example: SD_config("host/model","default")
;
+ * Example: SD_config("host/model","default")
*/
void SD_config(const char *key, const char *value){
xbt_assert(sd_global,"ERROR: Please call SD_init() before using SD_config()");
*/
void SD_config(const char *key, const char *value){
xbt_assert(sd_global,"ERROR: Please call SD_init() before using SD_config()");
-
xbt_cfg_
set_as_string(key, value);
+
simgrid::config::
set_as_string(key, value);
}
/**
}
/**
- *
\
brief Creates the environment
+ *
@
brief Creates the environment
*
*
- * The environment (i.e. the
\ref SD_host_api "hosts" and the \
ref SD_link_api "links") is created with
+ * The environment (i.e. the
@ref SD_host_api "hosts" and the @
ref SD_link_api "links") is created with
* the data stored in the given XML platform file.
*
* the data stored in the given XML platform file.
*
- *
\
param platform_file name of an XML file describing the environment to create
- *
\
see SD_host_api, SD_link_api
+ *
@
param platform_file name of an XML file describing the environment to create
+ *
@
see SD_host_api, SD_link_api
*
* The XML file follows this DTD:
*
*
* The XML file follows this DTD:
*
- *
\
include simgrid.dtd
+ *
@
include simgrid.dtd
*
* Here is a small example of such a platform:
*
*
* Here is a small example of such a platform:
*
- *
\
include small_platform.xml
+ *
@
include small_platform.xml
*/
void SD_create_environment(const char *platform_file)
{
*/
void SD_create_environment(const char *platform_file)
{
- simgrid::s4u::Engine::
instance()->loadP
latform(platform_file);
+ simgrid::s4u::Engine::
get_instance()->load_p
latform(platform_file);
XBT_DEBUG("Host number: %zu, link number: %d", sg_host_count(), sg_link_count());
XBT_DEBUG("Host number: %zu, link number: %d", sg_host_count(), sg_link_count());
-#if HAVE_JEDULE
+#if
SIMGRID_
HAVE_JEDULE
jedule_sd_init();
#endif
XBT_VERB("Starting simulation...");
jedule_sd_init();
#endif
XBT_VERB("Starting simulation...");
@@
-210,26
+211,29
@@
void SD_create_environment(const char *platform_file)
}
/**
}
/**
- *
\
brief Launches the simulation.
+ *
@
brief Launches the simulation.
*
*
- * The function will execute the
\
ref SD_RUNNABLE runnable tasks.
- * If
\a how_long is positive, then the simulation will be stopped either when time reaches \
a how_long or when a watch
+ * The function will execute the
@
ref SD_RUNNABLE runnable tasks.
+ * If
@a how_long is positive, then the simulation will be stopped either when time reaches @
a how_long or when a watch
* point is reached.
* point is reached.
- * A non-positive value for
\
a how_long means no time limit, in which case the simulation will be stopped either when a
+ * A non-positive value for
@
a how_long means no time limit, in which case the simulation will be stopped either when a
* watch point is reached or when no more task can be executed.
* Then you can call SD_simulate() again.
*
* watch point is reached or when no more task can be executed.
* Then you can call SD_simulate() again.
*
- *
\
param how_long maximum duration of the simulation (a negative value means no time limit)
- *
\return a dynar of \
ref SD_task_t whose state has changed.
- *
\
see SD_task_schedule(), SD_task_watch()
+ *
@
param how_long maximum duration of the simulation (a negative value means no time limit)
+ *
@return a dynar of @
ref SD_task_t whose state has changed.
+ *
@
see SD_task_schedule(), SD_task_watch()
*/
*/
+void SD_simulate(double how_long)
+{
+ simgrid::sd::simulate(how_long);
+}
-xbt_dynar_t SD_simulate(double how_long) {
+void SD_simulate_with_update(double how_long, xbt_dynar_t changed_tasks_dynar)
+{
std::set<SD_task_t> *changed_tasks = simgrid::sd::simulate(how_long);
std::set<SD_task_t> *changed_tasks = simgrid::sd::simulate(how_long);
- xbt_dynar_t changed_tasks_dynar = xbt_dynar_new(sizeof(SD_task_t), nullptr);
- for (auto task: *changed_tasks)
+ for (auto const& task : *changed_tasks)
xbt_dynar_push(changed_tasks_dynar, &task);
xbt_dynar_push(changed_tasks_dynar, &task);
- return changed_tasks_dynar;
}
/** @brief Returns the current clock, in seconds */
}
/** @brief Returns the current clock, in seconds */
@@
-238,13
+242,13
@@
double SD_get_clock() {
}
/**
}
/**
- *
\
brief Destroys all SD internal data
+ *
@
brief Destroys all SD internal data
* This function should be called when the simulation is over. Don't forget to destroy too.
* This function should be called when the simulation is over. Don't forget to destroy too.
- *
\
see SD_init(), SD_task_destroy()
+ *
@
see SD_init(), SD_task_destroy()
*/
void SD_exit()
{
*/
void SD_exit()
{
-#if HAVE_JEDULE
+#if
SIMGRID_
HAVE_JEDULE
jedule_sd_exit();
#endif
delete sd_global;
jedule_sd_exit();
#endif
delete sd_global;