X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a0213cc93b849f149294ee5ce99c147d957626a7..93ce0d679f2201528dd037dccf64fbb207c04a33:/src/surf/workstation_ptask_L07.cpp diff --git a/src/surf/workstation_ptask_L07.cpp b/src/surf/workstation_ptask_L07.cpp index f44c1a1834..30e25d4f2c 100644 --- a/src/surf/workstation_ptask_L07.cpp +++ b/src/surf/workstation_ptask_L07.cpp @@ -85,10 +85,10 @@ void WorkstationL07Model::updateActionsState(double /*now*/, double delta) deltap = delta; if (action->m_latency > 0) { if (action->m_latency > deltap) { - double_update(&(action->m_latency), deltap); + double_update(&(action->m_latency), deltap, sg_surf_precision); deltap = 0.0; } else { - double_update(&(deltap), action->m_latency); + double_update(&(deltap), action->m_latency, sg_surf_precision); action->m_latency = 0.0; } if ((action->m_latency == 0.0) && (action->isSuspended() == 0)) { @@ -287,19 +287,22 @@ xbt_dynar_t WorkstationL07Model::getRoute(WorkstationPtr src, WorkstationPtr dst return route; } -ResourcePtr CpuL07Model::createResource(const char *name, double power_scale, - double power_initial, - tmgr_trace_t power_trace, - e_surf_resource_state_t state_initial, - tmgr_trace_t state_trace, - xbt_dict_t cpu_properties) +CpuPtr CpuL07Model::createResource(const char *name, xbt_dynar_t powerPeak, + int pstate, double power_scale, + tmgr_trace_t power_trace, int core, + e_surf_resource_state_t state_initial, + tmgr_trace_t state_trace, + xbt_dict_t cpu_properties) { + double power_initial = xbt_dynar_get_as(powerPeak, pstate, double); + xbt_assert(!surf_workstation_resource_priv(surf_workstation_resource_by_name(name)), "Host '%s' declared several times in the platform file.", name); CpuL07Ptr cpu = new CpuL07(this, name, cpu_properties, - power_scale, power_initial, power_trace,state_initial, state_trace); + power_initial, power_scale, power_trace, + core, state_initial, state_trace); xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, static_cast(cpu)); @@ -357,7 +360,7 @@ void WorkstationL07Model::addTraces() xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - host->p_power.event = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(host)); + host->p_powerEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(host)); } /* Connect traces relative to network */ @@ -425,21 +428,18 @@ double WorkstationL07::getConsumedEnergy() } CpuL07::CpuL07(CpuL07ModelPtr model, const char* name, xbt_dict_t props, - double power_scale, - double power_initial, tmgr_trace_t power_trace, - e_surf_resource_state_t state_initial, tmgr_trace_t state_trace) + double power_initial, double power_scale, tmgr_trace_t power_trace, + int core, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace) : Cpu(model, name, props, lmm_constraint_new(ptask_maxmin_system, this, power_initial * power_scale), - 1, 0, 0) + core, power_initial, power_scale) { - p_power.scale = power_scale; - xbt_assert(p_power.scale > 0, "Power has to be >0"); + xbt_assert(m_powerScale > 0, "Power has to be >0"); - m_powerCurrent = power_initial; if (power_trace) - p_power.event = tmgr_history_add_trace(history, power_trace, 0.0, 0, + p_powerEvent = tmgr_history_add_trace(history, power_trace, 0.0, 0, static_cast(this)); else - p_power.event = NULL; + p_powerEvent = NULL; setState(state_initial); if (state_trace) @@ -480,11 +480,11 @@ 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_power.event) { - m_powerCurrent = value; - lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_powerCurrent * p_power.scale); + if (event_type == p_powerEvent) { + m_powerScale = value; + lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_powerPeak * m_powerScale); if (tmgr_trace_event_free(event_type)) - p_power.event = NULL; + p_powerEvent = NULL; } else if (event_type == p_stateEvent) { if (value > 0) setState(SURF_RESOURCE_ON); @@ -502,20 +502,11 @@ void CpuL07::updateState(tmgr_trace_event_t event_type, double value, double /*d void LinkL07::updateState(tmgr_trace_event_t event_type, double value, double date){ XBT_DEBUG("Updating link %s (%p) with value=%f for date=%g", getName(), this, value, date); if (event_type == p_bwEvent) { - m_bwCurrent = value; - lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_bwCurrent); + updateBandwidth(value, date); if (tmgr_trace_event_free(event_type)) p_bwEvent = NULL; } else if (event_type == p_latEvent) { - lmm_variable_t var = NULL; - WorkstationL07ActionPtr action; - lmm_element_t elem = NULL; - - m_latCurrent = value; - while ((var = lmm_get_var_from_cnst(ptask_maxmin_system, getConstraint(), &elem))) { - action = (WorkstationL07ActionPtr) lmm_variable_id(var); - action->updateBound(); - } + updateLatency(value, date); if (tmgr_trace_event_free(event_type)) p_latEvent = NULL; } else if (event_type == p_stateEvent) { @@ -537,16 +528,6 @@ e_surf_resource_state_t WorkstationL07::getState() return p_cpu->getState(); } -double CpuL07::getSpeed(double load) -{ - return load * p_power.scale; -} - -double CpuL07::getAvailableSpeed() -{ - return m_powerCurrent; -} - ActionPtr WorkstationL07::execute(double size) { void **workstation_list = xbt_new0(void *, 1); @@ -582,11 +563,31 @@ double LinkL07::getBandwidth() return m_bwCurrent; } +void LinkL07::updateBandwidth(double value, double date) +{ + m_bwCurrent = value; + lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_bwCurrent); +} + double LinkL07::getLatency() { return m_latCurrent; } +void LinkL07::updateLatency(double value, double date) +{ + lmm_variable_t var = NULL; + WorkstationL07ActionPtr action; + lmm_element_t elem = NULL; + + m_latCurrent = value; + while ((var = lmm_get_var_from_cnst(ptask_maxmin_system, getConstraint(), &elem))) { + action = (WorkstationL07ActionPtr) lmm_variable_id(var); + action->updateBound(); + } +} + + bool LinkL07::isShared() { return lmm_constraint_is_shared(getConstraint()); @@ -738,21 +739,6 @@ static void ptask_parse_workstation_init(sg_platf_host_cbarg_t host) host->properties); } -static void ptask_parse_cpu_init(sg_platf_host_cbarg_t host) -{ - double power_peak = xbt_dynar_get_as(host->power_peak, host->pstate, double); - static_cast(surf_cpu_model_pm)->createResource( - host->id, - power_peak, - host->power_scale, - host->power_trace, - host->initial_state, - host->state_trace, - host->properties); -} - - - static void ptask_parse_link_init(sg_platf_link_cbarg_t link) { if (link->policy == SURF_LINK_FULLDUPLEX) { @@ -802,7 +788,7 @@ static void ptask_add_traces(){ static void ptask_define_callbacks() { - sg_platf_host_add_cb(ptask_parse_cpu_init); + sg_platf_host_add_cb(parse_cpu_init); sg_platf_host_add_cb(ptask_parse_workstation_init); sg_platf_link_add_cb(ptask_parse_link_init); sg_platf_postparse_add_cb(ptask_add_traces);