X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/124d5ababfd69a4dd07e63211e1683762e04f7a0..3082f058f27fdbc39b5daebf6a720ab2272d6585:/src/surf/ptask_L07.cpp diff --git a/src/surf/ptask_L07.cpp b/src/surf/ptask_L07.cpp index b414a95750..9a7179fee8 100644 --- a/src/surf/ptask_L07.cpp +++ b/src/surf/ptask_L07.cpp @@ -20,22 +20,12 @@ XBT_LOG_EXTERNAL_CATEGORY(xbt_cfg); /**************************************/ /*** Resource Creation & Destruction **/ /**************************************/ - -static void ptask_netlink_parse_init(sg_platf_link_cbarg_t link) -{ - netlink_parse_init(link); - current_property_set = NULL; -} - void surf_host_model_init_ptask_L07(void) { XBT_CINFO(xbt_cfg,"Switching to the L07 model to handle parallel tasks."); xbt_assert(!surf_cpu_model_pm, "CPU model type already defined"); xbt_assert(!surf_network_model, "network model type already defined"); - // Define the callbacks to parse the XML - simgrid::surf::on_link.connect(ptask_netlink_parse_init); - surf_host_model = new simgrid::surf::HostL07Model(); xbt_dynar_push(all_existing_models, &surf_host_model); } @@ -45,15 +35,11 @@ namespace simgrid { namespace surf { HostL07Model::HostL07Model() : HostModel() { - p_maxminSystem = lmm_system_new(1); - surf_network_model = new NetworkL07Model(this,p_maxminSystem); - surf_cpu_model_pm = new CpuL07Model(this,p_maxminSystem); - - routing_model_create(surf_network_model->createLink("__loopback__", - 498000000, NULL, - 0.000015, NULL, - NULL, - SURF_LINK_FATPIPE, NULL)); + maxminSystem_ = lmm_system_new(1); + surf_network_model = new NetworkL07Model(this,maxminSystem_); + surf_cpu_model_pm = new CpuL07Model(this,maxminSystem_); + + routing_model_create(surf_network_model->createLink("__loopback__", 498000000, 0.000015, SURF_LINK_FATPIPE, NULL)); } HostL07Model::~HostL07Model() { @@ -65,23 +51,23 @@ CpuL07Model::CpuL07Model(HostL07Model *hmodel,lmm_system_t sys) : CpuModel() , p_hostModel(hmodel) { - p_maxminSystem = sys; + maxminSystem_ = sys; } CpuL07Model::~CpuL07Model() { surf_cpu_model_pm = NULL; - lmm_system_free(p_maxminSystem); - p_maxminSystem = NULL; + lmm_system_free(maxminSystem_); + maxminSystem_ = NULL; } NetworkL07Model::NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys) : NetworkModel() , p_hostModel(hmodel) { - p_maxminSystem = sys; + maxminSystem_ = sys; } NetworkL07Model::~NetworkL07Model() { surf_network_model = NULL; - p_maxminSystem = NULL; // Avoid multi-free + maxminSystem_ = NULL; // Avoid multi-free } @@ -91,7 +77,7 @@ double HostL07Model::next_occuring_event(double /*now*/) ActionList *running_actions = getRunningActionSet(); double min = this->shareResourcesMaxMin(running_actions, - p_maxminSystem, + maxminSystem_, bottleneck_solve); for(ActionList::iterator it(running_actions->begin()), itend(running_actions->end()) @@ -133,7 +119,7 @@ void HostL07Model::updateActionsState(double /*now*/, double delta) { } if ((action->m_latency == 0.0) && (action->isSuspended() == 0)) { action->updateBound(); - lmm_update_variable_weight(p_maxminSystem, action->getVariable(), 1.0); + lmm_update_variable_weight(maxminSystem_, action->getVariable(), 1.0); } } XBT_DEBUG("Action (%p) : remains (%g) updated by %g.", @@ -154,23 +140,22 @@ void HostL07Model::updateActionsState(double /*now*/, double delta) { if ((action->getRemains() <= 0) && (lmm_get_variable_weight(action->getVariable()) > 0)) { action->finish(); - action->setState(SURF_ACTION_DONE); + action->setState(Action::State::done); } else if ((action->getMaxDuration() != NO_MAX_DURATION) && (action->getMaxDuration() <= 0)) { action->finish(); - action->setState(SURF_ACTION_DONE); + action->setState(Action::State::done); } else { /* Need to check that none of the model has failed */ lmm_constraint_t cnst = NULL; int i = 0; - while ((cnst = lmm_get_cnst_from_var(p_maxminSystem, action->getVariable(), i++))) { + while ((cnst = lmm_get_cnst_from_var(maxminSystem_, action->getVariable(), i++))) { void *constraint_id = lmm_constraint_id(cnst); - - if (static_cast(constraint_id)->isOff()) { + if (static_cast(constraint_id)->isOff()) { XBT_DEBUG("Action (%p) Failed!!", action); action->finish(); - action->setState(SURF_ACTION_FAILED); + action->setState(Action::State::failed); break; } } @@ -186,14 +171,10 @@ Action *HostL07Model::executeParallelTask(int host_nb, sg_host_t *host_list, } -L07Action::L07Action(Model *model, int host_nb, - sg_host_t*host_list, - double *flops_amount, - double *bytes_amount, - double rate) +L07Action::L07Action(Model *model, int host_nb, sg_host_t*host_list, + double *flops_amount, double *bytes_amount, double rate) : CpuAction(model, 1, 0) { - unsigned int cpt; int nb_link = 0; int nb_used_host = 0; /* Only the hosts with something to compute (>0 flops) are counted) */ double latency = 0.0; @@ -211,16 +192,14 @@ L07Action::L07Action(Model *model, int host_nb, if (bytes_amount[i * host_nb + j] > 0) { double lat=0.0; - xbt_dynar_t route=NULL; + std::vector *route = new std::vector(); - routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], &route, &lat); + routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], route, &lat); latency = MAX(latency, lat); - void *_link; - xbt_dynar_foreach(route, cpt, _link) { - LinkL07 *link = static_cast(_link); + for (auto link : *route) xbt_dict_set(ptask_parallel_task_link_set, link->getName(), link, NULL); - } + delete route; } } } @@ -239,7 +218,7 @@ L07Action::L07Action(Model *model, int host_nb, this->m_latency = latency; this->m_rate = rate; - this->p_variable = lmm_variable_new(model->getMaxminSystem(), this, 1.0, + this->variable_ = lmm_variable_new(model->getMaxminSystem(), this, 1.0, (rate > 0 ? rate : -1.0), host_nb + nb_link); @@ -254,19 +233,16 @@ L07Action::L07Action(Model *model, int host_nb, for (int i = 0; i < host_nb; i++) { for (int j = 0; j < host_nb; j++) { - xbt_dynar_t route=NULL; if (bytes_amount[i * host_nb + j] == 0.0) continue; + std::vector *route = new std::vector(); - routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], - &route, NULL); + routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], route, NULL); - void *_link; - xbt_dynar_foreach(route, cpt, _link) { - LinkL07 *link = static_cast(_link); - lmm_expand_add(model->getMaxminSystem(), link->getConstraint(), - this->getVariable(), bytes_amount[i * host_nb + j]); - } + for (auto link : *route) + lmm_expand_add(model->getMaxminSystem(), link->getConstraint(), this->getVariable(), bytes_amount[i * host_nb + j]); + + delete route; } } } @@ -278,91 +254,55 @@ L07Action::L07Action(Model *model, int host_nb, xbt_free(host_list); } -Action *NetworkL07Model::communicate(NetCard *src, NetCard *dst, - double size, double rate) +Action *NetworkL07Model::communicate(NetCard *src, NetCard *dst, double size, double rate) { sg_host_t*host_list = xbt_new0(sg_host_t, 2); double *flops_amount = xbt_new0(double, 2); double *bytes_amount = xbt_new0(double, 4); - Action *res = NULL; host_list[0] = sg_host_by_name(src->name()); host_list[1] = sg_host_by_name(dst->name()); bytes_amount[1] = size; - res = p_hostModel->executeParallelTask(2, host_list, flops_amount, bytes_amount, rate); - - return res; + return p_hostModel->executeParallelTask(2, host_list, flops_amount, bytes_amount, rate); } -Cpu *CpuL07Model::createCpu(simgrid::s4u::Host *host, xbt_dynar_t powerPeakList, - tmgr_trace_t power_trace, int core, tmgr_trace_t state_trace) +Cpu *CpuL07Model::createCpu(simgrid::s4u::Host *host, xbt_dynar_t speedPerPstate, int core) { - CpuL07 *cpu = new CpuL07(this, host, powerPeakList, power_trace, core, state_trace); - return cpu; + return new CpuL07(this, host, speedPerPstate, core); } -Link* NetworkL07Model::createLink(const char *name, - double bw_initial, - tmgr_trace_t bw_trace, - double lat_initial, - tmgr_trace_t lat_trace, - tmgr_trace_t state_trace, - e_surf_link_sharing_policy_t policy, - xbt_dict_t properties) +Link* NetworkL07Model::createLink(const char *name, double bandwidth, double latency, + e_surf_link_sharing_policy_t policy, xbt_dict_t properties) { - xbt_assert(!Link::byName(name), - "Link '%s' declared several times in the platform file.", name); - - Link* link = new LinkL07(this, name, properties, - bw_initial, bw_trace, - lat_initial, lat_trace, - state_trace, - policy); - Link::onCreation(link); - return link; + return new LinkL07(this, name, properties, bandwidth, latency, policy); } /************ * Resource * ************/ -CpuL07::CpuL07(CpuL07Model *model, simgrid::s4u::Host *host, - xbt_dynar_t speedPeakList, - tmgr_trace_t speedTrace, - int core, tmgr_trace_t state_trace) - : Cpu(model, host, speedPeakList, core, xbt_dynar_get_as(speedPeakList,0,double)) +CpuL07::CpuL07(CpuL07Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPerPstate, int core) + : Cpu(model, host, speedPerPstate, core) { - p_constraint = lmm_constraint_new(model->getMaxminSystem(), this, xbt_dynar_get_as(speedPeakList,0,double)); - - if (speedTrace) - p_speed.event = future_evt_set->add_trace(speedTrace, 0.0, this); - - if (state_trace) - p_stateEvent = future_evt_set->add_trace(state_trace, 0.0, this); + constraint_ = lmm_constraint_new(model->getMaxminSystem(), this, xbt_dynar_get_as(speedPerPstate,0,double)); } CpuL07::~CpuL07() { } -LinkL07::LinkL07(NetworkL07Model *model, const char* name, xbt_dict_t props, - double bw_initial, tmgr_trace_t bw_trace, - double lat_initial, tmgr_trace_t lat_trace, - tmgr_trace_t state_trace, +LinkL07::LinkL07(NetworkL07Model *model, const char* name, xbt_dict_t props, double bandwidth, double latency, e_surf_link_sharing_policy_t policy) - : Link(model, name, props, lmm_constraint_new(model->getMaxminSystem(), this, bw_initial), state_trace) + : Link(model, name, props, lmm_constraint_new(model->getMaxminSystem(), this, bandwidth)) { - m_bandwidth.peak = bw_initial; - if (bw_trace) - m_bandwidth.event = future_evt_set->add_trace(bw_trace, 0.0, this); - - m_latency.peak = lat_initial; - if (lat_trace) - m_latency.event = future_evt_set->add_trace(lat_trace, 0.0, this); + m_bandwidth.peak = bandwidth; + m_latency.peak = latency; if (policy == SURF_LINK_FATPIPE) lmm_constraint_shared(getConstraint()); + + Link::onCreation(this); } Action *CpuL07::execution_start(double size) @@ -380,8 +320,8 @@ Action *CpuL07::execution_start(double size) Action *CpuL07::sleep(double duration) { L07Action *action = static_cast(execution_start(1.0)); - action->m_maxDuration = duration; - action->m_suspended = 2; + action->maxDuration_ = duration; + action->suspended_ = 2; lmm_update_variable_weight(getModel()->getMaxminSystem(), action->getVariable(), 0.0); return action; @@ -396,14 +336,14 @@ void CpuL07::onSpeedChange() { lmm_variable_t var = NULL; lmm_element_t elem = NULL; - lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), p_speed.peak * p_speed.scale); + lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), speed_.peak * speed_.scale); 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(), - p_speed.scale * p_speed.peak); + speed_.scale * speed_.peak); } Cpu::onSpeedChange(); @@ -416,17 +356,17 @@ bool LinkL07::isUsed(){ void CpuL07::apply_event(tmgr_trace_iterator_t triggered, double value){ XBT_DEBUG("Updating cpu %s (%p) with value %g", getName(), this, value); - if (triggered == p_speed.event) { - p_speed.scale = value; + if (triggered == speed_.event) { + speed_.scale = value; onSpeedChange(); - tmgr_trace_event_unref(&p_speed.event); + tmgr_trace_event_unref(&speed_.event); - } else if (triggered == p_stateEvent) { + } else if (triggered == stateEvent_) { if (value > 0) turnOn(); else turnOff(); - tmgr_trace_event_unref(&p_stateEvent); + tmgr_trace_event_unref(&stateEvent_); } else { xbt_die("Unknown event!\n"); @@ -495,21 +435,21 @@ void L07Action::updateBound() if (p_communicationAmount != NULL) { for (i = 0; i < hostNb; i++) { for (j = 0; j < hostNb; j++) { - xbt_dynar_t route=NULL; if (p_communicationAmount[i * hostNb + j] > 0) { double lat = 0.0; - routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], - &route, &lat); + std::vector *route = new std::vector(); + routing_platf->getRouteAndLatency((*p_netcardList)[i], (*p_netcardList)[j], route, &lat); lat_current = MAX(lat_current, lat * p_communicationAmount[i * hostNb + j]); + delete route; } } } } lat_bound = sg_tcp_gamma / (2.0 * lat_current); XBT_DEBUG("action (%p) : lat_bound = %g", this, lat_bound); - if ((m_latency == 0.0) && (m_suspended == 0)) { + if ((m_latency == 0.0) && (suspended_ == 0)) { if (m_rate < 0) lmm_update_variable_bound(getModel()->getMaxminSystem(), getVariable(), lat_bound); else @@ -520,10 +460,10 @@ void L07Action::updateBound() int L07Action::unref() { - m_refcount--; - if (!m_refcount) { + refcount_--; + if (!refcount_) { if (action_hook.is_linked()) - p_stateSet->erase(p_stateSet->iterator_to(*this)); + stateSet_->erase(stateSet_->iterator_to(*this)); if (getVariable()) lmm_variable_free(getModel()->getMaxminSystem(), getVariable()); delete this;