sim: Added model type to power model
authorAnouk Van Laer <anouk.vanlaer@arm.com>
Wed, 1 Mar 2017 17:05:18 +0000 (17:05 +0000)
committerAnouk Van Laer <anouk.vanlaer@arm.com>
Wed, 28 Feb 2018 21:55:35 +0000 (21:55 +0000)
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>

src/sim/power/PowerModel.py
src/sim/power/power_model.cc
src/sim/power/power_model.hh

index ecb45b44255d65102ffc0d7a89aa235cbe9e7015..3425690130a9fe04f53ee3cb112e2786d0c5a82d 100644 (file)
@@ -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")
index 5f810fe600d2cc7d813639d494ac7f7498eb88a0..e8c522cad7850b01494e9c141e7b10e00763a76a 100644 (file)
@@ -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());
 
index 976c0543f888c089ab1f2521c3cbf0e22b1ebcfc..e482b8005d3dc246f88fd42bcdb9e31f3e1e7567 100644 (file)
@@ -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