diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2016-04-06 19:43:31 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2016-04-06 19:43:31 +0100 |
commit | be28d96510e0e722db83b26f1a12d3f5de979b32 (patch) | |
tree | 6a7e1807397f002f51fddb34568b89250fca45c8 /src/sim/power | |
parent | 8615b27174ae06db4665016c877b1e88031af203 (diff) | |
download | gem5-be28d96510e0e722db83b26f1a12d3f5de979b32.tar.xz |
Revert power patch sets with unexpected interactions
The following patches had unexpected interactions with the current
upstream code and have been reverted for now:
e07fd01651f3: power: Add support for power models
831c7f2f9e39: power: Low-power idle power state for idle CPUs
4f749e00b667: power: Add power states to ClockedObject
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
--HG--
extra : amend_source : 0b6fb073c6bbc24be533ec431eb51fbf1b269508
Diffstat (limited to 'src/sim/power')
-rw-r--r-- | src/sim/power/MathExprPowerModel.py | 52 | ||||
-rw-r--r-- | src/sim/power/PowerModel.py | 61 | ||||
-rw-r--r-- | src/sim/power/PowerModelState.py | 55 | ||||
-rw-r--r-- | src/sim/power/SConscript | 5 | ||||
-rw-r--r-- | src/sim/power/mathexpr_powermodel.cc | 102 | ||||
-rw-r--r-- | src/sim/power/mathexpr_powermodel.hh | 111 | ||||
-rw-r--r-- | src/sim/power/power_model.cc | 138 | ||||
-rw-r--r-- | src/sim/power/power_model.hh | 188 | ||||
-rw-r--r-- | src/sim/power/thermal_domain.cc | 3 |
9 files changed, 1 insertions, 714 deletions
diff --git a/src/sim/power/MathExprPowerModel.py b/src/sim/power/MathExprPowerModel.py deleted file mode 100644 index 061f7e767..000000000 --- a/src/sim/power/MathExprPowerModel.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (c) 2015 ARM Limited -# All rights reserved. -# -# The license below extends only to copyright in the software and shall -# not be construed as granting a license to any other intellectual -# property including but not limited to intellectual property relating -# to a hardware implementation of the functionality of the software -# licensed hereunder. You may use the software subject to the license -# terms below provided that you ensure that this notice is replicated -# unmodified and in its entirety in all distributions of the software, -# modified or unmodified, in source code or in binary form. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer; -# redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution; -# neither the name of the copyright holders nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Authors: David Guillen Fandos - -from m5.SimObject import SimObject -from m5.params import * -from PowerModelState import PowerModelState - -# Represents a power model for a simobj -class MathExprPowerModel(PowerModelState): - type = 'MathExprPowerModel' - cxx_header = "sim/power/mathexpr_powermodel.hh" - - # Equations for dynamic and static power - # Equations may use gem5 stats ie. "1.1*ipc + 2.3*l2_cache.overall_misses" - # It is possible to use automatic variables such as "temp" - # You may also use stat names (relative path to the simobject) - dyn = Param.String("", "Expression for the dynamic power") - st = Param.String("", "Expression for the static power") diff --git a/src/sim/power/PowerModel.py b/src/sim/power/PowerModel.py deleted file mode 100644 index 4e6d496c4..000000000 --- a/src/sim/power/PowerModel.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright (c) 2015 ARM Limited -# All rights reserved. -# -# The license below extends only to copyright in the software and shall -# not be construed as granting a license to any other intellectual -# property including but not limited to intellectual property relating -# to a hardware implementation of the functionality of the software -# licensed hereunder. You may use the software subject to the license -# terms below provided that you ensure that this notice is replicated -# unmodified and in its entirety in all distributions of the software, -# modified or unmodified, in source code or in binary form. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer; -# redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution; -# neither the name of the copyright holders nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Authors: David Guillen Fandos - -from m5.SimObject import SimObject -from m5.params import * -from m5.proxy import Parent - -# Represents a power model for a simobj -# The model itself is also a SimObject so we can make use some -# nice features available such as Parent.any -class PowerModel(SimObject): - type = 'PowerModel' - cxx_header = "sim/power/power_model.hh" - - @classmethod - def export_methods(cls, code): - code(''' - double getDynamicPower() const; - double getStaticPower() const; -''') - - # Keep a list of every model for every power state - pm = VectorParam.PowerModelState([], "List of per-state power models.") - - # Need a reference to the system so we can query the thermal domain - # about temperature (temperature is needed for leakage calculation) - subsystem = Param.SubSystem(Parent.any, "subsystem") diff --git a/src/sim/power/PowerModelState.py b/src/sim/power/PowerModelState.py deleted file mode 100644 index 10b3141d0..000000000 --- a/src/sim/power/PowerModelState.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (c) 2015 ARM Limited -# All rights reserved. -# -# The license below extends only to copyright in the software and shall -# not be construed as granting a license to any other intellectual -# property including but not limited to intellectual property relating -# to a hardware implementation of the functionality of the software -# licensed hereunder. You may use the software subject to the license -# terms below provided that you ensure that this notice is replicated -# unmodified and in its entirety in all distributions of the software, -# modified or unmodified, in source code or in binary form. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer; -# redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution; -# neither the name of the copyright holders nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Authors: David Guillen Fandos - -from m5.SimObject import SimObject -from m5.params import * - -# Represents a power model for a simobj -class PowerModelState(SimObject): - type = 'PowerModelState' - cxx_header = "sim/power/power_model.hh" - abstract = True - cxx_class = 'PowerModelState' - - @classmethod - def export_methods(cls, code): - code(''' - double getDynamicPower() const; - double getStaticPower() const; -''') - - diff --git a/src/sim/power/SConscript b/src/sim/power/SConscript index 2f0eb4fc1..8ec65519c 100644 --- a/src/sim/power/SConscript +++ b/src/sim/power/SConscript @@ -30,14 +30,9 @@ Import('*') -SimObject('MathExprPowerModel.py') -SimObject('PowerModel.py') -SimObject('PowerModelState.py') SimObject('ThermalDomain.py') SimObject('ThermalModel.py') -Source('power_model.cc') -Source('mathexpr_powermodel.cc') Source('thermal_domain.cc') Source('thermal_model.cc') diff --git a/src/sim/power/mathexpr_powermodel.cc b/src/sim/power/mathexpr_powermodel.cc deleted file mode 100644 index 000bcf22d..000000000 --- a/src/sim/power/mathexpr_powermodel.cc +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: David Guillen Fandos - */ - -#include "sim/power/mathexpr_powermodel.hh" - -#include "base/statistics.hh" -#include "params/MathExprPowerModel.hh" -#include "sim/mathexpr.hh" -#include "sim/power/thermal_model.hh" -#include "sim/sim_object.hh" - -MathExprPowerModel::MathExprPowerModel(const Params *p) - : PowerModelState(p), dyn_expr(p->dyn), st_expr(p->st) -{ - // Calculate the name of the object we belong to - std::vector<std::string> path; - tokenize(path, name(), '.', true); - // It's something like xyz.power_model.pm2 - assert(path.size() > 2); - for (unsigned i = 0; i < path.size() - 2; i++) - basename += path[i] + "."; -} - -void -MathExprPowerModel::startup() -{ - // Create a map with stats and pointers for quick access - // Has to be done here, since we need access to the statsList - for (auto & i: Stats::statsList()) - if (i->name.find(basename) == 0) - stats_map[i->name.substr(basename.size())] = i; -} - -double -MathExprPowerModel::getStatValue(const std::string &name) const -{ - using namespace Stats; - - // Automatic variables: - if (name == "temp") - return _temp; - - // Try to cast the stat, only these are supported right now - Info *info = stats_map.at(name); - - ScalarInfo *si = dynamic_cast<ScalarInfo*>(info); - if (si) - return si->value(); - FormulaInfo *fi = dynamic_cast<FormulaInfo*>(info); - if (fi) - return fi->total(); - - panic("Unknown stat type!\n"); -} - -void -MathExprPowerModel::regStats() -{ - PowerModelState::regStats(); -} - -MathExprPowerModel* -MathExprPowerModelParams::create() -{ - return new MathExprPowerModel(this); -} diff --git a/src/sim/power/mathexpr_powermodel.hh b/src/sim/power/mathexpr_powermodel.hh deleted file mode 100644 index 43584fbd8..000000000 --- a/src/sim/power/mathexpr_powermodel.hh +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: David Guillen Fandos - */ - -#ifndef __SIM_MATHEXPR_POWERMODEL_PM_HH__ -#define __SIM_MATHEXPR_POWERMODEL_PM_HH__ - -#include <unordered_map> - -#include "base/statistics.hh" -#include "params/MathExprPowerModel.hh" -#include "sim/mathexpr.hh" -#include "sim/power/power_model.hh" -#include "sim/sim_object.hh" - -/** - * A Equation power model. The power is represented as a combination - * of some stats and automatic variables (like temperature). - */ -class MathExprPowerModel : public PowerModelState -{ - public: - - typedef MathExprPowerModelParams Params; - MathExprPowerModel(const Params *p); - - /** - * Get the dynamic power consumption. - * - * @return Power (Watts) consumed by this object (dynamic component) - */ - double getDynamicPower() const { - return dyn_expr.eval( - std::bind(&MathExprPowerModel::getStatValue, - this, std::placeholders::_1) - ); - } - - /** - * Get the static power consumption. - * - * @return Power (Watts) consumed by this object (static component) - */ - double getStaticPower() const { - return st_expr.eval( - std::bind(&MathExprPowerModel::getStatValue, - this, std::placeholders::_1) - ); - } - - /** - * Get the value for a variable (maps to a stat) - * - * @param name Name of the variable to retrieve the value from - * - * @return Power (Watts) consumed by this object (static component) - */ - double getStatValue(const std::string & name) const; - - void startup(); - - void regStats(); - - private: - - // Math expressions for dynamic and static power - MathExpr dyn_expr, st_expr; - - // Basename of the object in the gem5 stats hierachy - std::string basename; - - // Map that contains relevant stats for this power model - std::unordered_map<std::string, Stats::Info*> stats_map; -}; - -#endif diff --git a/src/sim/power/power_model.cc b/src/sim/power/power_model.cc deleted file mode 100644 index d01084b34..000000000 --- a/src/sim/power/power_model.cc +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: David Guillen Fandos - */ - -#include "sim/power/power_model.hh" - -#include "base/statistics.hh" -#include "params/PowerModel.hh" -#include "params/PowerModelState.hh" -#include "sim/sim_object.hh" -#include "sim/sub_system.hh" - -PowerModelState::PowerModelState(const Params *p) - : SimObject(p), _temp(0), clocked_object(NULL) -{ -} - -PowerModel::PowerModel(const Params *p) - : SimObject(p), states_pm(p->pm), subsystem(p->subsystem), - clocked_object(NULL) -{ - panic_if(subsystem == NULL, - "Subsystem is NULL! This is not acceptable for a PowerModel!\n"); - subsystem->registerPowerProducer(this); -} - -void -PowerModel::setClockedObject(ClockedObject * clkobj) -{ - this->clocked_object = clkobj; - - for (auto & pms: states_pm) - pms->setClockedObject(clkobj); -} - -void -PowerModel::thermalUpdateCallback(const double & temp) -{ - for (auto & pms: states_pm) - pms->setTemperature(temp); -} - -void -PowerModel::regProbePoints() -{ - thermalListener.reset(new ThermalProbeListener ( - *this, this->subsystem->getProbeManager(), "thermalUpdate" - )); -} - -PowerModel* -PowerModelParams::create() -{ - return new PowerModel(this); -} - -double -PowerModel::getDynamicPower() const -{ - assert(clocked_object); - - std::vector<double> w = clocked_object->pwrStateWeights(); - - // Same number of states (excluding UNDEFINED) - assert(w.size() - 1 == states_pm.size()); - - // Make sure we have no UNDEFINED state - warn_if(w[Enums::PwrState::UNDEFINED] > 0, - "SimObject in UNDEFINED power state! Power figures might be wrong!\n"); - - double power = 0; - for (unsigned i = 0; i < states_pm.size(); i++) - if (w[i + 1] > 0.0f) - power += states_pm[i]->getDynamicPower() * w[i + 1]; - - return power; -} - -double -PowerModel::getStaticPower() const -{ - assert(clocked_object); - - std::vector<double> w = clocked_object->pwrStateWeights(); - - // Same number of states (excluding UNDEFINED) - assert(w.size() - 1 == states_pm.size()); - - // Make sure we have no UNDEFINED state - if (w[0] > 0) - warn("SimObject in UNDEFINED power state! " - "Power figures might be wrong!\n"); - - // We have N+1 states, being state #0 the default 'UNDEFINED' state - double power = 0; - for (unsigned i = 0; i < states_pm.size(); i++) - // Don't evaluate power if the object hasn't been in that state - // This fixes issues with NaNs and similar. - if (w[i + 1] > 0.0f) - power += states_pm[i]->getStaticPower() * w[i + 1]; - - return power; -} diff --git a/src/sim/power/power_model.hh b/src/sim/power/power_model.hh deleted file mode 100644 index f907597b4..000000000 --- a/src/sim/power/power_model.hh +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited - * All rights reserved - * - * The license below extends only to copyright in the software and shall - * not be construed as granting a license to any other intellectual - * property including but not limited to intellectual property relating - * to a hardware implementation of the functionality of the software - * licensed hereunder. You may use the software subject to the license - * terms below provided that you ensure that this notice is replicated - * unmodified and in its entirety in all distributions of the software, - * modified or unmodified, in source code or in binary form. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: David Guillen Fandos - */ - -#ifndef __SIM_POWER_POWER_MODEL_HH__ -#define __SIM_POWER_POWER_MODEL_HH__ - -#include "base/statistics.hh" -#include "params/PowerModel.hh" -#include "params/PowerModelState.hh" -#include "sim/power/thermal_model.hh" -#include "sim/probe/probe.hh" -#include "sim/sim_object.hh" - -/** - * A PowerModelState is an abstract class used as interface to get power - * figures out of SimObjects - */ -class PowerModelState : public SimObject -{ - public: - - typedef PowerModelStateParams Params; - PowerModelState(const Params *p); - - /** - * Get the dynamic power consumption. - * - * @return Power (Watts) consumed by this object (dynamic component) - */ - virtual double getDynamicPower() const = 0; - - /** - * Get the static power consumption. - * - * @return Power (Watts) consumed by this object (static component) - */ - virtual double getStaticPower() const = 0; - - /** - * Temperature update. - * - * @param temp Current temperature of the HW part (Celsius) - */ - virtual void setTemperature(double temp) { _temp = temp; } - - void setClockedObject(ClockedObject * clkobj) { - clocked_object = clkobj; - } - - void regStats() { - dynamicPower - .method(this, &PowerModelState::getDynamicPower) - .name(params()->name + ".dynamic_power") - .desc("Dynamic power for this object (Watts)") - ; - - staticPower - .method(this, &PowerModelState::getStaticPower) - .name(params()->name + ".static_power") - .desc("Static power for this object (Watts)") - ; - } - - protected: - Stats::Value dynamicPower, staticPower; - - /** Current temperature */ - double _temp; - - /** The clocked object we belong to */ - ClockedObject * clocked_object; -}; - -/** - * A PowerModel is a class containing a power model for a SimObject. - * The PM describes the power consumption for every power state. - */ -class PowerModel : public SimObject -{ - public: - - typedef PowerModelParams Params; - PowerModel(const Params *p); - - /** - * Get the dynamic power consumption. - * - * @return Power (Watts) consumed by this object (dynamic component) - */ - double getDynamicPower() const; - - /** - * Get the static power consumption. - * - * @return Power (Watts) consumed by this object (static component) - */ - double getStaticPower() const; - - void regStats() { - dynamicPower - .method(this, &PowerModel::getDynamicPower) - .name(params()->name + ".dynamic_power") - .desc("Dynamic power for this power state") - ; - - staticPower - .method(this, &PowerModel::getStaticPower) - .name(params()->name + ".static_power") - .desc("Static power for this power state") - ; - } - - void setClockedObject(ClockedObject *clkobj); - - virtual void regProbePoints(); - - void thermalUpdateCallback(const double & temp); - - protected: - /** Listener class to catch thermal events */ - class ThermalProbeListener : public ProbeListenerArgBase<double> - { - public: - ThermalProbeListener(PowerModel &_pm, ProbeManager *pm, - const std::string &name) - : ProbeListenerArgBase(pm, name), pm(_pm) {} - - void notify(const double &temp) - { - pm.thermalUpdateCallback(temp); - } - - protected: - PowerModel ± - }; - - Stats::Value dynamicPower, staticPower; - - /** Actual power models (one per power state) */ - std::vector<PowerModelState*> states_pm; - - /** Listener to catch temperature changes in the SubSystem */ - std::unique_ptr<ThermalProbeListener> thermalListener; - - /** The subsystem this power model belongs to */ - SubSystem * subsystem; - - /** The clocked object we belong to */ - ClockedObject * clocked_object; -}; - -#endif diff --git a/src/sim/power/thermal_domain.cc b/src/sim/power/thermal_domain.cc index 62a0c23f8..4b840670d 100644 --- a/src/sim/power/thermal_domain.cc +++ b/src/sim/power/thermal_domain.cc @@ -108,8 +108,7 @@ LinearEquation ThermalDomain::getEquation(ThermalNode * tn, unsigned n, double step) const { LinearEquation eq(n); - double power = subsystem->getDynamicPower() + subsystem->getStaticPower(); if (tn == node) - eq[eq.cnt()] = power; + eq[eq.cnt()] = 1.75f; // Fake 1.75 Watts for now, to be changed to PM return eq; } |