X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b4b40408881fd9dfc49a7802d4a83689c506b36b..10c02c776839657b86a6f1bdbb9817a8268bc397:/src/surf/cpu_interface.cpp diff --git a/src/surf/cpu_interface.cpp b/src/surf/cpu_interface.cpp index a935630d10..5b31783685 100644 --- a/src/surf/cpu_interface.cpp +++ b/src/surf/cpu_interface.cpp @@ -21,14 +21,6 @@ simgrid::surf::CpuModel *surf_cpu_model_vm; namespace simgrid { namespace surf { -simgrid::xbt::Extension Cpu::EXTENSION_ID; - -void Cpu::classInit() -{ - if (!EXTENSION_ID.valid()) - EXTENSION_ID = simgrid::Host::extension_create(); -} - /************* * Callbacks * *************/ @@ -39,11 +31,7 @@ Cpu *getActionCpu(CpuAction *action) { action->getVariable(), 0))); } -simgrid::surf::signal cpuActionStateChangedCallbacks; - -void cpu_add_traces(){ - surf_cpu_model_pm->addTraces(); -} +simgrid::xbt::signal cpuActionStateChangedCallbacks; /********* * Model * @@ -139,45 +127,26 @@ void CpuModel::updateActionsStateFull(double now, double delta) /************ * Resource * ************/ -Cpu::Cpu() -{ -} - - -Cpu::Cpu(Model *model, simgrid::Host *host, +Cpu::Cpu(Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeakList, int pstate, int core, double speedPeak, double speedScale, - e_surf_resource_state_t stateInitial) - : Resource(model, host->getName().c_str(), stateInitial) - , m_core(core) - , m_speedPeak(speedPeak) - , m_speedScale(speedScale) - , m_host(host) + int initiallyOn) + : Cpu(model, host, NULL/*constraint*/, speedPeakList, pstate, core, speedPeak, speedScale, initiallyOn) { - host->extension_set(Cpu::EXTENSION_ID, this); - - // Copy the power peak array: - p_speedPeakList = xbt_dynar_new(sizeof(double), nullptr); - unsigned long n = xbt_dynar_length(speedPeakList); - for (unsigned long i = 0; i != n; ++i) { - double value = xbt_dynar_get_as(speedPeakList, i, double); - xbt_dynar_push(p_speedPeakList, &value); - } - - m_pstate = pstate; } -Cpu::Cpu(Model *model, simgrid::Host *host, lmm_constraint_t constraint, +Cpu::Cpu(Model *model, simgrid::s4u::Host *host, lmm_constraint_t constraint, xbt_dynar_t speedPeakList, int pstate, int core, double speedPeak, - double speedScale, e_surf_resource_state_t stateInitial) - : Resource(model, host->getName().c_str(), constraint, stateInitial) + double speedScale, int initiallyOn) + : Resource(model, host->name().c_str(), constraint, initiallyOn) , m_core(core) , m_speedPeak(speedPeak) , m_speedScale(speedScale) , m_host(host) { - host->extension_set(Cpu::EXTENSION_ID, this); + host->pimpl_cpu = this; + xbt_assert(m_speedScale > 0, "Available speed has to be >0"); // Copy the power peak array: p_speedPeakList = xbt_dynar_new(sizeof(double), nullptr); @@ -200,26 +169,12 @@ Cpu::Cpu(Model *model, simgrid::Host *host, lmm_constraint_t constraint, int i; for (i = 0; i < core; i++) { /* just for a unique id, never used as a string. */ - p_constraintCoreId[i] = bprintf("%s:%i", host->getName().c_str(), i); + p_constraintCoreId[i] = bprintf("%s:%i", host->name().c_str(), i); p_constraintCore[i] = lmm_constraint_new(model->getMaxminSystem(), p_constraintCoreId[i], m_speedScale * m_speedPeak); } } } -Cpu::Cpu(Model *model, simgrid::Host *host, lmm_constraint_t constraint, - xbt_dynar_t speedPeakList, int pstate, - int core, double speedPeak, double speedScale) -: Cpu(model, host, constraint, speedPeakList, pstate, core, speedPeak, speedScale, SURF_RESOURCE_ON) -{ - xbt_assert(0,"FIXME: this constructor could be removed"); -} - -Cpu::Cpu(Model *model, simgrid::Host *host, - xbt_dynar_t speedPeakList, int pstate, - int core, double speedPeak, double speedScale) -: Cpu(model, host, speedPeakList, pstate, core, speedPeak, speedScale, SURF_RESOURCE_ON) -{} - Cpu::~Cpu() { if (p_constraintCoreId){ @@ -251,6 +206,8 @@ void Cpu::setPState(int pstate_index) double new_peak_speed = xbt_dynar_get_as(plist, pstate_index, double); m_pstate = pstate_index; m_speedPeak = new_peak_speed; + + onSpeedChange(); } int Cpu::getPState() @@ -277,6 +234,12 @@ double Cpu::getAvailableSpeed() return m_speedScale; } +void Cpu::onSpeedChange() { + TRACE_surf_host_set_speed(surf_get_clock(), getName(), + m_core * m_speedScale * m_speedPeak); +} + + int Cpu::getCore() { return m_core; @@ -382,12 +345,12 @@ void CpuAction::setAffinity(Cpu *cpu, unsigned long mask) XBT_OUT(); } -simgrid::surf::signal CpuAction::onStateChange; +simgrid::xbt::signal CpuAction::onStateChange; void CpuAction::setState(e_surf_action_state_t state){ - e_surf_action_state_t old = getState(); + e_surf_action_state_t previous = getState(); Action::setState(state); - onStateChange(this, old, state); + onStateChange(this, previous); } }