lib_test.cc revision 10428
110428Sandreas.hansson@arm.com/* 210428Sandreas.hansson@arm.com * Copyright (c) 2014, TU Delft, TU Eindhoven and TU Kaiserslautern 310428Sandreas.hansson@arm.com * All rights reserved. 410428Sandreas.hansson@arm.com * 510428Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 610428Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 710428Sandreas.hansson@arm.com * met: 810428Sandreas.hansson@arm.com * 910428Sandreas.hansson@arm.com * 1. Redistributions of source code must retain the above copyright 1010428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer. 1110428Sandreas.hansson@arm.com * 1210428Sandreas.hansson@arm.com * 2. Redistributions in binary form must reproduce the above copyright 1310428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1410428Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution. 1510428Sandreas.hansson@arm.com * 1610428Sandreas.hansson@arm.com * 3. Neither the name of the copyright holder nor the names of its 1710428Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 1810428Sandreas.hansson@arm.com * this software without specific prior written permission. 1910428Sandreas.hansson@arm.com * 2010428Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 2110428Sandreas.hansson@arm.com * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2210428Sandreas.hansson@arm.com * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 2310428Sandreas.hansson@arm.com * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2410428Sandreas.hansson@arm.com * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2510428Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 2610428Sandreas.hansson@arm.com * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2710428Sandreas.hansson@arm.com * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2810428Sandreas.hansson@arm.com * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2910428Sandreas.hansson@arm.com * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3010428Sandreas.hansson@arm.com * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3110428Sandreas.hansson@arm.com * 3210428Sandreas.hansson@arm.com * Authors: Matthias Jung, Omar Naji 3310428Sandreas.hansson@arm.com * 3410428Sandreas.hansson@arm.com */ 3510428Sandreas.hansson@arm.com 3610428Sandreas.hansson@arm.com#include <string> 3710428Sandreas.hansson@arm.com#include "libdrampower/LibDRAMPower.h" 3810428Sandreas.hansson@arm.com 3910428Sandreas.hansson@arm.com#if USE_XERCES 4010428Sandreas.hansson@arm.com #include "xmlparser/MemSpecParser.h" 4110428Sandreas.hansson@arm.com#endif 4210428Sandreas.hansson@arm.com 4310428Sandreas.hansson@arm.comusing namespace std; 4410428Sandreas.hansson@arm.comusing namespace Data; 4510428Sandreas.hansson@arm.com 4610428Sandreas.hansson@arm.comint main(int argc, char* argv[]) 4710428Sandreas.hansson@arm.com{ 4810428Sandreas.hansson@arm.com assert(argc == 2); 4910428Sandreas.hansson@arm.com //Setup of DRAMPower for your simulation 5010428Sandreas.hansson@arm.com string filename; 5110428Sandreas.hansson@arm.com //type path to memspec file 5210428Sandreas.hansson@arm.com filename = argv[1]; 5310428Sandreas.hansson@arm.com //Parsing the Memspec specification of found in memspec folder 5410428Sandreas.hansson@arm.com #if USE_XERCES 5510428Sandreas.hansson@arm.com MemorySpecification memSpec(MemSpecParser::getMemSpecFromXML(filename)); 5610428Sandreas.hansson@arm.com #else 5710428Sandreas.hansson@arm.com MemorySpecification memSpec; 5810428Sandreas.hansson@arm.com #endif 5910428Sandreas.hansson@arm.com libDRAMPower test = libDRAMPower(memSpec, 0); 6010428Sandreas.hansson@arm.com // During the simulation you can report activity 6110428Sandreas.hansson@arm.com // to DRAMPower with the doCommand(...) function: 6210428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,0,35); 6310428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,0,50); 6410428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,4,51); 6510428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,4,66); 6610428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,0,86); 6710428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,0,101); 6810428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,2,102); 6910428Sandreas.hansson@arm.com //This functionality is still not implemented. 7010428Sandreas.hansson@arm.com test.updateCounters(false); 7110428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,2,117); 7210428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,5,119); 7310428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,5,134); 7410428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,0,137); 7510428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,0,152); 7610428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,3,159); 7710428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,3,174); 7810428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,0,195); 7910428Sandreas.hansson@arm.com test.doCommand(MemCommand::RDA,0,210); 8010428Sandreas.hansson@arm.com test.doCommand(MemCommand::ACT,4,232); 8110428Sandreas.hansson@arm.com test.doCommand(MemCommand::WRA,4,247); 8210428Sandreas.hansson@arm.com test.doCommand(MemCommand::PDN_F_ACT,3,248); 8310428Sandreas.hansson@arm.com 8410428Sandreas.hansson@arm.com //set bool to true when this is the last update of the counters 8510428Sandreas.hansson@arm.com test.updateCounters(true); 8610428Sandreas.hansson@arm.com 8710428Sandreas.hansson@arm.com // At the end of your simulation call the getEnergy(...) 8810428Sandreas.hansson@arm.com // function to print the power report 8910428Sandreas.hansson@arm.com test.calcEnergy(); 9010428Sandreas.hansson@arm.com 9110428Sandreas.hansson@arm.com // Accesing the results: 9210428Sandreas.hansson@arm.com 9310428Sandreas.hansson@arm.com // Number of issued Commands 9410428Sandreas.hansson@arm.com std::cout << "# of acts" << "\t" <<test.counters.numberofacts << endl; 9510428Sandreas.hansson@arm.com std::cout << "# of reads" << "\t" <<test.counters.numberofreads << endl; 9610428Sandreas.hansson@arm.com std::cout << "# of precharges" << "\t" <<test.counters.numberofpres << endl; 9710428Sandreas.hansson@arm.com // many other timing parameters in test.mpm.timings 9810428Sandreas.hansson@arm.com 9910428Sandreas.hansson@arm.com //ENERGIES per Rank 10010428Sandreas.hansson@arm.com std::cout << "ACT Cmd Energy" << "\t" << test.getEnergy().act_energy << endl; 10110428Sandreas.hansson@arm.com std::cout << "PRE Cmd Energy" << "\t" << test.getEnergy().pre_energy << endl; 10210428Sandreas.hansson@arm.com std::cout << "Read Cmd Energy" << "\t" << test.getEnergy().read_energy << endl; 10310428Sandreas.hansson@arm.com std::cout << "Write Cmd Energy" << "\t" << test.getEnergy().write_energy << endl; 10410428Sandreas.hansson@arm.com //Standby Energy for 1 rank 10510428Sandreas.hansson@arm.com //In total energy calculated for both ranks= test.memSpec.memArchSpec * 10610428Sandreas.hansson@arm.com //test.getEnergy().act_stdby_energy 10710428Sandreas.hansson@arm.com std::cout << "ACT Std Energy" << "\t" << test.getEnergy().act_stdby_energy << endl; 10810428Sandreas.hansson@arm.com //total active standby energy for both ranks 10910428Sandreas.hansson@arm.com std::cout << "ACT Std Energy total ranks" << "\t" << memSpec.memArchSpec.nbrOfRanks * 11010428Sandreas.hansson@arm.com test.getEnergy().act_stdby_energy << "\n" ; 11110428Sandreas.hansson@arm.com std::cout << "PRE Std Energy" << "\t" << test.getEnergy().pre_stdby_energy << endl; 11210428Sandreas.hansson@arm.com std::cout << "Total Energy" << "\t" << test.getEnergy().total_energy << endl; 11310428Sandreas.hansson@arm.com //many other energies in test.mpm.energy 11410428Sandreas.hansson@arm.com 11510428Sandreas.hansson@arm.com //Powers per Rank 11610428Sandreas.hansson@arm.com std::cout << "Average Power" << "\t" << test.getPower().average_power << endl; 11710428Sandreas.hansson@arm.com //many other powers in test.getPower() 11810428Sandreas.hansson@arm.com 11910428Sandreas.hansson@arm.com // Test clearState function. 12010428Sandreas.hansson@arm.com test.clearState(); 12110428Sandreas.hansson@arm.com return 0; 12210428Sandreas.hansson@arm.com} 123