stats and configuration - githubzsim.csail.mit.edu/tutorial/slides/core.pdfoutline zsim core...

120
STATS AND CONFIGURATION ZSim Tutorial – MICRO 2015 Core Models Po-An Tsai

Upload: others

Post on 07-Aug-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

STATS AND CONFIGURATION

ZSim Tutorial – MICRO 2015

Core Models

Po-An Tsai

Page 2: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Outline2

Page 3: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Outline

ZSim core simulation techniques

2

Page 4: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Outline

ZSim core simulation techniques

ZSim core structure

Simple IPC 1 core

Timing core

OOO core

2

Core

I1D I1I

Page 5: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Outline

ZSim core simulation techniques

ZSim core structure

Simple IPC 1 core

Timing core

OOO core

Coding examples with demo

Branch predictor

Westmere to Silvermont

2

Core

I1D I1I

Page 6: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Techniques3

Page 7: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Techniques

ZSim simulates the system using Pin

Leverages dynamic binary translation

3

Page 8: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Techniques

ZSim simulates the system using Pin

Leverages dynamic binary translation

ZSim mainly uses 4 types of analysis routine

Basic block

Load and Store

Branch

to cover the simulated program

3

Page 9: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique4

Page 10: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

4

Page 11: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

4

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Page 12: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

5

Page 13: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

1. Simulate core activities with a BBL descriptor that

contains most of the static information

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

5

Page 14: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

1. Simulate core activities with a BBL descriptor that

contains most of the static information

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

5

Page 15: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

1. Simulate core activities with a BBL descriptor that

contains most of the static information

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

5

Decode BBL into

BBL descriptor

Page 16: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

1. Simulate core activities with a BBL descriptor that

contains most of the static information

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

BblDescriptor:

numInstructions = 4

numBytes = 4

uop[]

5

Decode BBL into

BBL descriptor

Page 17: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

A basic block (BBL) from Pin

1. Simulate core activities with a BBL descriptor that

contains most of the static information

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

BblDescriptor:

numInstructions = 4

numBytes = 4

uop[]

5

Decode BBL into

BBL descriptorBasicBlock(BblDescriptor)

Page 18: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique6

Decode x86 instructions into uops

With different latencies, src/dst pair, function unit ports

Page 19: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique7

Page 20: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

2. Simulate memory system operations with addresses

7

Page 21: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

2. Simulate memory system operations with addresses

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

BasicBlock(BblDescriptor)

ja 40530a

7

Page 22: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

2. Simulate memory system operations with addresses

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

BasicBlock(BblDescriptor)

ja 40530a

7

Load(%rbp)

Store(%rbp)

Page 23: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

2. Simulate memory system operations with addresses

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

BasicBlock(BblDescriptor)

ja 40530a

Load(Address addr) {

L1D->load(addr);

}

Store(Address addr) {

L1D->Store(addr);

}

7

Load(%rbp)

Store(%rbp)

Page 24: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique8

Page 25: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

Instruction-driven core activity (basic block) simulation

Simulates multiple stages for single instruction at once

Each stage maintains a separate clock

8

Page 26: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

Instruction-driven core activity (basic block) simulation

Simulates multiple stages for single instruction at once

Each stage maintains a separate clock

BasicBlock(BblDescriptor) {

foreach uop {

simulateFetch(uop);

simulateDecode(uop);

simulateIssue(uop);

simulateExecute(uop);

simulateCommit(uop);

}

}

8

Page 27: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique

Instruction-driven core activity (basic block) simulation

Simulates multiple stages for single instruction at once

Each stage maintains a separate clock

BasicBlock(BblDescriptor) {

foreach uop {

simulateFetch(uop);

simulateDecode(uop);

simulateIssue(uop);

simulateExecute(uop);

simulateCommit(uop);

}

}

simulateIssue(uop) {

addUopToRob(curRobCycle, uop);

if(rob.isFull()){

nextRobAvailCycle = rob.advance();

}

}

8

Page 28: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Page 29: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Request

from core

Page 30: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Cache

Tag Acc

@50

Request

from core

Page 31: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Cache

Tag Acc

@50

Cache

Miss

WB

@60

Request

from core

Page 32: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Cache

Tag Acc

@50

Cache

Miss

WB

@60

Mem

Data

Read

@60

Request

from core

Page 33: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Cache

Tag Acc

@50

Cache

Miss

WB

@60

Mem

Data

Read

@60

Cache

Data

Write

@160

Request

from core

Page 34: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Cache

Tag Acc

@50

Cache

Miss

WB

@60

Mem

Data

Read

@60

Cache

Data

Write

@160

Request

from core

Response

to core

Page 35: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Core Simulation Technique9

Event-driven uncore activity simulation

Cache

Tag Acc

@50

Cache

Miss

WB

@60

Mem

Data

Read

@60

Cache

Data

Write

@160

Request

from core

Response

to core

@200Weave phase

Page 36: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

General Core Structure10

Page 37: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

General Core Structure

ZSim simulates a core with 4 functions using Pin’s APIs

BblFunc

LoadFunc

StoreFunc

BranchFunc

10

Page 38: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

General Core Structure

ZSim simulates a core with 4 functions using Pin’s APIs

BblFunc

LoadFunc

StoreFunc

BranchFunc

Current supported core type

Simple IPC1 core

Timing core

OOO core (Westmere-like)

10

Page 39: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simple IPC1 Core11

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Page 40: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simple IPC1 Core11

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Page 41: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simple IPC1 Core11

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Page 42: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simple IPC1 Core11

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Page 43: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simple IPC1 Core11

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Page 44: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simple IPC1 Core11

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

BasicBlock(BblDescriptor)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Page 45: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simple IPC1 Core11

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

BasicBlock(BblDescriptor)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Current cycle += 4

Page 46: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Page 47: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Page 48: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Page 49: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Tag

Acc

Miss

Write

back

Mem

Data

Read

Data

Write

Request

from core

Response

to core

Page 50: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Tag

Acc

Miss

Write

back

Mem

Data

Read

Data

Write

Request

from core

Response

to core

Page 51: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Tag

Acc

Miss

Write

back

Mem

Data

Read

Data

Write

Request

from core

Response

to core

Page 52: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Tag

Acc

Miss

Write

back

Mem

Data

Read

Data

Write

Request

from core

Response

to core

Page 53: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Tag

Acc

Data

Write

Request

from core

Tag

Acc

Miss

Write

back

Mem

Data

Read

Data

Write

Request

from core

Response

to core

Page 54: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

BasicBlock(BblDescriptor)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Tag

Acc

Data

Write

Request

from core

Tag

Acc

Miss

Write

back

Mem

Data

Read

Data

Write

Request

from core

Response

to core

Page 55: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Timing Core12

IPC1 Core

I1D I1I

Current cycle = 0

mov (%rbp),%rcx

Load(%rbp)

add %rax,%rbx

mov %rdx,(%rbp)

Store(%rbp)

BasicBlock(BblDescriptor)

ja 40530a

Current cycle = l1d->load(curCycle)

Current cycle = l1d->store(curCycle)

Current cycle += 4

Tag

Acc

Data

Write

Request

from core

Tag

Acc

Miss

Write

back

Mem

Data

Read

Data

Write

Request

from core

Response

to core

Page 56: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

OOO Core - BBL13

Simulate all stages at once

Load A

Exec

Store A

Exec

Page 57: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL13

Simulate all stages at once

Load A

Exec

Store A

Exec

Decode Issue OOO

Execute

Commit

Page 58: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL14

Simulate all stages at once

Load A

Exec

Store A

Exec

Decode Issue OOO

Execute

Commit

Page 59: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Load AExec

Page 60: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Load AExec

Page 61: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Load AExec

Page 62: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Load AExec

Page 63: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Load AExec

Page 64: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Exec

Page 65: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Exec

Page 66: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Exec

Page 67: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Exec

Page 68: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Exec

Page 69: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL15

Simulate all stages at once

Store A

Exec

Decode Issue OOO

Execute

Commit

Page 70: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL16

Simulate all stages at once

Load A

Decode Issue OOO

Execute

Commit

Page 71: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL17

Simulate all stages at once

Fetch

wrong ins

Miss prediction

Fetch

whole bbl

Ins Fetch

Load A

Adjust

Fetch clock

Decode Issue OOO

Execute

Commit

Fetch cycle

Page 72: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL18

Simulate all stages at once

Fetch

wrong ins

Miss prediction

Fetch

whole bbl

Ins Fetch

Load A

Adjust

Fetch clock

Decode Issue OOO

Execute

Commit

uop Queue

Decode cycle

Adjust

Decode clock

Check next

available

cycle

Page 73: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL19

Simulate all stages at once

Fetch

wrong ins

Miss prediction

Fetch

whole bbl

Ins Fetch

Load A

Adjust

Fetch clock

Decode Issue OOO

Execute

Commit

uop Queue

Dispatch cycle

Adjust

Decode clock

Check next

available

cycle

Check src

available

cycle

Reg Scoreboard

Issue width

RegFile width

Adjust

issue clock

Check next

avail cycle

Rob

Page 74: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL20

Simulate all stages at once

Fetch

wrong ins

Miss prediction

Fetch

whole bbl

Ins Fetch

Load A

Adjust

Fetch clock

Decode Issue OOO

Execute

Commit

uop Queue

Ins Window

Commit cycle

Adjust

Decode clock

Check next

available

cycleSchedule

uop in the

next cycle

that needed

ports avail

Adjust

issue clock

LS Unit*

Issue

Load/Store

Check src

available

cycle

Reg Scoreboard

Issue width

RegFile width

Adjust

issue clock

Check next

avail cycle

Rob

*Only for load/store

Page 75: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Fetch

OOO Core - BBL21

Simulate all stages at once

Fetch

wrong ins

Miss prediction

Fetch

whole bbl

Ins Fetch

Load A

Adjust

Fetch clock

Decode Issue OOO

Execute

Commit

uop Queue

Adjust

Decode clock

Check next

available

cycle

Adjust

issue clock

Check src

available

cycle

Reg Scoreboard

Issue width

RegFile width

Adjust

issue clock

Check next

avail cycle

Rob

Set dst

available

cycle

Reg Scoreboard

Retire uop

considering

rob width

Rob

Adjust

retire clock

Ins Window

Schedule

uop in the

next cycle

that needed

ports avail

LS Unit*

Issue

Load/Store

Page 76: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

OOO Core – Load/Store22

Simulate MLP

Load A

Load B

Page 77: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

OOO Core – Load/Store22

Issue A

@ 30

Cache

Hit

@ 50

Dispatch

@ 40

Response

@ 70

Simulate MLP

Load A

Load B

Page 78: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

OOO Core – Load/Store23

Issue A

@ 30

Cache

Hit

@ 50

Dispatch

@ 40

Response

@ 70

Issue B

@ 50

Cache

Miss

@ 70

Dispatch

@ 60

Response

@ 110

Mem

Read

@ 90

Mem

WB

@ 110

Cache

Write

@ 100

Simulate MLP

Load A

Load B

Page 79: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

OOO Core – Load/Store23

Issue A

@ 30

Cache

Hit

@ 50

Dispatch

@ 40

Response

@ 70

Issue B

@ 50

Cache

Miss

@ 70

Dispatch

@ 60

Response

@ 110

Mem

Read

@ 90

Mem

WB

@ 110

Cache

Write

@ 100

Simulate MLP

Load A

Load B

In weave phase, request B

will not be delayed due to

contentions for A

Page 80: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simulation Speed for Different Core Type

SPECCPU 2006 suite

24

Page 81: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Simulation Speed for Different Core Type

SPECCPU 2006 suite

24

~3X difference between

IPC1 and OOO-C in Hmean

Page 82: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Not Modeled Core Behaviors25

Page 83: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Not Modeled Core Behaviors

Wrong path execution

Hard to simulate for Pin

Okay to skip for Westmere

25

Page 84: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Not Modeled Core Behaviors

Wrong path execution

Hard to simulate for Pin

Okay to skip for Westmere

Fine-grained message-passing

Need significant changes

25

Page 85: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Not Modeled Core Behaviors

Wrong path execution

Hard to simulate for Pin

Okay to skip for Westmere

Fine-grained message-passing

Need significant changes

TLBs and SMT

Not supported yet

25

Page 86: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Coding Examples26

Page 87: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Coding Examples

Implement a branch predictor for OOO core

26

Page 88: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Coding Examples

Implement a branch predictor for OOO core

Change OOO core type

From Westmere to Silvermont

26

Page 89: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors27

Page 90: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

27

Page 91: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

27

Page 92: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

27

Page 93: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

Implement the predict method

27

Page 94: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

Implement the predict method

public:

// Predicts and updates; returns false if mispredicted

inline bool predict(Address branchPc, bool taken) {

27

Page 95: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

Implement the predict method

public:

// Predicts and updates; returns false if mispredicted

inline bool predict(Address branchPc, bool taken) {

bool prediction = (taken == lastSeen);

27

Page 96: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

Implement the predict method

public:

// Predicts and updates; returns false if mispredicted

inline bool predict(Address branchPc, bool taken) {

bool prediction = (taken == lastSeen);

lastSeen = taken;

27

Page 97: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

Implement the predict method

public:

// Predicts and updates; returns false if mispredicted

inline bool predict(Address branchPc, bool taken) {

bool prediction = (taken == lastSeen);

lastSeen = taken;

return prediction; // always predict taken

}

27

Page 98: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

Implement the predict method

public:

// Predicts and updates; returns false if mispredicted

inline bool predict(Address branchPc, bool taken) {

bool prediction = (taken == lastSeen);

lastSeen = taken;

return prediction; // always predict taken

}

Replace the branch predictor in ooo_core.h

27

Page 99: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Implement Branch Predictors

Have a new branch predictor class

class GShareBranchPredictor {

private:

bool lastSeen;

……

}

Implement the predict method

public:

// Predicts and updates; returns false if mispredicted

inline bool predict(Address branchPc, bool taken) {

bool prediction = (taken == lastSeen);

lastSeen = taken;

return prediction; // always predict taken

}

Replace the branch predictor in ooo_core.h

//BranchPredictorPAg<11, 18, 14> branchPred;

GSharePredictor branchPred;

27

Page 100: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Demo28

Page 101: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Different OOO Micro-architecture29

Page 102: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Different OOO Micro-architecture

The original zsim assumes Westmere OOO core, but what

if I want to simulate a Silvermont/Haswell OOO core?

29

Page 103: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Different OOO Micro-architecture

The original zsim assumes Westmere OOO core, but what

if I want to simulate a Silvermont/Haswell OOO core?

Step 1: obtain the important ooo core parameters

29

Page 104: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Different OOO Micro-architecture

The original zsim assumes Westmere OOO core, but what

if I want to simulate a Silvermont/Haswell OOO core?

Step 1: obtain the important ooo core parameters

Step 2: change the core parameters in ooo_core.h/cpp

29

Page 105: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Different OOO Micro-architecture

The original zsim assumes Westmere OOO core, but what

if I want to simulate a Silvermont/Haswell OOO core?

Step 1: obtain the important ooo core parameters

Step 2: change the core parameters in ooo_core.h/cpp

Step 3: verify it against real system

29

Page 106: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Obtain Important Core Parameters

[1] http://www.realworldtech.com/nehalem/

[2] http://www.realworldtech.com/silvermont/

Westmere[1] Silvermont[2]

Issue width 4 2

F/D/I/E stages 1/4/7/13 1/3/5/8

Fetch width 16B 8B

RF read width 3 2

ROB size 128 32

Ins window 1K * 36 1K * 16

Issue queue 28 8

30

Page 107: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Change OOO Core Parameters31

Page 108: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Change OOO Core Parameters

Change sizes of hardware structures in ooo_core.h

31

Page 109: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Change OOO Core Parameters

Change sizes of hardware structures in ooo_core.h

CycleQueue<28> uopQueue

-> <8>

ReorderBuffer<128, 4> rob

-> <32, 2>

31

Page 110: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Change OOO Core Parameters

Change sizes of hardware structures in ooo_core.h

CycleQueue<28> uopQueue

-> <8>

ReorderBuffer<128, 4> rob

-> <32, 2>

Change the ooo core parameter in ooo_core.cpp

31

Page 111: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Change OOO Core Parameters

Change sizes of hardware structures in ooo_core.h

CycleQueue<28> uopQueue

-> <8>

ReorderBuffer<128, 4> rob

-> <32, 2>

Change the ooo core parameter in ooo_core.cpp

#define FETCH_STAGE 1 -> 1

#define DECODE_STAGE 4 -> 3

#define ISSUE_STAGE 7 -> 5

#define DISPATCH_STAGE 13 -> 8

#define FETCH_BYTES_PER_CYCLE 16 -> 8

#define ISSUES_PER_CYCLE 4 -> 2

#define RF_READS_PER_CYCLE 3 -> 2

31

Page 112: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Demo32

Page 113: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Verify It Against Real System33

IPC traces for Westmere and Silvermont

Westmere (6% performance difference)

Silvermont (9% performance difference)

Page 114: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Summary34

Page 115: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Summary

ZSim uses instruction-driven simulation for core activities

and event-driven simulation for uncore activities

34

Page 116: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Summary

ZSim uses instruction-driven simulation for core activities and

event-driven simulation for uncore activities

ZSim currently supports 3 types of core

Simple IPC1 core (simple_core.h)

Timing core (timing_core.h)

Westmere-like OOO core (ooo_core.h)

34

Page 117: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Summary

ZSim uses instruction-driven simulation for core activities and

event-driven simulation for uncore activities

ZSim currently supports 3 types of core

Simple IPC1 core (simple_core.h)

Timing core (timing_core.h)

Westmere-like OOO core (ooo_core.h)

Extending zsim core model is straightforward

Modify 4 basic analysis routines

Substitute the hardware structure with your implementation

Change the parameters in OOO

34

Page 118: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Hacking Advice

As common Pin programming, functions in the core are

very frequently called in zsim

You should be aware of performance when coding

It’s the main reason why zsim statically allocates hardware

structures and set ooo parameters

35

Page 119: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Thank you!Any questions?

36

Page 120: STATS AND CONFIGURATION - GitHubzsim.csail.mit.edu/tutorial/slides/core.pdfOutline ZSim core simulation techniques ZSim core structure Simple IPC 1 core Timing core OOO core 2 Core

Break / Q&ATry zsim now!

https://zsim.csail.mit.edu

37