CohereSim: A Bus-based Cache Simulator  v3.3
A tool for education in computing - learn about coherence protocols, replacement policies, and SMP vs DSM
CohereSim

About

CohereSim is aimed at providing runtime metrics of a DSM processor to enhance education in computer architecture, wherein it enables students to compare a variety of caches and draw conclusions about the impact of the cache size, line size, associativity, coherence protocol and replacement policy.

Version Programmer Description
1.0 Ahmad Samih & Yan Solihin Initial Version
2.0 Ed Gehringer Revised for Spring 2015
3.0 Anthony Spendlove Complete rewrite for Spring 2025
3.1 Anthony Spendlove Add batch mode (parallel execution)
3.1.1 Anthony Spendlove Trace file chunks are "double buffered" in batch mode
3.2 Anthony Spendlove Added write timestamp debugging feature, consistency refactorings, bugfixes, portability and cross-platform edits
3.3 Anthony Spendlove Added directory protocol program structure

(Version history begins with v3.0)

This software operates under the GNU General Public License v3.0.

The repo containing the full CohereSim implementation has been privated to allow coding assignments to be derived from its code. To request a copy of the full CohereSim implementation, please contact Dr. Ed Gehringer at the email above.

A copy of this documentation is hosted on my GitHub Pages.

Roadmap

  • Implement Directory Protocols
  • Compressed Trace Files
  • More Protocols and Policies

CohereSim Simulator

Installation

This repository uses sub-modules to generate trace files for the simulation. If you do not wish to generate trace files, then the sub-modules can be left empty (uninitialized). If you do want to generate trace files, then:

  • If you already downloaded this repo, then run git submodule update --init from the root directory.
  • If not, then simply include the --recurse-submodules option in the git clone command.

Build & Run

The provided make file in the root directory is used to build CohereSim. It currently has four targets:

  • all: (Incremental) build, default target
  • rebuild: Fully re-compile all source files
  • clean: Remove files generated by the build and run process
  • *.bin: Run CohereSim in batch metrics mode, using configs.txt as the configuration list and *.bin as the trace file

For more information on running CohereSim and its modes of operation, see the CohereSim manual.

Development

For further development, a development manual is included in this documentation.

Tool Suite

Doxygen Documentation

The codebase and tool suite are documented using Doxygen style comments. As such, the Doxyfile is provided at the root directory and configured to generate HTML documentation of this software suite. To generate this documentation, simply issue doxygen on the command line in the same directory as this file. The resulting documentation will be available at docs/html/index.html.

Template File Generation

CohereSim was built to be extended, and thus template files and a template generator script are provided to automate the boilerplate code.

See the template file generation guide to learn how to create new source files using the provided templates.

Trace File Generation

CohereSim reads in memory trace files to simulate cache behavior and record statistics. These are binary files comprised of a series of 5-byte memory accesses. Each memory access is structured as follows:

  • The first 7 bits (7 high bits) are the CPU core ID that performs the memory access
  • The 8th bit (LSB) is the operation (1 = write, 0 = read)
  • The remaining 4 bytes are the 32-bit memory address accessed, stored in little endian byte ordering

For example, a trace of 09 70 7D 11 00 evaluates to a write operation by CPU core 4 at address 0x00117D70.

See the trace file generation guide to learn how to create your own trace files.

Folder Structure

Path Description
🗁 bin/ Build directory
📂 docs/ Documentation files
🗁 html/ Generated HTML documentation
📂 pages/ Custom documentation pages
📄 cache_sim.md CohereSim operation manual
📄 development.md Developer manual
📄 exit_codes.md CohereSim exit code explanation
📄 gen_traces.md Trace file generation manual
📄 templates.md Template file generation manual
📄 custom_doxygen.css Stylesheet for doxygen documentation
📂 src/ CohereSim source files (see file list)
📂 template/ Template files & generator script
📄 coherence_c.tmplt Coherence protocol source file template
📄 coherence_h.tmplt Coherence protocol header file template
📄 directory_c.tmplt Directory protocol source file template
📄 directory_h.tmplt Directory protocol header file template
📄 interactive_c.tmplt Interactive mode source file template
📄 interactive_h.tmplt Interactive mode header file template
📜 mksrc.sh Source file generator script
📄 replacement_c.tmplt Replacement policy source file template
📄 replacement_h.tmplt Replacement policy header file template
📂 tools/ First- and third-party tool suite for trace file generation
📦 gem5/ gem5 computer hardware simulator
📦 parsec-benchmark/ PARSEC benchmark suite
📄 extractor.c Translator program from gem5 output into trace file binary format
📜 gem5_config.py gem5 configuration for trace file generation
📜 gen_trace.sh Trace file generation script
📜 get_platform.sh Platform string generator
🗁 traces/ Generated trace files
📄 .gitignore Git ignore list
📄 .gitmodules Git sub-module list
📄 configs.txt Example configs file
📜 Doxyfile Doxygen script for generating documentation
🔗 index.html Link to generated HTML documentation
📄 LICENSE License file
📜 Makefile Make script for building and running CohereSim
📄 README.md Readme file
📄 sequence7.2.txt Cache line access sequence from the textbook
📄 sequence7.6.txt Cache line access sequence from the textbook
  • 📂: Folder
  • 🗁: Folder excluded by .gitignore
  • 📦: GitHub sub-module
  • 📄: File
  • 📜: Script file
  • 🔗: Link to file