Getting started with gem5

Running gem5

  • Interface is python3.
  • gem5 python environment can be thought as python3 environment + m5 library + gem5 standard library.
    • There is no magic: the paths to the m5 library and gem5 standard library are compiled to the gem5 library (provide reference to the source code).
    • Scripts without using m5 library and gem5 library can be run by both gem5 and python.
  • Demo of,
    • A simple script that can be run by both gem5 and python3.
    • A simple script that can only be run by gem5.
  • The python script inputted to gem5 is usually referred as “system configuration”, “configuration script”, “python config”, etc.

Things to touch on

  • “Model” vs “configuration”

First configuration example


gem5’s output

  • m5out/
  • stats.txt
    • Where the stats are.
    • Dumping stats: telling gem5 to emit all stats by appending the stat to the file stats.txt.
    • The stats will always be dumped at the end of simulations.
    • The stats can be manually dumped multiple times during a simulation, thus there could be multiple sets of stats in stats.txt.
      • The first N-1 ones are manually dumped.
      • The last one is dumped automatically.
    • Stats can be reset via m5.stats.reset() or m5_reset_stats()?
    • It is important to know which stats set belong to which stat dump command.
  • config.ini, config.json, config.dot, config.dot.pdf, config.dot.svg,
    • How gem5 interpret the system configuration script.
    • Useful for sanity check: strongly recommended to check the outputted config file for each simulation.
  • The difference between simulated and wallclock

Python reminder

This is where we give a brief overview of python.

  • Briefly going over the basics of the language,
    • Types: int, string, dict, list, set, tuple.
    • Controls: for/while loops, if statements.
    • Functions.
  • Detailed covering of frequently used features,
    • List comprehension: used for making a list of SimObject’s.
      • Appending a SimObject to a list is not allowed.
    • Iterator/Generator: “lazily” constructing a list of object,
      • Returning all objects in a list all at once vs returning the next object when queried.
      • Examples.
    • Importing modules,
      • Importing python standard modules.
      • Importing a python file as a module.
      • Importing m5 module, gem5 module (the gem5 module is known as the gem5 standard library).
    • Object oriented programming,
      • Base (parent) class, derived (child) class.
        • The child class inherits all functions and variables.
      • Overriding a function.
        • If the child class and the parent class provide a function with the same name, the child’s function will be called.
      • Class vs instance/object.
        • A class can be thought as a blueprint for an object of the same class.
      • Class variables vs object variables.
        • The class variables are not unique among objects.
        • The object variables are unique among objects.
      • Class functions vs object functions.
        • The class functions are not unique among objects.
        • The object functions are unique among objects.
      • Abstract functions, abstract classes.
        • abc library in python.
        • How to use @abstractmethod to define an abstract function.
        • A class is abstract if it contains at least one abstract functions.
        • Providing the guarantee (or interface) that all classes inherited from this class will have the abstract function defined.
    • m5 library,
      • m5.instatiate()
        • Tell gem5 to connect SimObject as specified in the script.
        • After this statement, the system configuration should not be modified.
      • m5.simulate()
        • Running the simulation.
        • Can specify how many instructions to simulate.
      • m5.stats.dump()
      • m5.stats.reset()
    • argparse
      • Parameterize the configuration script.
      • Example usage.
    • seaborn
      • Example usage of a barplot.

Example for Python reminder

  • Parameterized input using argparse.
  • Calling m5.stats.dump() once.
  • Using python3 to parse the stats file and graphing results using seaborn.