This is an implementation of the Cacheus replacement policy in ZSim, which can be found in this paper. Our group consists of Colby Endres and Giacomo Coraluppi. The repository is structured identical to zsim, with several additions.The actual implementation can be found in cacheus_repl.h and judge.h. Users who wish to implement different judge policies can do so by extending the virtual Judge class and adding it to the JudgeScheme enum found in cacheus_repl.h.
git clone git@github.com:CSCE-614-AMUZAHID-S25/Cacheus_Group3.git
cd Cacheus_Group3
python -m venv ./venv
source ./venv/bin/activate
pip install scons
source setup_env
cd zsim
scons -j4
First, unzip the benchmark folder:
zip -F benchmarks.zip --out single-benchmark.zip && unzip single-benchmark.zip && mkdir benchmarks/parsec-2.1/inputs/streamcluster
With the repository cloned and the simulator compiled, you can run a single benchmark with ./run_cacheus <suite> <benchmark> <judge1> <judge2> or run all of them with ./driver. However, you will likely need to modify src/init.cpp to change the JudgeScheme variables corresponding to Cacheus' judges.
Each benchmark and judge combination produces a zsim.out. As a helper, we provide get_stats.ipynb, which walks the output directory and generates the plots for IPC, total cycles, and MPKI. If you want to see the results in excel format rather than plots, we provide 'zsim/get_stats.py' which generates an excel sheet with all the parsed information from the zsim.out files. These benchmarks take a significant amount of time to run, so we provide all of the *.out files and the resulting plots.