MemoryPowerModel.h revision 11555
110428Sandreas.hansson@arm.com/* 210428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Delft 310428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Eindhoven 410428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Kaiserslautern 510428Sandreas.hansson@arm.com * All rights reserved. 610428Sandreas.hansson@arm.com * 710428Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 810428Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 910428Sandreas.hansson@arm.com * met: 1010428Sandreas.hansson@arm.com * 1110428Sandreas.hansson@arm.com * 1. Redistributions of source code must retain the above copyright 1210428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer. 1310428Sandreas.hansson@arm.com * 1410428Sandreas.hansson@arm.com * 2. Redistributions in binary form must reproduce the above copyright 1510428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1610428Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution. 1710428Sandreas.hansson@arm.com * 1810428Sandreas.hansson@arm.com * 3. Neither the name of the copyright holder nor the names of its 1910428Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 2010428Sandreas.hansson@arm.com * this software without specific prior written permission. 2110428Sandreas.hansson@arm.com * 2210428Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 2310428Sandreas.hansson@arm.com * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2410428Sandreas.hansson@arm.com * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 2510428Sandreas.hansson@arm.com * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2610428Sandreas.hansson@arm.com * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2710428Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 2810428Sandreas.hansson@arm.com * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2910428Sandreas.hansson@arm.com * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 3010428Sandreas.hansson@arm.com * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 3110428Sandreas.hansson@arm.com * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3210428Sandreas.hansson@arm.com * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3310428Sandreas.hansson@arm.com * 3410428Sandreas.hansson@arm.com * Authors: Karthik Chandrasekar, Matthias Jung, Omar Naji 3510428Sandreas.hansson@arm.com * 3610428Sandreas.hansson@arm.com */ 3710428Sandreas.hansson@arm.com 3810428Sandreas.hansson@arm.com#ifndef MEMORY_POWER_MODEL_H 3910428Sandreas.hansson@arm.com#define MEMORY_POWER_MODEL_H 4010428Sandreas.hansson@arm.com 4110428Sandreas.hansson@arm.com#include "MemorySpecification.h" 4210428Sandreas.hansson@arm.com#include "CommandAnalysis.h" 4310428Sandreas.hansson@arm.com 4410428Sandreas.hansson@arm.comnamespace Data { 4510428Sandreas.hansson@arm.comclass MemoryPowerModel { 4610428Sandreas.hansson@arm.com public: 4710428Sandreas.hansson@arm.com // Calculate energy and average power consumption for the given memory 4810428Sandreas.hansson@arm.com // command trace 4911555Sjungma@eit.uni-kl.de void power_calc(const MemorySpecification& memSpec, 5011555Sjungma@eit.uni-kl.de const CommandAnalysis& c, 5111555Sjungma@eit.uni-kl.de int term); 5210428Sandreas.hansson@arm.com 5310428Sandreas.hansson@arm.com // Used to calculate self-refresh active energy 5410428Sandreas.hansson@arm.com static double engy_sref(double idd6, 5510428Sandreas.hansson@arm.com double idd3n, 5610428Sandreas.hansson@arm.com double idd5, 5710428Sandreas.hansson@arm.com double vdd, 5810428Sandreas.hansson@arm.com double sref_cycles, 5910428Sandreas.hansson@arm.com double sref_ref_act_cycles, 6010428Sandreas.hansson@arm.com double sref_ref_pre_cycles, 6110428Sandreas.hansson@arm.com double spup_ref_act_cycles, 6210428Sandreas.hansson@arm.com double spup_ref_pre_cycles, 6310428Sandreas.hansson@arm.com double clk); 6410428Sandreas.hansson@arm.com 6510428Sandreas.hansson@arm.com int64_t total_cycles; 6610428Sandreas.hansson@arm.com 6710428Sandreas.hansson@arm.com struct Energy { 6810428Sandreas.hansson@arm.com // Total energy of all activates 6910428Sandreas.hansson@arm.com double act_energy; 7010428Sandreas.hansson@arm.com 7110428Sandreas.hansson@arm.com // Total energy of all precharges 7210428Sandreas.hansson@arm.com double pre_energy; 7310428Sandreas.hansson@arm.com 7410428Sandreas.hansson@arm.com // Total energy of all reads 7510428Sandreas.hansson@arm.com double read_energy; 7610428Sandreas.hansson@arm.com 7710428Sandreas.hansson@arm.com // Total energy of all writes 7810428Sandreas.hansson@arm.com double write_energy; 7910428Sandreas.hansson@arm.com 8010428Sandreas.hansson@arm.com // Total energy of all refreshes 8110428Sandreas.hansson@arm.com double ref_energy; 8210428Sandreas.hansson@arm.com 8310428Sandreas.hansson@arm.com // Total background energy of all active standby cycles 8410428Sandreas.hansson@arm.com double act_stdby_energy; 8510428Sandreas.hansson@arm.com 8610428Sandreas.hansson@arm.com // Total background energy of all precharge standby cycles 8710428Sandreas.hansson@arm.com double pre_stdby_energy; 8810428Sandreas.hansson@arm.com 8910428Sandreas.hansson@arm.com // Total energy of idle cycles in the active mode 9010428Sandreas.hansson@arm.com double idle_energy_act; 9110428Sandreas.hansson@arm.com 9210428Sandreas.hansson@arm.com // Total energy of idle cycles in the precharge mode 9310428Sandreas.hansson@arm.com double idle_energy_pre; 9410428Sandreas.hansson@arm.com 9510428Sandreas.hansson@arm.com // Total trace/pattern energy 9610428Sandreas.hansson@arm.com double total_energy; 9710428Sandreas.hansson@arm.com 9810428Sandreas.hansson@arm.com // Average Power 9910428Sandreas.hansson@arm.com double average_power; 10010428Sandreas.hansson@arm.com 10110428Sandreas.hansson@arm.com // Energy consumed in active/precharged fast/slow-exit modes 10210428Sandreas.hansson@arm.com double f_act_pd_energy; 10310428Sandreas.hansson@arm.com double f_pre_pd_energy; 10410428Sandreas.hansson@arm.com double s_act_pd_energy; 10510428Sandreas.hansson@arm.com double s_pre_pd_energy; 10610428Sandreas.hansson@arm.com 10710428Sandreas.hansson@arm.com // Energy consumed in self-refresh mode 10810428Sandreas.hansson@arm.com double sref_energy; 10910428Sandreas.hansson@arm.com 11010428Sandreas.hansson@arm.com // Energy consumed in auto-refresh during self-refresh mode 11110428Sandreas.hansson@arm.com double sref_ref_energy; 11210428Sandreas.hansson@arm.com double sref_ref_act_energy; 11310428Sandreas.hansson@arm.com double sref_ref_pre_energy; 11410428Sandreas.hansson@arm.com 11510428Sandreas.hansson@arm.com // Energy consumed in powering-up from self-refresh mode 11610428Sandreas.hansson@arm.com double spup_energy; 11710428Sandreas.hansson@arm.com 11810428Sandreas.hansson@arm.com // Energy consumed in auto-refresh during self-refresh power-up 11910428Sandreas.hansson@arm.com double spup_ref_energy; 12010428Sandreas.hansson@arm.com double spup_ref_act_energy; 12110428Sandreas.hansson@arm.com double spup_ref_pre_energy; 12210428Sandreas.hansson@arm.com 12310428Sandreas.hansson@arm.com // Energy consumed in powering-up from active/precharged power-down modes 12410428Sandreas.hansson@arm.com double pup_act_energy; 12510428Sandreas.hansson@arm.com double pup_pre_energy; 12610428Sandreas.hansson@arm.com 12710428Sandreas.hansson@arm.com // Energy consumed by IO and Termination 12810428Sandreas.hansson@arm.com double read_io_energy; // Read IO Energy 12910428Sandreas.hansson@arm.com double write_term_energy; // Write Termination Energy 13010428Sandreas.hansson@arm.com double read_oterm_energy; // Read Termination Energy from idle rank 13110428Sandreas.hansson@arm.com double write_oterm_energy; // Write Termination Energy from idle rank 13210428Sandreas.hansson@arm.com // Total IO and Termination Energy 13310428Sandreas.hansson@arm.com double io_term_energy; 13410428Sandreas.hansson@arm.com }; 13510428Sandreas.hansson@arm.com 13610428Sandreas.hansson@arm.com struct Power { 13710428Sandreas.hansson@arm.com // Power measures corresponding to IO and Termination 13810428Sandreas.hansson@arm.com double IO_power; // Read IO Power 13910428Sandreas.hansson@arm.com double WR_ODT_power; // Write ODT Power 14010428Sandreas.hansson@arm.com double TermRD_power; // Read Termination in idle rank (in dual-rank systems) 14110428Sandreas.hansson@arm.com double TermWR_power; // Write Termination in idle rank (in dual-rank systems) 14210428Sandreas.hansson@arm.com 14310428Sandreas.hansson@arm.com // Average Power 14410428Sandreas.hansson@arm.com double average_power; 14510428Sandreas.hansson@arm.com }; 14610428Sandreas.hansson@arm.com 14710428Sandreas.hansson@arm.com // Print the power and energy 14811555Sjungma@eit.uni-kl.de void power_print(const MemorySpecification& memSpec, 14910428Sandreas.hansson@arm.com int term, 15011555Sjungma@eit.uni-kl.de const CommandAnalysis& c) const; 15110428Sandreas.hansson@arm.com 15210428Sandreas.hansson@arm.com // To derive IO and Termination Power measures using DRAM specification 15311555Sjungma@eit.uni-kl.de void io_term_power(const MemorySpecification& memSpec); 15410428Sandreas.hansson@arm.com 15510428Sandreas.hansson@arm.com Energy energy; 15610428Sandreas.hansson@arm.com Power power; 15710428Sandreas.hansson@arm.com 15810428Sandreas.hansson@arm.com private: 15910428Sandreas.hansson@arm.com double calcIoTermEnergy(int64_t cycles, double period, double power, int64_t numBits) const; 16010428Sandreas.hansson@arm.com}; 16110428Sandreas.hansson@arm.com 16210428Sandreas.hansson@arm.comclass EnergyDomain { 16310428Sandreas.hansson@arm.com public: 16410428Sandreas.hansson@arm.com EnergyDomain(double voltage, double clkPeriod) : 16510428Sandreas.hansson@arm.com voltage(voltage), 16610428Sandreas.hansson@arm.com clkPeriod(clkPeriod) 16710428Sandreas.hansson@arm.com {} 16810428Sandreas.hansson@arm.com 16910428Sandreas.hansson@arm.com double calcTivEnergy(int64_t cycles, double current) const; 17010428Sandreas.hansson@arm.com private: 17110428Sandreas.hansson@arm.com const double voltage; 17210428Sandreas.hansson@arm.com const double clkPeriod; 17310428Sandreas.hansson@arm.com}; 17410428Sandreas.hansson@arm.com 17510428Sandreas.hansson@arm.com} 17610428Sandreas.hansson@arm.com#endif // ifndef MEMORY_POWER_MODEL_H 177