X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a21681e5aca1a37efb2e9001e5055dec94c5de41..a0213cc93b849f149294ee5ce99c147d957626a7:/src/surf/workstation_ptask_L07.cpp diff --git a/src/surf/workstation_ptask_L07.cpp b/src/surf/workstation_ptask_L07.cpp index c93b29da9d..f44c1a1834 100644 --- a/src/surf/workstation_ptask_L07.cpp +++ b/src/surf/workstation_ptask_L07.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2010, 2013. The SimGrid Team. +/* Copyright (c) 2007-2010, 2013-2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ WorkstationL07Model::~WorkstationL07Model() { double WorkstationL07Model::shareResources(double /*now*/) { - WorkstationL07ActionLmmPtr action; + WorkstationL07ActionPtr action; ActionListPtr running_actions = getRunningActionSet(); double min = this->shareResourcesMaxMin(running_actions, @@ -52,7 +52,7 @@ double WorkstationL07Model::shareResources(double /*now*/) for(ActionList::iterator it(running_actions->begin()), itend(running_actions->end()) ; it != itend ; ++it) { - action = dynamic_cast(&*it); + action = static_cast(&*it); if (action->m_latency > 0) { if (min < 0) { min = action->m_latency; @@ -74,14 +74,14 @@ double WorkstationL07Model::shareResources(double /*now*/) void WorkstationL07Model::updateActionsState(double /*now*/, double delta) { double deltap = 0.0; - WorkstationL07ActionLmmPtr action; + WorkstationL07ActionPtr action; ActionListPtr actionSet = getRunningActionSet(); for(ActionList::iterator it(actionSet->begin()), itNext = it, itend(actionSet->end()) ; it != itend ; it=itNext) { ++itNext; - action = dynamic_cast(&*it); + action = static_cast(&*it); deltap = delta; if (action->m_latency > 0) { if (action->m_latency > deltap) { @@ -123,7 +123,7 @@ void WorkstationL07Model::updateActionsState(double /*now*/, double delta) i++))) { constraint_id = lmm_constraint_id(cnst); - if (static_cast(constraint_id)->getState() == SURF_RESOURCE_OFF) { + if (static_cast(constraint_id)->getState() == SURF_RESOURCE_OFF) { XBT_DEBUG("Action (%p) Failed!!", action); action->finish(); action->setState(SURF_ACTION_FAILED); @@ -142,7 +142,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, *communication_amount, double rate) { - WorkstationL07ActionLmmPtr action; + WorkstationL07ActionPtr action; int i, j; unsigned int cpt; int nb_link = 0; @@ -165,18 +165,14 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, void *_link; LinkL07Ptr link; - routing_platf->getRouteAndLatency(dynamic_cast( - static_cast( - workstation_list[i]))->p_netElm, - dynamic_cast( - static_cast( - workstation_list[j]))->p_netElm, + routing_platf->getRouteAndLatency(static_cast(workstation_list[i])->p_netElm, + static_cast(workstation_list[j])->p_netElm, &route, &lat); latency = MAX(latency, lat); xbt_dynar_foreach(route, cpt, _link) { - link = dynamic_cast(static_cast(_link)); + link = static_cast(_link); xbt_dict_set(ptask_parallel_task_link_set, link->getName(), link, NULL); } } @@ -190,7 +186,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, if (computation_amount[i] > 0) nb_host++; - action = new WorkstationL07ActionLmm(this, 1, 0); + action = new WorkstationL07Action(this, 1, 0); XBT_DEBUG("Creating a parallel task (%p) with %d cpus and %d links.", action, workstation_nb, nb_link); action->m_suspended = 0; /* Should be useless because of the @@ -211,8 +207,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, for (i = 0; i < workstation_nb; i++) lmm_expand(ptask_maxmin_system, - static_cast(dynamic_cast( - static_cast(workstation_list[i]))->p_cpu)->constraint(), + static_cast(static_cast(workstation_list[i])->p_cpu)->getConstraint(), action->getVariable(), computation_amount[i]); for (i = 0; i < workstation_nb; i++) { @@ -224,15 +219,13 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, if (communication_amount[i * workstation_nb + j] == 0.0) continue; - routing_platf->getRouteAndLatency(dynamic_cast( - static_cast(workstation_list[i]))->p_netElm, - dynamic_cast( - static_cast(workstation_list[j]))->p_netElm, + routing_platf->getRouteAndLatency(static_cast(workstation_list[i])->p_netElm, + static_cast(workstation_list[j])->p_netElm, &route, NULL); xbt_dynar_foreach(route, cpt, _link) { - link = dynamic_cast(static_cast(_link)); - lmm_expand_add(ptask_maxmin_system, link->constraint(), + link = static_cast(_link); + lmm_expand_add(ptask_maxmin_system, link->getConstraint(), action->getVariable(), communication_amount[i * workstation_nb + j]); } @@ -261,7 +254,7 @@ ResourcePtr WorkstationL07Model::createResource(const char *name, double /*power wk = new WorkstationL07(this, name, NULL, static_cast(xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL)), - dynamic_cast(static_cast(xbt_lib_get_or_null(host_lib, name, SURF_CPU_LEVEL)))); + static_cast(xbt_lib_get_or_null(host_lib, name, SURF_CPU_LEVEL))); xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, static_cast(wk)); @@ -349,10 +342,7 @@ void WorkstationL07Model::addTraces() /* Connect traces relative to cpu */ xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - CpuL07Ptr host = dynamic_cast( - static_cast( - surf_cpu_resource_priv( - surf_cpu_resource_by_name(elm)))); + CpuL07Ptr host = static_cast(surf_cpu_resource_priv(surf_cpu_resource_by_name(elm))); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -362,10 +352,7 @@ void WorkstationL07Model::addTraces() xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - CpuL07Ptr host = dynamic_cast( - static_cast( - surf_cpu_resource_priv( - surf_cpu_resource_by_name(elm)))); + CpuL07Ptr host = static_cast(surf_cpu_resource_priv(surf_cpu_resource_by_name(elm))); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -376,7 +363,7 @@ void WorkstationL07Model::addTraces() /* Connect traces relative to network */ xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - LinkL07Ptr link = dynamic_cast(static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); + LinkL07Ptr link = static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -386,7 +373,7 @@ void WorkstationL07Model::addTraces() xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - LinkL07Ptr link = dynamic_cast(static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); + LinkL07Ptr link = static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -396,7 +383,7 @@ void WorkstationL07Model::addTraces() xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - LinkL07Ptr link = dynamic_cast(static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); + LinkL07Ptr link = static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -410,9 +397,7 @@ void WorkstationL07Model::addTraces() ************/ WorkstationL07::WorkstationL07(WorkstationModelPtr model, const char* name, xbt_dict_t props, RoutingEdgePtr netElm, CpuPtr cpu) - : Resource(model, name, props), - Workstation(NULL, netElm, cpu), - WorkstationLmm() + : Workstation(model, name, props, NULL, netElm, cpu) { } @@ -443,17 +428,20 @@ 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) - : Resource(model, name, props) - , CpuLmm(lmm_constraint_new(ptask_maxmin_system, this, power_initial * power_scale)) + : Cpu(model, name, props, lmm_constraint_new(ptask_maxmin_system, this, power_initial * power_scale), + 1, 0, 0) { p_power.scale = power_scale; xbt_assert(p_power.scale > 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, static_cast(this)); + p_power.event = tmgr_history_add_trace(history, power_trace, 0.0, 0, + static_cast(this)); + else + p_power.event = NULL; - m_stateCurrent = state_initial; + setState(state_initial); if (state_trace) p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, static_cast(this)); } @@ -466,43 +454,42 @@ LinkL07::LinkL07(NetworkL07ModelPtr model, const char* name, xbt_dict_t props, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace, e_surf_link_sharing_policy_t policy) - : Resource(model, name, props) - , NetworkLinkLmm(lmm_constraint_new(ptask_maxmin_system, this, bw_initial), history, state_trace) + : NetworkLink(model, name, props, lmm_constraint_new(ptask_maxmin_system, this, bw_initial), history, state_trace) { m_bwCurrent = bw_initial; if (bw_trace) p_bwEvent = tmgr_history_add_trace(history, bw_trace, 0.0, 0, static_cast(this)); - m_stateCurrent = state_initial; + setState(state_initial); m_latCurrent = lat_initial; if (lat_trace) p_latEvent = tmgr_history_add_trace(history, lat_trace, 0.0, 0, static_cast(this)); if (policy == SURF_LINK_FATPIPE) - lmm_constraint_shared(constraint()); + lmm_constraint_shared(getConstraint()); } bool CpuL07::isUsed(){ - return lmm_constraint_used(ptask_maxmin_system, constraint()); + return lmm_constraint_used(ptask_maxmin_system, getConstraint()); } bool LinkL07::isUsed(){ - return lmm_constraint_used(ptask_maxmin_system, constraint()); + return lmm_constraint_used(ptask_maxmin_system, getConstraint()); } 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, constraint(), m_powerCurrent * p_power.scale); + lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_powerCurrent * p_power.scale); if (tmgr_trace_event_free(event_type)) p_power.event = NULL; } else if (event_type == p_stateEvent) { if (value > 0) - m_stateCurrent = SURF_RESOURCE_ON; + setState(SURF_RESOURCE_ON); else - m_stateCurrent = SURF_RESOURCE_OFF; + setState(SURF_RESOURCE_OFF); if (tmgr_trace_event_free(event_type)) p_stateEvent = NULL; } else { @@ -516,26 +503,26 @@ void LinkL07::updateState(tmgr_trace_event_t event_type, double value, double da 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, constraint(), m_bwCurrent); + lmm_update_constraint_bound(ptask_maxmin_system, getConstraint(), m_bwCurrent); if (tmgr_trace_event_free(event_type)) p_bwEvent = NULL; } else if (event_type == p_latEvent) { lmm_variable_t var = NULL; - WorkstationL07ActionLmmPtr action; + WorkstationL07ActionPtr action; lmm_element_t elem = NULL; m_latCurrent = value; - while ((var = lmm_get_var_from_cnst(ptask_maxmin_system, constraint(), &elem))) { - action = (WorkstationL07ActionLmmPtr) lmm_variable_id(var); + while ((var = lmm_get_var_from_cnst(ptask_maxmin_system, getConstraint(), &elem))) { + action = (WorkstationL07ActionPtr) lmm_variable_id(var); action->updateBound(); } if (tmgr_trace_event_free(event_type)) p_latEvent = NULL; } else if (event_type == p_stateEvent) { if (value > 0) - m_stateCurrent = SURF_RESOURCE_ON; + setState(SURF_RESOURCE_ON); else - m_stateCurrent = SURF_RESOURCE_OFF; + setState(SURF_RESOURCE_OFF); if (tmgr_trace_event_free(event_type)) p_stateEvent = NULL; } else { @@ -550,11 +537,6 @@ e_surf_resource_state_t WorkstationL07::getState() return p_cpu->getState(); } -e_surf_resource_state_t CpuL07::getState() -{ - return m_stateCurrent; -} - double CpuL07::getSpeed(double load) { return load * p_power.scale; @@ -582,11 +564,11 @@ ActionPtr WorkstationL07::execute(double size) ActionPtr WorkstationL07::sleep(double duration) { - WorkstationL07ActionLmmPtr action = NULL; + WorkstationL07ActionPtr action = NULL; XBT_IN("(%s,%g)", getName(), duration); - action = dynamic_cast(execute(1.0)); + action = static_cast(execute(1.0)); action->m_maxDuration = duration; action->m_suspended = 2; lmm_update_variable_weight(ptask_maxmin_system, action->getVariable(), 0.0); @@ -607,20 +589,20 @@ double LinkL07::getLatency() bool LinkL07::isShared() { - return lmm_constraint_is_shared(constraint()); + return lmm_constraint_is_shared(getConstraint()); } /********** * Action * **********/ -WorkstationL07ActionLmm::~WorkstationL07ActionLmm(){ +WorkstationL07Action::~WorkstationL07Action(){ free(p_workstationList); free(p_communicationAmount); free(p_computationAmount); } -void WorkstationL07ActionLmm::updateBound() +void WorkstationL07Action::updateBound() { double lat_current = 0.0; double lat_bound = -1.0; @@ -632,10 +614,8 @@ void WorkstationL07ActionLmm::updateBound() if (p_communicationAmount[i * m_workstationNb + j] > 0) { double lat = 0.0; - routing_platf->getRouteAndLatency(dynamic_cast( - static_cast(((void**)p_workstationList)[i]))->p_netElm, - dynamic_cast( - static_cast(((void**)p_workstationList)[j]))->p_netElm, + routing_platf->getRouteAndLatency(static_cast(((void**)p_workstationList)[i])->p_netElm, + static_cast(((void**)p_workstationList)[j])->p_netElm, &route, &lat); lat_current = MAX(lat_current, lat * p_communicationAmount[i * m_workstationNb + j]); @@ -652,7 +632,7 @@ void WorkstationL07ActionLmm::updateBound() } } -int WorkstationL07ActionLmm::unref() +int WorkstationL07Action::unref() { m_refcount--; if (!m_refcount) { @@ -666,13 +646,13 @@ int WorkstationL07ActionLmm::unref() return 0; } -void WorkstationL07ActionLmm::cancel() +void WorkstationL07Action::cancel() { setState(SURF_ACTION_FAILED); return; } -void WorkstationL07ActionLmm::suspend() +void WorkstationL07Action::suspend() { XBT_IN("(%p))", this); if (m_suspended != 2) { @@ -682,7 +662,7 @@ void WorkstationL07ActionLmm::suspend() XBT_OUT(); } -void WorkstationL07ActionLmm::resume() +void WorkstationL07Action::resume() { XBT_IN("(%p)", this); if (m_suspended != 2) { @@ -692,26 +672,26 @@ void WorkstationL07ActionLmm::resume() XBT_OUT(); } -bool WorkstationL07ActionLmm::isSuspended() +bool WorkstationL07Action::isSuspended() { return m_suspended == 1; } -void WorkstationL07ActionLmm::setMaxDuration(double duration) +void WorkstationL07Action::setMaxDuration(double duration) { /* FIXME: should inherit */ XBT_IN("(%p,%g)", this, duration); m_maxDuration = duration; XBT_OUT(); } -void WorkstationL07ActionLmm::setPriority(double priority) +void WorkstationL07Action::setPriority(double priority) { /* FIXME: should inherit */ XBT_IN("(%p,%g)", this, priority); m_priority = priority; XBT_OUT(); } -double WorkstationL07ActionLmm::getRemains() +double WorkstationL07Action::getRemains() { XBT_IN("(%p)", this); XBT_OUT();