Skip to content

estwings57/CasHMC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CasHMC: A Cycle-accurate Simulator for Hybrid Memory Cube
version CasHMC v1.3 - 2017.07.10

1. Developer

  Dong-Ik Jeon
  Ki-Seok Chung
  Hanyang University
  estwings57 [at] gmail [dot] com


2. About CasHMC

  CasHMC provides a cycle-by-cycle simulation of every module in HMC, and 
  generates analysis results including a bandwidth graph and statistical data. 
  It supports HMC unique features, such as the high speed serial link, 
  the packet-based interface, and the vault-based DRAM structure. Since CasHMC 
  simulates all HMC modules at a cycle-accurate level, it is capable of deriving 
  precise simulation results and analyses.

  Furthemore, CasHMC is implemented in C++ as a single wrapped object that 
  includes a HMC controller, communication links, and the HMC memory. 
  Instantiating this single wrapped object facilitates simultaneous simulation 
  in parallel with other simulators that generate memory access patterns 
  such as a processor simulator or a memory trace generator.


3. CasHMC version info

  v1.0 (2016.05.07 released)
   - Released the 1st CasHMC
   - Modeling HMC architecture and packet-based interface

  v1.1 (2016.07.21 released)
   - Support 'atomic commands' refered to HMC specification 2.1 (arithmetic, bitwise, boolean, comparison)
     for more information, check Transaction.h (TransactionType) or RunSim.cpp (line 86)

  v1.2 (2016.09.27 released)
   - Modify vault mapping (CrossbarSwitch) of the packet bigger than the maximum block size
   - Support a new link priority scheme (buffer-aware scheme)
   - Add one cycle delay for an atomic command operation in VaultController class (atomicOperLeft)
   - Minor revision (few mistakes)

  v1.3 (2017.07.10 released)
   - Integrated with gem5 simulator 
     * Configure parameters loading at the runtime (parameters in ConfigSim.ini and ConfigDRAM.ini files)
     * Static and dynamic library compilation by Makefile
   - Link power consumption simulation is added (configured by link power parameter in ConfigSim.ini file)
   - Support various link power managements
     * QUIESCE_SLEEP : on the basis of the tQUIESCE that is the time interval to enter link lowe power mode
     * MSHR : the number of active links is decided by the number of the allocated MSHR
     * LINK_MONITOR : the number of active links is decided by the derived downstream and upstream link bandwidth
     * AUTONOMOUS : MSHR and LINK_MONITOR together
   - Minor revision


4. Getting CasHMC

  CasHMC is available on github.
  https://github.com/estwings57/CasHMC


5. Folder directory

  graph : Gnuplot script file and a graph data file after a simulation run is over
  result : Log files after a simulation run is over
  sources : All CasHMC source files
  trace : The example of trace files (The files are extracted from SPEC CPU2006 benchmarks)


6. Building CasHMC

  To build an optimized CasHMC

  $ make


7. Running CasHMC

  > Command line arguments
  
  -c (--cycle)   : The number of CPU cycles to be simulated
  -t (--trace)   : Trace type ('random' or 'file')
  -u (--util)    : Requests frequency (0 = no requests, 1 = as fast as possible) [Default 0.1]
  -r (--rwratio) : (%) The percentage of reads in request stream [Default 80]
  -f (--file)    : Trace file name
  -h (--help)    : Simulation option help
  
  > The example of trace generator mode
 
  $ ./CasHMC -c 100000 -t random -u 0.1 -r 60
  
  > The example of trace file mode
  
  $ ./CasHMC -c 100000 -t file -f ./trace/SPEC_CPU2006_example/mase_trace_bzip2_base.alpha.v0.trc
  
  > The example of CasHMCWrapper object instantiating
  
  In a source file
  
    #include "CasHMCWrapper.h“
    #include "Transaction.h"
    ...

      CasHMCWrapper *casHMCWrapper = new CasHMCWrapper("ConfigSim.ini", "ConfigDRAM.ini");
      ...

      TransactionType tranType = DATA_READ;
      uint64_t physicalAddress = 0x0123456789abcdef;
      unsigned dataSize = 32;
      Transaction *newTran = new Transaction(tranType, addr, dataSize, casHMCWrapper);
      casHMCWrapper->ReceiveTran(newTran);
      ...
  
  > Integration with gem5 simulator
  
  There is a script file [CasHMC/integration/gem5/integ_CasHMC-gem5.sh] for integrating CasHMC and gem5 
  Copy this script file to gem5 root directory and then run the script
  (gem5 download : $ hg clone http://repo.gem5.org/gem5)
  
    $ cp -a CasHMC/integration/gem5/integ_CasHMC-gem5.sh $GEM5_DIR
    $ source $GEM5_DIR/integ_CasHMC-gem5.sh


8. Special thanks to

   HyeJin Choi,
   Kyeong-Bin Park