Gem5 Basic Guideline

All contents original from https://github.com/dependablecomputinglab

This article is just a backup incase myself later using.

Gem5 Installation

step 1: install prerequisites

for Ubuntu

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install -y git build-essential g++ zlib1g-dev scons m4 swig python-dev

step 2: Download & Build

Download


$ cd ~
~$ git clone https://github.com/gem5/gem5

Build

  • Command: $ scons build//
  • Supported ISA: ARM, ALPHA, MIPS, SPARC, POWER, X86
  • Supported Binaries: gem5.debug, gem5.opt, gem5.fast, gem5.prof

This is a example for ARM architecture

$ cd ~/gem5
~/gem5$ scons build/ARM/gem5.opt

step 3: Run benchmark

  • Command: $ build// -c
  • Outputs are generated in m5out/

This is example for building gem5 for ARM ISA


$ cd ~
~$ git clone https://github.com/gem5/gem5

All simulation statistics are saved as file m5out/stats.txt

Simulation Process

  1. Get benchmark to simulate
  2. Do simulation
  3. Analyze simulation statistics

STEP1: Get Benchmark

You can get benchmark by:

  • Making your own benchmark yourself
  • Download binary
  • Download source code & build binary

In our case, we will download MiBench, then cross-compile to get benchmark.

Download MiBench

$ git clone https://github.com/embecosm/mibench.git

Install Cross-compiler

$ sudo apt-get install gcc-arm-linux-gnueabi

Cross-compile to build binary

Initially, you can see Makefile in directory ‘mibench/automotive/qsort‘ looks like:

...
gcc -static qsort_large.c -O3 -o qsort_large -lm 
...

Replace allgcc‘ to ‘arm-linux-gnueabi-gcc‘, so the Makefile looks like:

...
arm-linux-gnueabi-gcc -static qsort_large.c -O3 -o qsort_large -lm 
...

To build, execute

$ make

NOTE When you cross-compile, you must use ‘-static‘ option. If there is no ‘-static‘ option in Makefile, you have to insert it.
For example, if your Makefile looks like:

...
arm-linux-gnueabi-gcc qsort_large.c -O3 -o qsort_large -lm
...

You have to insert ‘-static‘ option. Then, Makefile will look like:

...
arm-linux-gnueabi-gcc -static qsort_large.c -O3 -o qsort_large -lm 
...

STEP2: Perform Simulation

$ <gem5 binary> [gem5 options] <gem5 script> [gem5 script options]

Useful gem5 script options

  • ‘-c <binary to simulate>’
  • ‘-o <input set of benchmark>’

For example, if you want to simulate qsort_large,

$ ./build/ARM/gem5.opt -re configs/example/se.py --cpu-type=atomic -c <path to qsort_large> -o <path to input_large.dat>

NOTE
If you want to put multiple input to binary, you have to use quotation marks(“) and white spaces.
For example, if your fft binary is in ~/mibench/telecom/FFT,

$ ./build/ARM/gem5.opt -re configs/example/se.py --cpu-type=timing -c ~/mibench/telecom/FFT/fft -o "100 64"

STEP3: Analyzing Simulation Statistics

Find difference between two files with diff

The diff is a program in linux.
The diff compares two files, line by line.
You can use diff by executing: $ diff [options] <file1> <file2>

For example, clone this repository and execute:

$ diff goodbye1.txt goodbye2.txt

If you use ‘-u‘ option like this:

$ diff -u goodbye1.txt goodbye2.txt

Redirection may make you happy! Try this:

$ diff -u goodbye1.txt goodbye2.txt > goodbye.diff

You can see the file goodbye.diff.

 

Leave a Reply