Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A detailed michroarchitectural x86 simulator
C++ C Python Makefile Puppet Perl
branch: master

Fix fast-forward barrier bug.

With multiple processes, we were cleaning the barrier counter before
everyone had left, resulting in deadlock. Added a simple epoch counter
so that doesn't happen. And a test to catch it.

TESTED=integration

Change-Id: I16a6e63a3a6eae2aa5e9396c569c00ec0e922da6
latest commit 2068c585b9
@s-kanev authored
Failed to load latest commit information.
DRAMSim2 @ e0849ce Added DRAMSim2 as a git submodule
ZCOMPS-MC
ZCOMPS-bpred Magic branch predictor with a predefined hit rate.
ZCOMPS-btb
ZCOMPS-coherence
ZCOMPS-dram Initial split of global clock to local ones.
ZCOMPS-dvfs
ZCOMPS-fusion
ZCOMPS-memdep Initial split of global clock to local ones.
ZCOMPS-prefetch Fixed typo in comment
ZCOMPS-ras
ZCOMPS-repeater Fix DFS frequency caluclation.
ZCORE-power
ZPIPE-alloc
ZPIPE-commit
ZPIPE-decode Cherry-pick IPC=1 core from old branches.
ZPIPE-exec
ZPIPE-fetch
config Add a magic ALU that triggers on fake NOPs.
doc
mcpat
mem-repeater @ 1955e73 Updating mem-repeater submodule with fix for compile issues.
pintool Fix fast-forward barrier bug.
scripts Fix fast-forward barrier bug.
tests
.clang-format Test clang-format on pintool/*
.gitignore
.gitmodules Minor merge corrections from big coherency merge
COPYING
INSTALL.zesto Documentation update.
Makefile
README.md
README.zesto Documentation update.
WARRANTY
core-set.h
eval.c Clean up ancient libc duplicates.
eval.h
helix.h Implement two flush variants
host.h More legacy cleanups.
interface.h Don't lock memory_lock around oracle.
machine.c Add a magic ALU that triggers on fake NOPs.
machine.def
machine.h
make_def_lists.pl
memory.cpp
memory.h Don't lock memory_lock around oracle.
misc.c
misc.h ztrace doesn't belong in zesto-opts.cpp.
pin.h
regs.h Per-core ztrace file.
sim-main.c
sim-slave.cpp
sim.h Kill zesto-opts.
slave.cpp
slices.cpp Kill zesto-opts.
spec_pin.con Merging trunk changes to atom branch.
spec_pinpoints.con
stat_database.h Replacement for the SimpleScalar stats library. This does not yet inc…
stats.c Tweaks to eliminate build warnings ...
stats.h
synchronization.h Add a simple ROI API and an example test.
thread.h Use random_r instead of random
valcheck.h importing zesto-prerelease-v0.2b
version.h
x86flow.def
zesto-MC.cpp
zesto-MC.h
zesto-alloc.cpp
zesto-alloc.h Tear out non-confuse configuration.
zesto-bpred.cpp
zesto-bpred.h Add core parameter to bpred_dir_t
zesto-cache.cpp
zesto-cache.h
zesto-coherence.cpp Kill zesto-opts.
zesto-coherence.h Minor fixes to const coherence.
zesto-commit.cpp Kill zesto-opts.
zesto-commit.h Tear out non-confuse configuration.
zesto-config-params.cpp
zesto-config.cpp
zesto-config.h Tear out non-confuse configuration.
zesto-core.cpp Don't lock memory_lock around oracle.
zesto-core.h Don't lock memory_lock around oracle.
zesto-decode.cpp
zesto-decode.h Tear out non-confuse configuration.
zesto-dram.cpp Kill zesto-opts.
zesto-dram.h Tear out non-confuse configuration.
zesto-dvfs.cpp Add a sample DVFS policy
zesto-dvfs.h
zesto-exec.cpp Kill zesto-opts.
zesto-exec.h Tear out non-confuse configuration.
zesto-fetch.cpp Kill zesto-opts.
zesto-fetch.h Tear out non-confuse configuration.
zesto-memdep.cpp Kill zesto-opts.
zesto-memdep.h Initial split of global clock to local ones.
zesto-noc.cpp
zesto-noc.h
zesto-oracle.cpp
zesto-oracle.h
zesto-power.cpp
zesto-power.h
zesto-prefetch.cpp Kill zesto-opts.
zesto-prefetch.h
zesto-repeater.cpp Tear out non-confuse configuration.
zesto-repeater.h Tear out non-confuse configuration.
zesto-structs.h Tear out non-confuse configuration.
zesto-uncore.cpp Kill zesto-opts.
zesto-uncore.h Tear out non-confuse configuration.
ztrace.cpp ztrace doesn't belong in zesto-opts.cpp.
ztrace.h ztrace doesn't belong in zesto-opts.cpp.

README.md

XIOSim

XIOSim is a detailed user-mode microarchitectural simulator for the x86 architecture. It has detailed models for in-order (Atom-like) and out-of-order (Nehalem-like) cores and tightly-integrated power models. XIOSim supports multiprogram and multithreaded execution, regions-of-interest (including SimPoints). It runs at 10s KIPS per simulated core and uses cores on the simulation host to speed up muliticore simulation (fastest runs use 2x the number of simulated cores).

XIOSim builds up on and integrates a significant amount of others' work:

  • The out-of-order performance model from Zesto.
  • The Pin binary instrumentation engine.
  • The power models from McPAT.
  • The DRAM models from DRAMSim2.

Dependences

  • Pin kit version 2.14+ Download
  • Recent version of GCC including C++11 support (4.7+ is ok)
  • Boost 1.54+
  • libconfuse
  • (integration tests only) Python and py.test

To install dependent libraries on an Ubuntu system:

sudo apt-get install libboost-all-dev libconfuse-dev:i386

Try it out

export PIN_ROOT=</path/to/your/pin/installation>
cd pintool
make
./run.sh

Build status

Build Status

Configuration and flags

Most simulated parameters are contained in a configuration file. Feel free to browse a Nehalem-based machine to get a feel for them.

Simulated applications are specified in their own configuration file. Check out how that looks. You can add as many as you want for a single multiprogram simulation.

A few parameters (mostly related to regions-of-interest) are passed as command-line flags (between the -t and -s switches). For example:

-ppfile test.pp     # to use a PinPoints file.
-skip 10000         # to fast-forward the first 10,000 instructions.
-length 10000       # to only simmulate 10,000 instructions.
-parsec             # to properly use the Parsec suite region-of-interest hooks (ROI).

ISA support

The simulator supports user-mode, 32-bit instructions. Some basic SSE instructions are supported for doing floating point, but by no means the whole extension set (a warning is printed if more than 2% instructions are unsupported. In that case, ping Svilen to add your fancy instructions). Support for 64-bit mode, SSEx and/or AVX is planned.

Something went wrong with that request. Please try again.