X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4485d715fa3a090c1dd38def83ab8239feebecb3..8c753c341f0c7f6d5ea38c4cb7bf7da6f0ef0a1b:/src/surf/ptask_L07.cpp diff --git a/src/surf/ptask_L07.cpp b/src/surf/ptask_L07.cpp index 9668d51126..edf4f3045a 100644 --- a/src/surf/ptask_L07.cpp +++ b/src/surf/ptask_L07.cpp @@ -99,9 +99,7 @@ void HostL07Model::update_actions_state(double /*now*/, double delta) XBT_DEBUG("Action (%p) : remains (%g) updated by %g.", &action, action.get_remains(), action.get_variable()->get_value() * delta); action.update_remains(action.get_variable()->get_value() * delta); - - if (action.get_max_duration() > NO_MAX_DURATION) - action.update_max_duration(delta); + action.update_max_duration(delta); XBT_DEBUG("Action (%p) : remains (%g).", &action, action.get_remains()); @@ -112,34 +110,36 @@ void HostL07Model::update_actions_state(double /*now*/, double delta) */ if (((action.get_remains() <= 0) && (action.get_variable()->get_weight() > 0)) || - ((action.get_max_duration() > NO_MAX_DURATION) && (action.get_max_duration() <= 0))) { + ((action.get_max_duration() != NO_MAX_DURATION) && (action.get_max_duration() <= 0))) { action.finish(kernel::resource::Action::State::FINISHED); - } else { - /* Need to check that none of the model has failed */ - int i = 0; - kernel::lmm::Constraint* cnst = action.get_variable()->get_constraint(i); - while (cnst != nullptr) { - i++; - void* constraint_id = cnst->get_id(); - if (not static_cast(constraint_id)->is_on()) { - XBT_DEBUG("Action (%p) Failed!!", &action); - action.finish(kernel::resource::Action::State::FAILED); - break; - } - cnst = action.get_variable()->get_constraint(i); + continue; + } + + /* Need to check that none of the model has failed */ + int i = 0; + kernel::lmm::Constraint* cnst = action.get_variable()->get_constraint(i); + while (cnst != nullptr) { + i++; + void* constraint_id = cnst->get_id(); + if (not static_cast(constraint_id)->is_on()) { + XBT_DEBUG("Action (%p) Failed!!", &action); + action.finish(kernel::resource::Action::State::FAILED); + break; } + cnst = action.get_variable()->get_constraint(i); } } } -kernel::resource::Action* HostL07Model::execute_parallel(size_t host_nb, sg_host_t* host_list, double* flops_amount, - double* bytes_amount, double rate) +kernel::resource::Action* HostL07Model::execute_parallel(size_t host_nb, s4u::Host* const* host_list, + const double* flops_amount, const double* bytes_amount, + double rate) { return new L07Action(this, host_nb, host_list, flops_amount, bytes_amount, rate); } -L07Action::L07Action(kernel::resource::Model* model, size_t host_nb, sg_host_t* host_list, double* flops_amount, - double* bytes_amount, double rate) +L07Action::L07Action(kernel::resource::Model* model, size_t host_nb, s4u::Host* const* host_list, + const double* flops_amount, const double* bytes_amount, double rate) : CpuAction(model, 1, 0), computationAmount_(flops_amount), communicationAmount_(bytes_amount), rate_(rate) { size_t link_nb = 0; @@ -147,33 +147,26 @@ L07Action::L07Action(kernel::resource::Model* model, size_t host_nb, sg_host_t* double latency = 0.0; this->set_last_update(); - this->hostList_.reserve(host_nb); - for (size_t i = 0; i < host_nb; i++) - this->hostList_.push_back(host_list[i]); + hostList_.insert(hostList_.end(), host_list, host_list + host_nb); if (flops_amount != nullptr) - for (size_t i = 0; i < host_nb; i++) - if (flops_amount[i] > 0) - used_host_nb++; + used_host_nb += std::count_if(flops_amount, flops_amount + host_nb, [](double x) { return x > 0.0; }); /* Compute the number of affected resources... */ if(bytes_amount != nullptr) { std::unordered_set affected_links; - for (size_t i = 0; i < host_nb; i++) { - for (size_t j = 0; j < host_nb; j++) { - - if (bytes_amount[i * host_nb + j] > 0) { - double lat=0.0; + for (size_t k = 0; k < host_nb * host_nb; k++) { + if (bytes_amount[k] <= 0) + continue; - std::vector route; - hostList_.at(i)->route_to(hostList_.at(j), route, &lat); - latency = std::max(latency, lat); + double lat = 0.0; + std::vector route; + hostList_[k / host_nb]->route_to(hostList_[k % host_nb], route, &lat); + latency = std::max(latency, lat); - for (auto const& link : route) - affected_links.insert(link->get_cname()); - } - } + for (auto const& link : route) + affected_links.insert(link->get_cname()); } link_nb = affected_links.size(); @@ -187,24 +180,21 @@ L07Action::L07Action(kernel::resource::Model* model, size_t host_nb, sg_host_t* if (latency_ > 0) model->get_maxmin_system()->update_variable_weight(get_variable(), 0.0); - /* Expend it for the CPUs even if there is nothing to compute, to make sure that it gets expended even if there is no + /* Expand it for the CPUs even if there is nothing to compute, to make sure that it gets expended even if there is no * communication either */ for (size_t i = 0; i < host_nb; i++) model->get_maxmin_system()->expand(host_list[i]->pimpl_cpu->get_constraint(), get_variable(), (flops_amount == nullptr ? 0.0 : flops_amount[i])); if (bytes_amount != nullptr) { - for (size_t i = 0; i < host_nb; i++) { - for (size_t j = 0; j < host_nb; j++) { - if (bytes_amount[i * host_nb + j] > 0.0) { - std::vector route; - hostList_.at(i)->route_to(hostList_.at(j), route, nullptr); - - for (auto const& link : route) - model->get_maxmin_system()->expand_add(link->get_constraint(), this->get_variable(), - bytes_amount[i * host_nb + j]); - } - } + for (size_t k = 0; k < host_nb * host_nb; k++) { + if (bytes_amount[k] <= 0.0) + continue; + std::vector route; + hostList_[k / host_nb]->route_to(hostList_[k % host_nb], route, nullptr); + + for (auto const& link : route) + model->get_maxmin_system()->expand_add(link->get_constraint(), this->get_variable(), bytes_amount[k]); } }