gem5 Bootcamp 2022

gem5 Bootcamp Summer 2022 at UC Davis offered by the Davis Computer Architecture Research Group

Livestream and discussion

You can find links to all of the livestreamed videos on YouTube.

Instead of using YouTube comments, we will be using Slack for our discussions. You can use the following invite link to enter the slack. Once you have joined, type /join-channel bootcamp-2022 in any text box (e.g., in a DM to yourself) to join the bootcamp channel.

Tentative schedule

Session Topic Objectives
Monday Morning Welcome and Introduction  
  Building gem5 - Learn about the gem5 dependencies
- Be introduced to SCons
- Understand the different gem5 binary types (opt, debug, fast)
  Python basics - A recap of basic Python skills needed to use gem5
- Object-oriented programming reminder
- Run a simple python script in gem5
  Using gem5 basics - Understand gem5 configuration scripts and its python interpreter
- Understand what the m5 and gem5 libraries are
- Get a general architecture outline of gem5
- Obtain and understand the stats output
- Understand the config.ini file
  About simulation - Learn about common gem5 terminology: “host”, “guest”, etc.
- Learn about the difference between Full-System and Syscall emulation mode
Monday Afternoon The gem5 standard library - Use the stdlib components to build a simulated system
- Use the stdlib resource class to automatically obtain gem5-resources to use in their experiment
- Create a gem5 resource custom resource
- Set workloads for a simulated system via the set_workload functions
- Create functions to run on specific exit events
- Create an stdlib component
  Welcome dinner  
Tuesday Morning Using gem5 models - Use different gem5 CPU models (Timing Simple, Atomic, O3, Minor, Trace, etc.)
- Use classic caches in a simulation
- Use Ruby caches in a simulation (understand the different coherence protocols, how to compile them and how to create a cache hierarchy via a simple network)
  Using gem5 to run things - Use traffic generators to test memory systems
- Incorporate the m5 utility into workloads
- Learn to use cross-compilers for non-host ISA workloads
- Learn how to output and parse stats
Tuesday Afternoon Full system simulation - Create a disk image for FS simulations
- Create and add and modify gem5 resources
- Learn how to use the m5 readfile interface
  Accelerating Simulation - Create checkpoints
- Load from checkpoints
- Fastforward a simulation
- Employ sampling techniques
- Learn about KVM
Wednesday Morning Creating your own SimObjects - Understand how a request travels through the system
- Implement a SimObject
- Learn how to model real-world hardware timing
- Learn how to add SimStats and how it maps to real-world hardware
- Debug a gem5 SimObject
Wednesday Afternoon Adding your own instructions - Understand the details of the ISA sub-system
- Extend gem5 to simulate an unsupported instruction
- Understand the differences between modeling a user-mode and supervisor mode instruction
- Understand gem5 debug traces for a particular execution
Thursday Morning Advanced topics in memory systems - Learn how to extend a packet with a new MemCmd
- Learn how to use Garnet (How to create different network topologies with specific characteristics; using the Garnet synthetic traffic; and understanding the output statistics)
- Create and extend cache coherence protocols (create a classic coherence protocol; design a Ruby coherence protocol)
Thursday Afternoon The gem5 GPU Model [TBD]
  Group Social Event  
Friday Morning Writing tests and contributing to gem5 - Write a GTest to test a piece of CPP code
- Write a PyUnit test to test a python function
- Use testlib to test a gem5 simulation condition
- Run Testlib/PyUnit/GUnit tests for gem5
- Understand gem5’s quick/Kokoro, long/Nightly, very-long/Weekly test structure
- Understand gem5’s code-formatting guidelines
- Use git to add code to the repo
- Review patches on Gerrit
- Respond to feedback on Gerrit
Friday Afternoon gem5 extensions and other simulators - Incorporate SST into a simulation
- Incorporate DRAMSim into a simulation
- Use SystemC in gem5 and gem5 in SystemC
  Wrapping things up