Bungee Jumps: Accelerating Indirect Branches Through - - PowerPoint PPT Presentation

bungee jumps accelerating indirect branches through
SMART_READER_LITE
LIVE PREVIEW

Bungee Jumps: Accelerating Indirect Branches Through - - PowerPoint PPT Presentation

Bungee Jumps: Accelerating Indirect Branches Through Hardware/Software Co-Design Daniel S. McFarlin Craig Zilles 1 Indirect Branches Are Increasingly Predictable 20 Nehalem Sandy Bridge Haswell TAGE


slide-1
SLIDE 1

Bungee Jumps: Accelerating Indirect Branches Through Hardware/Software Co-Design

Daniel ¡S. ¡McFarlin Craig ¡Zilles

1

slide-2
SLIDE 2

Indirect ¡Branches ¡Are ¡Increasingly ¡Predictable

2

B e t t e r

5 10 15 20

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Avg

Mispredicts/Kilo Instrs

Nehalem Sandy Bridge Haswell TAGE

slide-3
SLIDE 3

Indirect ¡Branches ¡Are ¡Increasingly ¡Predictable

3

B e t t e r

5 10 15 20

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Avg

Mispredicts/Kilo Instrs

Nehalem Sandy Bridge Haswell TAGE

0.25 0.5 0.75 1 meteor raytrace btree fannkuch fasta richards nqueens revcomp float specnorm regexdna knuke mandelbrot Geomean

predictability bias

And ¡Unbiased

slide-4
SLIDE 4

4

In-­‑Order ¡Machines ¡Specialize ¡Based ¡on ¡Branch ¡Bias ¡or ¡ Eliminate ¡Branch ¡PredicCon ¡Altogether

Shape area() area() area()

VTable

60 30 10

slide-5
SLIDE 5

4

In-­‑Order ¡Machines ¡Specialize ¡Based ¡on ¡Branch ¡Bias ¡or ¡ Eliminate ¡Branch ¡PredicCon ¡Altogether

Shape area() area() area()

VTable

60 30 10

area() area() area()

if s->type == Circle else if s->type == Rect else if s->type == Square else

R C P O area()

slide-6
SLIDE 6

4

In-­‑Order ¡Machines ¡Specialize ¡Based ¡on ¡Branch ¡Bias ¡or ¡ Eliminate ¡Branch ¡PredicCon ¡Altogether

Shape area() area() area()

VTable

60 30 10

area() area() area()

if s->type == Circle else if s->type == Rect else if s->type == Square else

R C P O area()

p0 = (obj is type B); p1 = (obj is type C) p2 = (obj is type D) p0: r = B::func( ); p1: r = C::func( ); p2: r = D::func( ); if( !(p0 | p1 | p2)) r = obj->func( );

Predication

slide-7
SLIDE 7

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-8
SLIDE 8

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-9
SLIDE 9

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-10
SLIDE 10

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-11
SLIDE 11

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-12
SLIDE 12

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-13
SLIDE 13

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-14
SLIDE 14

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-15
SLIDE 15

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-16
SLIDE 16

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-17
SLIDE 17

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-18
SLIDE 18

Challenge: ¡Non-­‑Reconvergence ¡& ¡Large ¡ Number ¡of ¡Targets

5

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 ld r10, [rcx*4+0x42] cmp edi, r10 jnz L C ld edx, [rsi*4+0x7d] cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] cmp edi, edx jz J E ld edx, [rcx*8+0x10] test edx, edx jz K B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 jnz H A ld r9, [rax*8+0x94] jmp r9

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

7 11 99 1 19 5 95 96 4 99 1 1 99

sjeng: f_in_check

Text

slide-19
SLIDE 19

Missed ¡OpCmizaCon ¡Opportunity: ¡Next ¡Branch ¡Bias

6

80 85 90 95 100

gcc95 li m88ksim perl95 eon gap gcc2k perl2k gcc2k6 h264ref

  • mentpp

perl2k6 povray sjeng xalanc richards Geomean

Branch Bias

slide-20
SLIDE 20

Missed ¡OpCmizaCon ¡Opportunity: ¡Next ¡Branch ¡Bias

6

80 85 90 95 100

gcc95 li m88ksim perl95 eon gap gcc2k perl2k gcc2k6 h264ref

  • mentpp

perl2k6 povray sjeng xalanc richards Geomean

Branch Bias 80 85 90 95 100

bench btree fannkuch fasta fastaredux knuke mandelbrot nbody regexdna revcomp run specnorm Geomean

Branch Bias

slide-21
SLIDE 21

Missed ¡OpCmizaCon ¡Opportunity: ¡Next ¡Branch ¡Bias

6

80 85 90 95 100

gcc95 li m88ksim perl95 eon gap gcc2k perl2k gcc2k6 h264ref

  • mentpp

perl2k6 povray sjeng xalanc richards Geomean

Branch Bias 80 85 90 95 100

bench btree fannkuch fasta fastaredux knuke mandelbrot nbody regexdna revcomp run specnorm Geomean

Branch Bias 80 85 90 95 100

btree fannkuch fasta float knuke mandelbrot meteor nbody queens raytrace regexdna revcomp richards specnorm Geomean

Branch Bias

slide-22
SLIDE 22

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-23
SLIDE 23

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-24
SLIDE 24

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-25
SLIDE 25

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-26
SLIDE 26

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-27
SLIDE 27

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-28
SLIDE 28

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-29
SLIDE 29

ExploiCng ¡Predictability: ¡Benefit ¡from ¡Next ¡Branch ¡Bias

7

G ld r8, [rip+0x5e] ld edi, [rsi*4+0x42] movsxd rcx, r8 assert r9, G ld r10, [rcx*4+0x42] cmp edi, r10 jnz L Hoist From C ld edx, [rsi*4+0x7d] assert r9, C cmp edx, 0x6 jz I D ld ecx, [rip+0x58] ld esi, [rip+0x81] lea edi, [rsi+rcx*1] assert r9, D cmp edi, edx jz J E ld edx, [rcx*8+0x10] assert r9, E test edx, edx jz K Hoist From Hoist From Hoist From B ld r8, [rip+0x5b] ld edi, [rsi*4+0x92] movsxd rcx, r8 ld r10, [rcx*4+0x92] cmp edi, r10 assert r9, B jnz H Hoist From A ld r9, [rax*8+0x94] pred-indirect-jump

25 24 24 14

F ld r8, [rip+0x39] ld edi, [rsi*4+0x46] movsxd rcx, r8 assert r9, F ld r10, [rcx*4+0x46] cmp edi, r10 jnz M

11 99 1 19 5 95 96 4 99 1 1 99

slide-30
SLIDE 30

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

slide-31
SLIDE 31

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

slide-32
SLIDE 32

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

... 0: r0 = load[a] predict ... 2: resolve r3, A A B C D 1: r2 = r0 + r1 2*: r3 = load[r2]

slide-33
SLIDE 33

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

... 0: r0 = load[a] predict ... 2: resolve r3, A A B C D 1: r2 = r0 + r1 2*: r3 = load[r2]

slide-34
SLIDE 34

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

... 0: r0 = load[a] predict ... 2: resolve r3, A A B C D 1: r2 = r0 + r1 2*: r3 = load[r2]

slide-35
SLIDE 35

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

... 0: r0 = load[a] predict ... 2: resolve r3, A A B C D 1: r2 = r0 + r1 2*: r3 = load[r2]

slide-36
SLIDE 36

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

... 0: r0 = load[a] predict ... 2: resolve r3, A A B C D 1: r2 = r0 + r1 2*: r3 = load[r2]

M N O P ... 0: r0 = load[a] predict ...

Invalid Target: M

slide-37
SLIDE 37

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

... 0: r0 = load[a] predict ... 2: resolve r3, A A B C D 1: r2 = r0 + r1 2*: r3 = load[r2]

M N O P ... 0: r0 = load[a] predict ...

Invalid Target: M

slide-38
SLIDE 38

Challenge: ¡Invalid ¡Predicted ¡Target ¡Address

8

... 0: r0 = load[a] 1: r2 = r0 + r1 2: jmp [r2] Prediction Point A B C D

Valid Targets: {A, G} Predict A

... 0: r0 = load[a] predict ... 2: resolve r3, A A B C D 1: r2 = r0 + r1 2*: r3 = load[r2]

M N O P ... 0: r0 = load[a] predict ...

Invalid Target: M

slide-39
SLIDE 39

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

slide-40
SLIDE 40

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

slide-41
SLIDE 41

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

slide-42
SLIDE 42

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2]

slide-43
SLIDE 43

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2]

slide-44
SLIDE 44

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2]

slide-45
SLIDE 45

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

slide-46
SLIDE 46

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

Invalid Target: M

M N O P Fails 0x0 Check

slide-47
SLIDE 47

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

Invalid Target: M

M N O P Fails 0x0 Check

slide-48
SLIDE 48

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

Invalid Target: M

M N O P Fails 0x0 Check

slide-49
SLIDE 49

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

Invalid Target: M

M N O P Fails 0x0 Check

slide-50
SLIDE 50

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

Invalid Target: M

M N O P Fails 0x0 Check r2 = r0 + r1 jmp [r2] R e d i r e c t F e t c h N

  • P

r e d i c t : S t a l l F e t c h

slide-51
SLIDE 51

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

Invalid Target: M

M N O P Fails 0x0 Check r2 = r0 + r1 jmp [r2] R e d i r e c t F e t c h N

  • P

r e d i c t : S t a l l F e t c h

slide-52
SLIDE 52

SoluCon: ¡Landing ¡Pad

9

... 0: r0 = load[a] predict 0x0 2: resolve r3, A ... A B C D marker 0x0 1: r2 = r0 + r1 2*: r3 = load[r2]

... 0: r0 = load[a] predict 0x0 ... r2 = r0 + r1 jmp [r2] ... 0: r0 = load[a] predict 0x0 ... : P r e d i c t i

  • n

P

  • i

n t r2 = r0 + r1 jmp [r2]

Invalid Target: M

M N O P Fails 0x0 Check r2 = r0 + r1 jmp [r2] R e d i r e c t F e t c h N

  • P

r e d i c t : S t a l l F e t c h

Necessitates ¡some ¡changes ¡to ¡ indirect ¡call ¡/return ¡handling

slide-53
SLIDE 53

Recovery ¡From ¡MispredicCon ¡

10

slide-54
SLIDE 54

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

slide-55
SLIDE 55

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

slide-56
SLIDE 56

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

slide-57
SLIDE 57

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

slide-58
SLIDE 58

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

slide-59
SLIDE 59

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

slide-60
SLIDE 60

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

undo B undo C RC: undo A undo D (4) Fetch Recovery Code (5) r3 value from Resteer r3: E ... jmp r3 F ( 6 ) F e t c h C

  • r

r e c t P a t h s t a r t i n g a t r 3

slide-61
SLIDE 61

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

undo B undo C RC: undo A undo D (4) Fetch Recovery Code (5) r3 value from Resteer r3: E ... jmp r3 F ( 6 ) F e t c h C

  • r

r e c t P a t h s t a r t i n g a t r 3

slide-62
SLIDE 62

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

undo B undo C RC: undo A undo D (4) Fetch Recovery Code (5) r3 value from Resteer r3: E ... jmp r3 F ( 6 ) F e t c h C

  • r

r e c t P a t h s t a r t i n g a t r 3

slide-63
SLIDE 63

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

undo B undo C RC: undo A undo D (4) Fetch Recovery Code (5) r3 value from Resteer r3: E ... jmp r3 F ( 6 ) F e t c h C

  • r

r e c t P a t h s t a r t i n g a t r 3

slide-64
SLIDE 64

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

undo B undo C RC: undo A undo D (4) Fetch Recovery Code (5) r3 value from Resteer r3: E ... jmp r3 F ( 6 ) F e t c h C

  • r

r e c t P a t h s t a r t i n g a t r 3

slide-65
SLIDE 65

Recovery ¡From ¡MispredicCon ¡

10

2: resolve r3, A, RC A B C D 1: r2 = r0 + r1 2*: r3 = load[r2] (1)

resolve

fails (2) Resteer RC addr to Front End (3) Resteer r3 to Front End

undo B undo C RC: undo A undo D (4) Fetch Recovery Code (5) r3 value from Resteer r3: E ... jmp r3 F ( 6 ) F e t c h C

  • r

r e c t P a t h s t a r t i n g a t r 3

slide-66
SLIDE 66

Hardware ¡Requirements

11

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer New

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer

To Back-End Old

predict instruction: Insert New DBB Entry

Existing BPU

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-67
SLIDE 67

Hardware ¡Requirements

11

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer New

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer

To Back-End Old

predict instruction: Insert New DBB Entry

Existing BPU

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-68
SLIDE 68

Hardware ¡Requirements

11

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer New

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer

To Back-End Old

predict instruction: Insert New DBB Entry

Existing BPU

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-69
SLIDE 69

Hardware ¡Requirements

11

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer New

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer

To Back-End Old

predict instruction: Insert New DBB Entry

Existing BPU

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-70
SLIDE 70

Hardware ¡Requirements

11

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer New

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer

To Back-End Old

predict instruction: Insert New DBB Entry

Existing BPU

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-71
SLIDE 71

Hardware ¡Requirements

11

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer New

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer

To Back-End Old

predict instruction: Insert New DBB Entry

Existing BPU

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-72
SLIDE 72

Hardware ¡Requirements

11

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer New

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer

To Back-End Old

predict instruction: Insert New DBB Entry

Existing BPU

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-73
SLIDE 73

Hardware ¡Requirements

12

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer Index

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer Insert DBB Index Into Branch Resolution Instruction

To Back-End

Existing BPU

slide-74
SLIDE 74

Hardware ¡Requirements

12

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer Index

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer Insert DBB Index Into Branch Resolution Instruction

To Back-End

Existing BPU

slide-75
SLIDE 75

Hardware ¡Requirements

12

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer Index

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer Insert DBB Index Into Branch Resolution Instruction

To Back-End

Existing BPU

slide-76
SLIDE 76

Hardware ¡Requirements

12

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡

History PC H A S H Write Port Predictor Table Read Port DBB Tail Pointer Index

Indices DBB To Fetch Unit Indices Prediction State Fetch Buffer Insert DBB Index Into Branch Resolution Instruction

To Back-End

Existing BPU

slide-77
SLIDE 77

Hardware ¡Requirements

13

History PC H A S H Write Port Predictor Table Read Port

Indices DBB

R e s t e e r L

  • g

i c

To Fetch Unit From Back-End DBB Index from Branch Resolution Instruction New Prediction State Indices

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-78
SLIDE 78

Hardware ¡Requirements

13

History PC H A S H Write Port Predictor Table Read Port

Indices DBB

R e s t e e r L

  • g

i c

To Fetch Unit From Back-End DBB Index from Branch Resolution Instruction New Prediction State Indices

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-79
SLIDE 79

Hardware ¡Requirements

13

History PC H A S H Write Port Predictor Table Read Port

Indices DBB

R e s t e e r L

  • g

i c

To Fetch Unit From Back-End DBB Index from Branch Resolution Instruction New Prediction State Indices

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-80
SLIDE 80

Hardware ¡Requirements

13

History PC H A S H Write Port Predictor Table Read Port

Indices DBB

R e s t e e r L

  • g

i c

To Fetch Unit From Back-End DBB Index from Branch Resolution Instruction New Prediction State Indices

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-81
SLIDE 81

Hardware ¡Requirements

13

History PC H A S H Write Port Predictor Table Read Port

Indices DBB

R e s t e e r L

  • g

i c

To Fetch Unit From Back-End DBB Index from Branch Resolution Instruction New Prediction State Indices

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-82
SLIDE 82

Hardware ¡Requirements

13

History PC H A S H Write Port Predictor Table Read Port

Indices DBB

R e s t e e r L

  • g

i c

To Fetch Unit From Back-End DBB Index from Branch Resolution Instruction New Prediction State Indices

  • Maintain ¡correspondence ¡between ¡predic<on/resolu<on
  • Small ¡FIFO: ¡not ¡many ¡branches ¡outstanding ¡and ¡no ¡reordering ¡
  • f ¡predic<on ¡and ¡resolu<on ¡instruc<ons

–Dovetails ¡with ¡exis<ng ¡structures ¡for ¡outstanding ¡branches

  • Single ¡pointer, ¡single ¡R/W ¡port ¡
slide-83
SLIDE 83

Experimental ¡Methodology

14

  • Profile ¡Guided ¡Op<miza<on ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡

LLVM ¡3.5

  • Benchmarks ¡with ¡0.3% ¡dynamic ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡

instruc<on ¡stream ¡indir ¡branch ¡

  • SPEC ¡TRAIN ¡input, ¡PHP ¡and ¡Python ¡first ¡input
  • Cycle ¡Accurate ¡x86 ¡simulator ¡PTLSim ¡provides ¡predictability
  • Transform ¡non-­‑loop ¡branches ¡with ¡pred ¡> ¡bias ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡

and ¡(pred ¡-­‑ ¡bias) ¡> ¡3%

  • Run ¡SPEC, ¡PHP, ¡Python ¡on ¡PTLSim ¡using ¡ ¡PGO ¡binaries ¡with ¡and ¡

without ¡predic<on ¡guide ¡on ¡REF ¡

  • Specula<on ¡support ¡: ¡(alias/shadow ¡registers) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡

¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ for ¡baseline ¡and ¡experimental

  • Improved ¡Indirect ¡Branch ¡Predictor: ¡VPC ¡ ¡(TAGE ¡study ¡in ¡paper)

Key Structures Configuration Parameters Bpred PTLSim default: GShare, 24 KB 3-table direction predictor, 4K-entry BTB, 64-entry RAS Front-End 5 stages, Experimentally Varied 2/4/8 wide Fetch/Decode/Dispatch, 32-entry FetchBuffer Execution Ports Experimentally Varied 2/4/8 Functional Units Up to 2 x LD/ST, 2 x INT/SIMD-Permute, 4 x 64-bit SIMD/FP, 1-cycle bypass L1 Caches 8-way 32 KB L1-D$, 4-way 32 KB L1-I$, 64B lines, 4-cycle latency L2 Cache 16-way 256KB Unified, 12-cycle latency L3 Cache 32-way 4MB LLC, 25-cycle latency Miss Handling 64-entry Miss Buffer, 64-entry Load Fill Request Queue Main Memory 140-cycle latency

slide-84
SLIDE 84

Performance: ¡SPEC95, ¡SPEC2K, ¡SPEC2K6

  • Performance ¡propor<onal ¡to ¡% ¡of ¡dynamic ¡instruc<ons ¡

which ¡are ¡indirect ¡branches ¡(PDS) ¡and ¡amenable ¡to ¡ transforma<on ¡(weighted ¡averaged ¡bias: ¡WAB)

  • richards: ¡4% ¡PDS, ¡41% ¡WAB ¡
  • m88ksim: ¡0.4% ¡PDS, ¡57% ¡WAB
  • Geomean: ¡1.1% ¡PDS, ¡62% ¡WAB

15

0% 6% 12% 18% 24% 30% gcc95 li m88ksim perl95 eon gap gcc2k perl2k gcc2k6 h264ref

  • mnetpp

perl2k6 povray sjeng xalanc richards Geomean 2-wide 4-wide

slide-85
SLIDE 85

Performance: ¡PHP

  • Specnorm: ¡1.4% ¡PDS, ¡18% ¡WAB
  • run: ¡0.6% ¡PDS, ¡ ¡49% ¡WAB
  • Geomean: ¡1.4% ¡PDS, ¡37% ¡WAB

16

0% 10% 20% 30% 40% 50% b e n c h b t r e e f a n n k u c h f a s t a f a s t a r e d u x k n u k e m a n d e l b r

  • t

n b

  • d

y r e g e x d n a r e v c

  • m

p r u n s p e c n

  • r

m G e

  • m

e a n 2-wide 4-wide

slide-86
SLIDE 86

Performance: ¡Python ¡

  • regexdna: ¡2.7% ¡PDS, ¡ ¡ ¡72% ¡WAB
  • revcomp: ¡1.0% ¡PDS, ¡ ¡ ¡90% ¡WAB
  • Geomean: ¡1.8% ¡PDS, ¡73% ¡WAB

17

0% 5% 10% 15% 20% btree fannkuch fasta float knuke mandelbrot meteor nbody queens raytrace regexdna revcomp richards specnorm Geomean Speedup 2-wide 4-wide

slide-87
SLIDE 87

Efficiency

18

0% 1% 2% 3% 4% gcc95 li m88ksim perl95 eon gap gcc2k perl2k gcc2k6 h264ref

  • mentpp

perl2k6 povray sjeng xalanc richards Geomean SPEC Extra Instrs Issued

0% 1% 2% 3% 4%

btree fannkuch fasta float knuke mandelbrot meteor nbody queens raytrace regexdna revcomp richards specnorm Geomean

Python Extra Instrs Issued

0% 1% 2% 3% 4%

bench btree fannkuch fasta fastaredux knuke mandelbrot nbody regexdna revcomp run specnorm Geomean

PHP

Extra Instrs Issued

B e t t e r

slide-88
SLIDE 88

Conclusions

  • Straighaorward, ¡low-­‑cost ¡“enabling” ¡transforma<on

–Leverages ¡DBT ¡profiling ¡and ¡specula<on ¡facili<es ¡

  • Modest ¡Hardware ¡Requirements
  • Leverages ¡Advances ¡In ¡Indirect ¡Branch ¡Predic<on
  • Good ¡Performance ¡across ¡Integer ¡and ¡Floa<ng ¡Point
  • Maintains ¡the ¡Efficiency ¡of ¡the ¡In-­‑Order

19

slide-89
SLIDE 89

Thank ¡You ¡

20

slide-90
SLIDE 90

Thank ¡You ¡

20

QuesCons?