X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ec4e2d87d99b8ad76c9096033eb858e9052b09fa..f9d7b35c174d52377ef297f786129e0340ae0778:/src/surf/host_ptask_L07.cpp diff --git a/src/surf/host_ptask_L07.cpp b/src/surf/host_ptask_L07.cpp index 5563153b4f..fba3ef6324 100644 --- a/src/surf/host_ptask_L07.cpp +++ b/src/surf/host_ptask_L07.cpp @@ -199,9 +199,9 @@ L07Action::L07Action(Model *model, int host_nb, xbt_dict_t ptask_parallel_task_link_set = xbt_dict_new_homogeneous(NULL); - this->p_edgeList->reserve(host_nb); + this->p_netcardList->reserve(host_nb); for (int i = 0; ip_edgeList->push_back(sg_host_edge(host_list[i])); + this->p_netcardList->push_back(host_list[i]->p_netcard); /* Compute the number of affected resources... */ for (int i = 0; i < host_nb; i++) { @@ -214,7 +214,7 @@ L07Action::L07Action(Model *model, int host_nb, void *_link; LinkL07 *link; - routing_platf->getRouteAndLatency((*this->p_edgeList)[i], (*this->p_edgeList)[j], + routing_platf->getRouteAndLatency((*this->p_netcardList)[i], (*this->p_netcardList)[j], &route, &lat); latency = MAX(latency, lat); @@ -260,7 +260,7 @@ L07Action::L07Action(Model *model, int host_nb, if (bytes_amount[i * host_nb + j] == 0.0) continue; - routing_platf->getRouteAndLatency((*this->p_edgeList)[i], (*this->p_edgeList)[j], + routing_platf->getRouteAndLatency((*this->p_netcardList)[i], (*this->p_netcardList)[j], &route, NULL); xbt_dynar_foreach(route, cpt, _link) { @@ -402,7 +402,6 @@ CpuL07::CpuL07(CpuL07Model *model, simgrid::Host *host, : Cpu(model, host, speedPeakList, pstate, core, xbt_dynar_get_as(speedPeakList,pstate,double), speedScale, state_initial) { - xbt_assert(m_speedScale > 0, "Power has to be >0"); p_constraint = lmm_constraint_new(model->getMaxminSystem(), this, xbt_dynar_get_as(speedPeakList,pstate,double) * speedScale); if (speedTrace) @@ -475,6 +474,25 @@ bool CpuL07::isUsed(){ return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); } +/** @brief take into account changes of speed (either load or max) */ +void CpuL07::onSpeedChange() { + lmm_variable_t var = NULL; + lmm_element_t elem = NULL; + + lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), m_speedPeak * m_speedScale); + while ((var = lmm_get_var_from_cnst + (getModel()->getMaxminSystem(), getConstraint(), &elem))) { + Action *action = static_cast(lmm_variable_id(var)); + + lmm_update_variable_bound(getModel()->getMaxminSystem(), + action->getVariable(), + m_speedScale * m_speedPeak); + } + + Cpu::onSpeedChange(); +} + + bool LinkL07::isUsed(){ return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint()); } @@ -482,8 +500,8 @@ bool LinkL07::isUsed(){ void CpuL07::updateState(tmgr_trace_event_t event_type, double value, double /*date*/){ XBT_DEBUG("Updating cpu %s (%p) with value %g", getName(), this, value); if (event_type == p_speedEvent) { - m_speedScale = value; - lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), m_speedPeak * m_speedScale); + m_speedScale = value; + onSpeedChange(); if (tmgr_trace_event_free(event_type)) p_speedEvent = NULL; } else if (event_type == p_stateEvent) { @@ -563,7 +581,7 @@ void L07Action::updateBound() double lat_bound = -1.0; int i, j; - int hostNb = p_edgeList->size(); + int hostNb = p_netcardList->size(); for (i = 0; i < hostNb; i++) { for (j = 0; j < hostNb; j++) { @@ -571,7 +589,7 @@ void L07Action::updateBound() if (p_communicationAmount[i * hostNb + j] > 0) { double lat = 0.0; - routing_platf->getRouteAndLatency((*p_edgeList)[i], (*p_edgeList)[j], + routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], &route, &lat); lat_current = MAX(lat_current, lat * p_communicationAmount[i * hostNb + j]);