ESESC Simulation Framework Tutorial

by Jose Renau - tags: ,

Tutorial Goals

The full day tutorial held on December 7th at MICRO 2013 will cover an introduction of the main ESESC components. It is designed for PhD students and industry researchers to get a fast introduction to ESESC and show some sample projects and advanced features.

What is ESESC?

ESESC is a fast multiprocessor simulator with detailed power, thermal, and performance models for modern out-of-order multicores. ESESC is an evolution of the popular SESC simulator (Enhanced SESC) that provides many new features.

The main ESESC characteristics are the following:

  • It is very fast (over 20MIPS with sampling)

  • Uses QEMU and supports user mode ARM ISA

  • Models OoO and InOrder cores in detail (ROB, Instruction Window, etc)

  • Supports configurable memory hierarchy, and on-chip memory controller

  • Supports multicore, homogeneous and heterogeneous configurations

  • Simulates multithreaded and multiprogram applications

  • Models power and temperature in addition to performance, and their interactions

ESESC is a significant evolution/improvement over SESC:

  • ESESC has ARM ISA, sesc had MIPS ISA.

  • ESESC can run unmodified Linux ARM binaries, MIPS required a custom toolchain.

  • ESESC uses QEMU for emulation, sesc had a custom emulator.

  • ESESC is integrated with McPat, sesc had an older Wattch model.

  • ESESC has a brand new memory hierarchy, sesc had a more complex coherence.

  • ESESC has improved thermal modeling, sesc had HotSpot

  • ESESC has many types of sampling (statistical, smarts, simpoint), sesc had none.

  • ESESC is actively maintained, sesc is no longer mantained.

  • ESESC has many bugs solved.

Tutorial Program (slides and demo instructions)

The schedule for the tutorial is listed below:

  • 08:00 - 09:00: Breakfast

  • 09:00 - 09:30: Overview

  • 09:30 - 10:30: Code Structure and Tools

  • 10:30 - 11:00: Morning Break

  • 11:00 - 12:00: Timing Model

  • 12:00 - 12:30: Sampling Methods Part 1

  • 12:30 - 13:30: Lunch

  • 13:30 - 14:15: Sampling Methods Part 2

  • 14:15 - 15:00: Power Model

  • 15:00 - 15:30: Afternoon Break

  • 15:30 - 16:30: Thermal Model

  • 16:30 - 17:00: Wrap-up

Sample ESESC simulation run

by Ehsan K. Ardestani and Jose Renau - tags:

Once you have compiled ESESC, you have a working crafty run. This blog entry shows you how to use launcher to execute more benchmarks.

Launcher Binary

ESESC can run programs compiled for ARM without any modifications. You can compile your program, and ask ESESC to run it by pointing to the benchmark binary in esesc.conf:

benchName  = "myProgram  myArguments"

Nonetheless, we have facilitated the process of running the common benchmarks (for example applications from SPEC or PARSEC benchmark suite). ESESC is provided with an application called launcher. The launcher app provides a single point of entry to specify the benchmark:

benchname = "launcher -- stdin crafty.in --crafty"

will launch crafty. The following would run crafty and gcc (SPEC 2006) together:

benchname = "launcher -- stdin crafty.in --crafty -- gcc_06  166.i -o 166.s"

So we can simply run different benchmarks and mixture of them. Only one application with standard input can exist in the mixture each time. The standard input is always the first argument to specify, if applicable. Also in this case, we have to update esesc.conf to specify a dual core configuration.

Single core:

cpuemul[0]  = 'QEMUSectionCPU' 
cpusimu[0]  = "$(coreType)"

Dual core:

cpuemul[0:1]  = 'QEMUSectionCPU' 
cpusimu[0:1]  = "$(coreType)"

Set the directory

You should do the following steps:

Compile ESESC, and remember the ESESC binary location (E.g: ~/build/esesc-release/main/esesc)

Create a running directory

mkdir -p ~/build/esesc-release/run
cd ~/build/esesc-release/run

Get the input sets. We can not provide the SPEC input sets due to copyright. The PARSEC input sets are available at the following location:

wget http://masc.soe.ucsc.edu/esesc/resources/mtInputs.tar.bz2
tar xjvf mtInputs.tar.bz2

To save disk space, it may be good to share the input sets across all the esesc runs. For example create a common ~/projs/benchmarks directory, and expand the mtInputs there.

Create the simulation scripts

The configuration is created with the mt-scripts.rb provided by ESESC under the conf directory.

In this sample setup, we assume that you have cloned the ESESC repository in the ~/projs/esesc directory.

For benchmarks, you can specify

single_core
dual_core
quad_core
octo_core
parsec_dual_core
parsec_quad_core
parsec_octo_core
parsec_16_core
mix_octo_core

You also need to specify the esesc binary location, the sampling mode used, your email, the input set location, the configuration file, and the launcher location. A valid sample:

Start by making sure that you have a local esesc.conf configuration

cd ~/build/esesc-release/run
cp ~/projs/esesc/conf/*conf .

Test that everything is ready before building the scripts

mkdir exe
cp ~/projs/esesc/bins/crafty* exe
../main/esesc <exe/cracfty.in

If the default test simulation finished (less than 10 minutes of rrrr and rwrw), create the scripts to run esesc

~/projs/esesc/conf/scripts/mt-scripts.rb -b single_core \
--local -x ../main/esesc -m smartsmode -e foo@ucsc.edu \
-j ./input \
-c ./esesc.conf -u ~/projs/esesc/conf/launcher

or this other option if you use ~/projs/benchmarks for the input sets.

~/projs/esesc/conf/scripts/mt-scripts.rb -b single_core \
--local -x ../main/esesc -m smartsmode -e foo@ucsc.edu \
-j ~/projs/benchmark/input \
-c ./esesc.conf -u ~/projs/esesc/conf/launcher

The result of running the previous mt-script is a number of scripts to run each benchmark. For example:

leslie3d_smartsmode-run.sh
mcf_smartsmode-run.sh

Sample run

For example, you can run mcf by (WARNING!! the mtInputs DOES NOT include SPEC input sets because of copyright reasons. You should acquire a SPEC license):

./mcf_smartsmode-run.sh

This creates a simulation inside mcf_smartsmode directory. Once the simulation is finished, check the results with

cd mcf_smartsmode
~/projs/esesc/conf/scripts/report.pl -a

Sample ESESC compilation setup

by Ehsan K. Ardestani and Jose Renau - tags:

This blog entry is shows the easiest way to get ESESC running using the crafty benchmark from SPEC CPU 2000 (binary and modified input set included).

Compilation

In this sample setup, we assume that you have cloned the ESESC repository in the ~/projs/esesc directory.

So you can check the source code here:

cd ~/projs/esesc

Make sure that you have the required packages installed in your machine. Read the README.install for the main required packages.

ESESC can be build in Debug or Release mode. This sample is the Debug mode which is slower but produces many meaningful warnings. We strongly suggest to use the DEBUG mode while developing or trying to understand ESESC.

mkdir -p ~/build/esesc-debug
cd ~/build/esesc-debug
cmake -DCMAKE_BUILD_TYPE=Debug ~/projs/esesc
make 

Once you are ready to do some simulations (something more than 30 minutes with DEBUG), you should try to compile ESESC with a Release target (this is the default option). This is much faster but if there is any problem during simulation it will just crash without warnings. Use Debug if you see a crash and solve the problem before using Release again.

mkdir -p ~/build/esesc-release
cd ~/build/esesc-release
cmake ~/projs/esesc
make 

As you may noticed, ESESC takes a bit to compile (not as much as the Linux kernel). As usual, you can speed up the compilation with a multicore (-j4 spawns 4 compilation processes):

make esesc -j4

To run ESESC, it is recommended to create a run directory. Then copy the configuration files in esesc/conf to the run directory along with the benchmark executable. For example to run in Release mode (which is much faster than Debug mode):

cd ~/build/esesc-release
mkdir -p run/exe
cd run
cp ~/projs/esesc/bins/crafty* .
cp ~/projs/esesc/conf/*.conf .

You can run esesc with the default parameters:

../main/esesc <crafty.in

Once the simulation is finished, check the results with

~/projs/esesc/conf/scripts/report.pl -a

You can check esesc.conf to see what benchmark is being simulated (by default it runs crafty from SPEC benchmark suite), and what sampling parameters are used. shared.conf contains the architectural configuration for each core/component in the system. More on running different applications coming soon.

ESESC Beta Release

by Jose Renau, Ehsan K. Ardestani - tags: ,

We are ready to release ESESC in beta version. For the moment, we will provide the source code under request. Once it has been tested by several users outside UCSC, we plan to create a git repository.

ESESC provides a toolchain to evaluate performance, power, energy, and thermal trade-offs at architectural level.

Features

  • It is very fast (around 10MIPS with sampling)

  • Uses QEMU and supports user mode ARM ISA

  • Models OoO and InOrder cores in detail (ROB, Instruction Window, etc)

  • Supports configurable memory hierarchy, and on-chip memory controller

  • Supports multicore, homogeneous and heterogeneous configurations

  • Simulates multithreaded and multiprogram applications

  • Models power and temperature in addition to performance, and their interactions

Compared against SESC

ESESC is a significant evolution/improvement over sesc:

  • ESESC has ARM ISA, sesc had MIPS ISA.

  • ESESC can run unmodified Linux ARM binaries, MIPS required a custom toolchain.

  • ESESC uses QEMU for emulation, sesc had a custom emulator.

  • ESESC is integrated with McPat, sesc had an older Wattch model.

  • ESESC has a brand new memory hierarchy, sesc had a more complex coherence.

  • ESESC has improved thermal modeling, sesc had HotSpot

  • ESESC has many types of sampling (statistical, smarts, simpoint), sesc had none.

  • ESESC is actively maintained, sesc is no longer mantained.

  • ESESC has many bugs solved.

Download

ESESC is currently is in its beta state, and the stable source code will be released and announced in this page soon. If you would like to try the beta version, please send us an email.

Sample ESESC Blog post

by Jose Renau - tags:

This website contains blog posts about ESESC(Enhanced Super ESCalar). The idea is that papers that use ESESC or users that have insights about how to use ESESC can post a blog entry.

To post an entry, you should send me the contents by email to renau@soe.ucsc.edu.

This blog uses jekyll but to format the text you should use maruku. The most important are the following:

## for sections

## for sections

Sample code, just indent 4 spaces:

for (int i=0;i<100;i++)
   printf("Hello\n");
This is a sample link to the [masc group]
[masc group]: http://masc.soe.ucsc.edu
<table class="center1"> <thead> <tr> <th>Core</th> <th>copy</th> <th>scale</th> <th>add</th> <th>triad</th> </tr> </thead> <tbody> <tr> <td class="left">540M</td> <td class="left">6197</td> <td class="left">6344</td> <td class="left">6787</td> <td class="left">6751</td> </tr><tr> <td class="left">OMAP4</td> <td class="left">306</td> <td class="left">291</td> <td class="left">426</td> <td class="left">426</td> </tr><tr> <td class="left">6172</td> <td class="left">2970</td> <td class="left">2899</td> <td class="left">3008</td> <td class="left">2956</td> </tr> </tbody> </table>
Corecopyscaleaddtriad
540M 6197 6344 6787 6751
OMAP4 306 291 426 426
6172 2970 2899 3008 2956
A list with just bullets
* foo
* bar
  • foo

  • bar

archive