Source code of the simulators used to evaluate the mechanisms presented in the ISCA'19 paper:
H. Hassan, M. Patel, J. S. Kim, A. G. Yağlıkçı, N. Vijaykumar, N. Mansouri Ghiasi, S. Ghose, O. Mutlu. "CROW: A Low-Cost Substrate for Improving DRAM Performance, Energy Efficiency, and Reliability". In Proceedings of the International Symposium on Computer Architecture (ISCA), June 2019.
The presentations of the paper are available on YouTube:
The architectural simulator is built on Ramulator, which is described in this earlier work:
Yoongu Kim, Weikun Yang, and Onur Mutlu, "Ramulator: A Fast and Extensible DRAM Simulator". IEEE Computer Architecture Letters (CAL), March 2015.
Please cite the above works if you make use of the tools provided in this repository.
Ramulator is a cycle-accurate memory simulator that support a wide array of commercial and academic DRAM standards. We have modified the memory controller of Ramulator to evaluate the performance of the CROW-cache and CROW-ref mechanisms proposed in our paper.
$ cd ramulator
$ make -j
$ ./run.sh
Note that the script will run a very quick simulation using a small trace file. Please refer to the original Ramulator repository for traces collected from real workloads.
To change CROW configuration, you may either edit the configuration file
configs/CROW_configs/LPDDR4.cfg
or edit the run.sh
script to provide
command-line parameters when starting the ramulator executable. Here are some of
the key CROW command-line arguments:
copy_rows_per_SA
- the number of copy rows per subarray.copy_rows_per_SA=0
disables both CROW-cache and CROW-refenable_crow_upperbound
- Whentrue
, it enables hypothetical CROW-cache with 100% hit rateweak_rows_per_SA
- the number of weak regular rows per subarray. CROW-ref remaps these rows to the copy rows. The rest of the available copy rows can be utilized by CROW-cache. Setcopy_rows_per_SA
andweak_rows_per_SA
to the same value to enable only CROW-ref but not CROW-cache.refresh_mult
- refresh interval multiplier when CROW-ref is enabled. After remapping the weak rows, CROW-ref multiplies the default refresh interval by this parameter to reduce the DRAM refresh rate.
You can find all configuration parameters in src/Config.h
.
You can execute run_sweep_copy_rows.sh
to simulate CROW-cache by sweeping
the number of copy rows per subarray. This can be used to recreate the Figure 8
in the paper. The script uses traces collected from
a SPEC2006 workload, bzip2, as input workload. Edit the script to
simulate more workloads. You can find more workload traces in the original
Ramulator repository.
This repository also implements TL-DRAM and SALP, the two in-DRAM caching
mechanisms we compare CROW-cache against in the paper. We provide a bash
script, run_crow_tl-dram_salp.sh
, which can be run simulate bzip2 with
CROW-cache, TL-DRAM, and SALP configurations. The output can be used to
recreate Figure 11 in the paper.
Also, please refer to the original Ramulator repository for additional details on Ramulator's source code.
We use LTSpice based DRAM circuit-level simulation to evaluate the latency of two-row (and multiple-row) activation. We have used LTSpice on a Linux system using Wine.
- If you are using a Linux system, first, install Wine. In Debian-based systems, you can use the following command: $ apt install wine
- Download LTSpice and follow the instructions to install.
- Edit
LTSpice_executable_path
in file SPICESim/LTspice-cli/config.py to point to the LTSpice executable. - Run
make
inside the SPICESim directory to build the simple parser application used to process the raw output produced by LTSpice.
For a quick run, you can just run the following command:
$ ./run_sim.sh
This will perform circuit-level simulation to estimate tRCD/tRAS/tWR timing parameters when simultaneously activating 1 to 8 rows that contain the same data.