X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/76081077f259960acb8a8624359ad2aa5c32ab46..237fd22b56db7d1c67360c37559ce3aab16a002d:/src/kernel/activity/ExecImpl.cpp diff --git a/src/kernel/activity/ExecImpl.cpp b/src/kernel/activity/ExecImpl.cpp index c1d2583cce..3b55aff1ca 100644 --- a/src/kernel/activity/ExecImpl.cpp +++ b/src/kernel/activity/ExecImpl.cpp @@ -7,6 +7,7 @@ #include "simgrid/Exception.hpp" #include "simgrid/kernel/routing/NetPoint.hpp" #include "simgrid/modelchecker.h" +#include "simgrid/s4u/Engine.hpp" #include "simgrid/s4u/Exec.hpp" #include "src/kernel/actor/SimcallObserver.hpp" #include "src/mc/mc_replay.hpp" @@ -47,7 +48,7 @@ ExecImpl& ExecImpl::set_hosts(const std::vector& hosts) ExecImpl& ExecImpl::set_timeout(double timeout) { if (timeout >= 0 && not MC_is_active() && not MC_record_replay_is_active()) { - timeout_detector_.reset(hosts_.front()->pimpl_cpu->sleep(timeout)); + timeout_detector_.reset(hosts_.front()->get_cpu()->sleep(timeout)); timeout_detector_->set_activity(this); } return *this; @@ -77,16 +78,11 @@ ExecImpl* ExecImpl::start() state_ = State::RUNNING; if (not MC_is_active() && not MC_record_replay_is_active()) { if (hosts_.size() == 1) { - surf_action_ = hosts_.front()->pimpl_cpu->execution_start(flops_amounts_.front()); + surf_action_ = hosts_.front()->get_cpu()->execution_start(flops_amounts_.front(), bound_); surf_action_->set_sharing_penalty(sharing_penalty_); surf_action_->set_category(get_tracing_category()); - - if (bound_ > 0) { - surf_action_->set_bound(bound_); - surf_action_->set_user_bound(bound_); - } } else { - // FIXME[donassolo]: verify if all hosts belongs to the same netZone? + // get the model from first host since we have only 1 by now auto host_model = hosts_.front()->get_netpoint()->get_englobing_zone()->get_host_model(); surf_action_ = host_model->execute_parallel(hosts_, flops_amounts_.data(), bytes_amounts_.data(), -1); } @@ -188,10 +184,11 @@ void ExecImpl::finish() } switch (state_) { case State::FAILED: - simcall->issuer_->context_->set_wannadie(); + piface_->complete(s4u::Activity::State::FAILED); if (simcall->issuer_->get_host()->is_on()) simcall->issuer_->exception_ = std::make_exception_ptr(HostFailureException(XBT_THROW_POINT, "Host failed")); - /* else, the actor will be killed with no possibility to survive */ + else /* else, the actor will be killed with no possibility to survive */ + simcall->issuer_->context_->set_wannadie(); break; case State::CANCELED: @@ -220,7 +217,7 @@ ActivityImpl* ExecImpl::migrate(s4u::Host* to) { if (not MC_is_active() && not MC_record_replay_is_active()) { resource::Action* old_action = this->surf_action_; - resource::Action* new_action = to->pimpl_cpu->execution_start(old_action->get_cost()); + resource::Action* new_action = to->get_cpu()->execution_start(old_action->get_cost(), old_action->get_user_bound()); new_action->set_remains(old_action->get_remains()); new_action->set_activity(this); new_action->set_sharing_penalty(old_action->get_sharing_penalty()); @@ -241,7 +238,7 @@ void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vectorsimcall_.timeout_cb_ = nullptr; } else { - issuer->simcall_.timeout_cb_ = timer::Timer::set(SIMIX_get_clock() + timeout, [issuer, &execs]() { + issuer->simcall_.timeout_cb_ = timer::Timer::set(s4u::Engine::get_clock() + timeout, [issuer, &execs]() { issuer->simcall_.timeout_cb_ = nullptr; for (auto* exec : execs) exec->unregister_simcall(&issuer->simcall_); @@ -253,7 +250,6 @@ void ExecImpl::wait_any_for(actor::ActorImpl* issuer, const std::vectorsimcalls_.push_back(&issuer->simcall_); - /* see if the synchro is already finished */ if (exec->state_ != State::WAITING && exec->state_ != State::RUNNING) { exec->finish();