mem: Use beats_per_clock as the DDR data rate for DRAMPower
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Tue, 19 May 2020 16:25:32 +0000 (17:25 +0100)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Mon, 20 Jul 2020 11:47:01 +0000 (11:47 +0000)
The data rate is used by the drampower lib to estimate the power
consumption of the DRAM Core. Previously, we used the formula:

burst_cycles = divCeil(p->tBURST_MAX, p->tCK);
data_rate = p->burst_length / burst_cycles;

to derive the data_rate. However, under certain configurations this
formula computes the wrong result due to rounding errors. This patch
simplifies the way we derive the data_rate by passing the value of the
DRAM parameter beats_per_clock.

Change-Id: Ic8cd35bb4641d9c0a704675d2672a6fe4f4ec13e
Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Wendy Elsasser <wendy.elsasser@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/30056
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
src/mem/drampower.cc
src/mem/drampower.hh

index f5069282b5fd31390d74a62d6442bae76e5361ef..13551a0b42f4c93373e7050f1c5461452b6eb951 100644 (file)
@@ -53,7 +53,7 @@ DRAMPower::getArchParams(const DRAMCtrlParams* p)
     archSpec.nbrOfBanks = p->banks_per_rank;
     // One DRAMPower instance per rank, hence set this to 1
     archSpec.nbrOfRanks = 1;
-    archSpec.dataRate = getDataRate(p);
+    archSpec.dataRate = p->beats_per_clock;
     // For now we can ignore the number of columns and rows as they
     // are not used in the power calculation.
     archSpec.nbrOfColumns = 0;
@@ -146,14 +146,3 @@ DRAMPower::hasTwoVDD(const DRAMCtrlParams* p)
 {
     return p->VDD2 == 0 ? false : true;
 }
-
-uint8_t
-DRAMPower::getDataRate(const DRAMCtrlParams* p)
-{
-    uint32_t burst_cycles = divCeil(p->tBURST_MAX, p->tCK);
-    uint8_t data_rate = p->burst_length / burst_cycles;
-    // 4 for GDDR5
-    if (data_rate != 1 && data_rate != 2 && data_rate != 4 && data_rate != 8)
-        fatal("Got unexpected data rate %d, should be 1 or 2 or 4 or 8\n");
-    return data_rate;
-}
index ed47476e73a4a41c5c9d9c1304ce0288c91a5524..da24bcadba4bc57d7b4eb441092d2f7a0937d5e8 100644 (file)
@@ -73,11 +73,6 @@ class DRAMPower
      */
     static Data::MemPowerSpec getPowerParams(const DRAMCtrlParams* p);
 
-    /**
-     * Determine data rate, either one or two.
-     */
-    static uint8_t getDataRate(const DRAMCtrlParams* p);
-
     /**
      * Determine if DRAM has two voltage domains (or one)
      */