sim: Added model type to power model
Static, dynamic or all to differentiate between types of power models so for example static models will not be asked for a dynamic power Change-Id: I3a0385821f7c671aedddaebeb038c677367faa81 Reviewed-by: Sascha Bischoff <sascha.bischoff@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8601 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2016 ARM Limited
|
||||
# Copyright (c) 2016-2018 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
@@ -39,6 +39,9 @@ from m5.SimObject import *
|
||||
from m5.params import *
|
||||
from m5.proxy import Parent
|
||||
|
||||
# Enum for a type of power model
|
||||
class PMType(Enum) : vals = ['All', 'Static', 'Dynamic']
|
||||
|
||||
# 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
|
||||
@@ -57,3 +60,6 @@ class PowerModel(SimObject):
|
||||
# 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")
|
||||
|
||||
# Type of power model
|
||||
pm_type = Param.PMType("All", "Type of power model")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016 ARM Limited
|
||||
* Copyright (c) 2016-2018 ARM Limited
|
||||
* All rights reserved
|
||||
*
|
||||
* The license below extends only to copyright in the software and shall
|
||||
@@ -52,7 +52,7 @@ PowerModelState::PowerModelState(const Params *p)
|
||||
|
||||
PowerModel::PowerModel(const Params *p)
|
||||
: SimObject(p), states_pm(p->pm), subsystem(p->subsystem),
|
||||
clocked_object(NULL)
|
||||
clocked_object(NULL), power_model_type(p->pm_type)
|
||||
{
|
||||
panic_if(subsystem == NULL,
|
||||
"Subsystem is NULL! This is not acceptable for a PowerModel!\n");
|
||||
@@ -94,6 +94,10 @@ PowerModel::getDynamicPower() const
|
||||
{
|
||||
assert(clocked_object);
|
||||
|
||||
if (power_model_type == Enums::PMType::Static) {
|
||||
// This power model only collects static data
|
||||
return 0;
|
||||
}
|
||||
std::vector<double> w = clocked_object->pwrStateWeights();
|
||||
|
||||
// Same number of states (excluding UNDEFINED)
|
||||
@@ -118,6 +122,11 @@ PowerModel::getStaticPower() const
|
||||
|
||||
std::vector<double> w = clocked_object->pwrStateWeights();
|
||||
|
||||
if (power_model_type == Enums::PMType::Dynamic) {
|
||||
// This power model only collects dynamic data
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Same number of states (excluding UNDEFINED)
|
||||
assert(w.size() - 1 == states_pm.size());
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016 ARM Limited
|
||||
* Copyright (c) 2016, 2018 ARM Limited
|
||||
* All rights reserved
|
||||
*
|
||||
* The license below extends only to copyright in the software and shall
|
||||
@@ -41,6 +41,7 @@
|
||||
#define __SIM_POWER_POWER_MODEL_HH__
|
||||
|
||||
#include "base/statistics.hh"
|
||||
#include "enums/PMType.hh"
|
||||
#include "params/PowerModel.hh"
|
||||
#include "params/PowerModelState.hh"
|
||||
#include "sim/probe/probe.hh"
|
||||
@@ -184,6 +185,9 @@ class PowerModel : public SimObject
|
||||
|
||||
/** The clocked object we belong to */
|
||||
ClockedObject * clocked_object;
|
||||
|
||||
/** The type of power model - collects all power, static or dynamic only */
|
||||
Enums::PMType power_model_type;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user