X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6bf993decaa5c52cf75ac9d187cdaaed4ec95614..36bbb3ccc91325b1ab657c221248ec19e227de4a:/src/simdag/sd_global.cpp diff --git a/src/simdag/sd_global.cpp b/src/simdag/sd_global.cpp index f6974f9eda..54c0aeb909 100644 --- a/src/simdag/sd_global.cpp +++ b/src/simdag/sd_global.cpp @@ -17,37 +17,22 @@ simgrid::sd::Global *sd_global = nullptr; namespace simgrid{ namespace sd{ -Global::Global(){ - watch_point_reached = false; - initial_tasks = new std::set(); - runnable_tasks = new std::set(); - completed_tasks = new std::set(); - return_set = new std::set(); -} - -Global::~Global(){ - delete initial_tasks; - delete runnable_tasks; - delete completed_tasks; - delete return_set; -} std::set* simulate(double how_long){ XBT_VERB("Run simulation for %f seconds", how_long); sd_global->watch_point_reached = false; - sd_global->return_set->clear(); + sd_global->return_set.clear(); /* explore the runnable tasks */ - while (not sd_global->runnable_tasks->empty()) - SD_task_run(*(sd_global->runnable_tasks->begin())); + 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 */ 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); elapsed_time = surf_solve(how_long > 0 ? surf_get_clock() + how_long - total_time: -1.0); @@ -57,15 +42,15 @@ std::set* simulate(double how_long){ /* let's see which tasks are done */ for (auto const& model : all_existing_models) { - simgrid::kernel::resource::Action* action = model->extract_done_action(); + const simgrid::kernel::resource::Action* action = model->extract_done_action(); while (action != nullptr && action->get_data() != nullptr) { SD_task_t task = static_cast(action->get_data()); XBT_VERB("Task '%s' done", SD_task_get_name(task)); SD_task_set_state(task, SD_DONE); /* the state has changed. Add it only if it's the first change */ - if (sd_global->return_set->find(task) == sd_global->return_set->end()) - sd_global->return_set->insert(task); + if (sd_global->return_set.find(task) == sd_global->return_set.end()) + sd_global->return_set.insert(task); /* remove the dependencies after this task */ for (auto const& succ : *task->successors) { @@ -112,15 +97,15 @@ std::set* simulate(double how_long){ SD_task_t task = static_cast(action->get_data()); XBT_VERB("Task '%s' failed", SD_task_get_name(task)); SD_task_set_state(task, SD_FAILED); - sd_global->return_set->insert(task); + sd_global->return_set.insert(task); action = model->extract_failed_action(); } } } - 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()); - for (auto const& t : *sd_global->initial_tasks) + 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()); + 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))); } @@ -128,7 +113,7 @@ std::set* simulate(double how_long){ elapsed_time, total_time, sd_global->watch_point_reached); XBT_DEBUG("current time = %f", surf_get_clock()); - return sd_global->return_set; + return &sd_global->return_set; } } } @@ -162,7 +147,7 @@ void SD_init_nocheck(int *argc, char **argv) sd_global = new simgrid::sd::Global(); simgrid::config::set_default("host/model", "ptask_L07"); - if (simgrid::config::get_value("clean-atexit")) + if (simgrid::config::get_value("debug/clean-atexit")) atexit(SD_exit); } @@ -228,7 +213,7 @@ void SD_simulate(double how_long) void SD_simulate_with_update(double how_long, xbt_dynar_t changed_tasks_dynar) { - std::set *changed_tasks = simgrid::sd::simulate(how_long); + const std::set* changed_tasks = simgrid::sd::simulate(how_long); for (auto const& task : *changed_tasks) xbt_dynar_push(changed_tasks_dynar, &task); }