X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3203afd846219ef8b41cadda945ea0a98103c46f..80b0dab1bd7ba4a54252a45cba41e33991e9f6ff:/src/kernel/EngineImpl.cpp diff --git a/src/kernel/EngineImpl.cpp b/src/kernel/EngineImpl.cpp index ff519e4b04..e3e701a47e 100644 --- a/src/kernel/EngineImpl.cpp +++ b/src/kernel/EngineImpl.cpp @@ -14,21 +14,22 @@ #include "src/kernel/resource/profile/Profile.hpp" #include "src/kernel/xml/platf.hpp" #include "src/mc/mc.h" +#include "src/mc/mc_config.hpp" #include "src/mc/mc_record.hpp" #include "src/mc/mc_replay.hpp" #include "src/simgrid/math_utils.h" #include "src/simgrid/sg_config.hpp" #include "src/smpi/include/smpi_actor.hpp" +#if SIMGRID_HAVE_MC +#include "src/mc/remote/AppSide.hpp" +#endif + #include "xbt/log.hpp" #include #include -#if SIMGRID_HAVE_MC -#include "src/mc/remote/AppSide.hpp" -#endif - XBT_LOG_NEW_DEFAULT_CATEGORY(ker_engine, "Logging specific to Engine (kernel)"); namespace simgrid::kernel { @@ -175,7 +176,7 @@ void EngineImpl::initialize(int* argc, char** argv) // The communication initialization is done ASAP, as we need to get some init parameters from the MC for different // layers. But instance_ needs to be created, as we send the address of some of its fields to the MC that wants to // read them directly. - simgrid::mc::AppSide::initialize(); + simgrid::mc::AppSide::get(); // To ensure that it's initialized #endif if (static bool inited = false; not inited) { @@ -184,19 +185,15 @@ void EngineImpl::initialize(int* argc, char** argv) simgrid::xbt::install_exception_handler(); - for (int i = 0; i < *argc; i++) - cmdline_.emplace_back(argv[i]); - sg_config_init(argc, argv); } + cmdline_.assign(argv, argv + *argc); + instance_->context_mod_init(); install_signal_handlers(); - /* register a function to be called after the environment creation */ - s4u::Engine::on_platform_created_cb([this]() { this->presolve(); }); - if (cfg_dbg_clean_atexit) atexit(shutdown); } @@ -324,7 +321,7 @@ void EngineImpl::load_deployment(const std::string& file) const sg_platf_parser_finalize(); simgrid_parse_open(file); - simgrid_parse(); + simgrid_parse(false); simgrid_parse_close(); } @@ -477,27 +474,6 @@ void EngineImpl::display_all_actor_status() const } } -void EngineImpl::presolve() const -{ - XBT_DEBUG("Consume all trace events occurring before the starting time."); - double next_event_date; - while ((next_event_date = profile::future_evt_set.next_date()) != -1.0) { - if (next_event_date > now_) - break; - - double value = -1.0; - resource::Resource* resource = nullptr; - while (auto* event = profile::future_evt_set.pop_leq(next_event_date, &value, &resource)) { - if (value >= 0) - resource->apply_event(event, value); - } - } - - XBT_DEBUG("Set every models in the right state by updating them to 0."); - for (auto const& model : models_) - model->update_actions_state(now_, 0.0); -} - double EngineImpl::solve(double max_date) const { double time_delta = -1.0; /* duration */ @@ -512,9 +488,9 @@ double EngineImpl::solve(double max_date) const XBT_DEBUG("Looking for next event in all models"); for (auto model : models_) { - if (not model->next_occurring_event_is_idempotent()) { + if (not model->next_occurring_event_is_idempotent()) continue; - } + double next_event = model->next_occurring_event(now_); if ((time_delta < 0.0 || next_event < time_delta) && next_event >= 0.0) { time_delta = next_event; @@ -605,6 +581,9 @@ void EngineImpl::run(double max_date) { seal_platform(); + XBT_DEBUG("Running the main loop until t=%.3f in mode %s", max_date, + to_c_str(simgrid::mc::get_model_checking_mode())); + if (MC_is_active()) { #if SIMGRID_HAVE_MC mc::AppSide::get()->main_loop();