Architectural Support for Speculative Precomputation Dean Tullsen - - PowerPoint PPT Presentation

architectural support for speculative precomputation
SMART_READER_LITE
LIVE PREVIEW

Architectural Support for Speculative Precomputation Dean Tullsen - - PowerPoint PPT Presentation

Architectural Support for Speculative Precomputation Dean Tullsen UCSD on sabbatical at UPC Background -- Three Types of Helper Threads Cache Prefetching Branch Precomputation Other What architectural support you need/want


slide-1
SLIDE 1

Architectural Support for Speculative Precomputation

Dean Tullsen UCSD

  • n sabbatical at UPC
slide-2
SLIDE 2

Speculative Precomputation Tutorial

Background -- Three Types of Helper Threads

Cache Prefetching Branch Precomputation Other

What architectural support you need/want

depends on what your helper thread is doing

slide-3
SLIDE 3

Speculative Precomputation Tutorial

Background – Helper Threads as Non-traditional Parallelism

Traditional Parallelism – We use extra

threads/processors to offload computation. Threads divide up the execution stream.

Helper threads – Extra threads are used to speed up

computation without necessarily off-loading any of the original computation

Primary advantage nearly any code, no matter how

inherently serial, can benefit from parallelization.

slide-4
SLIDE 4

Speculative Precomputation Tutorial

Traditional Parallelism

Thread 1 Thread 2 Thread 3 Thread 4

slide-5
SLIDE 5

Speculative Precomputation Tutorial

Helper Thread Parallelism

Thread 1 Thread 2 Thread 3 Thread 4

slide-6
SLIDE 6

Speculative Precomputation Tutorial

Speculative Precomputation

Delinquent load Trigger instruction Prefetch Spawn thread Memory latency

slide-7
SLIDE 7

Speculative Precomputation Tutorial

Other Helper Thread Models

For a description of helper threads that do

not derive their code from the original thread, see:

Chappell, Stark, Kim, Reinhardt, Patt,

"Simultaneous Subordinate Microthreading (SSMT),“ ISCA 26

slide-8
SLIDE 8

Speculative Precomputation Tutorial

Helper Thread Model

Delinquent load Trigger Point Prefetch Memory latency Spawn thread Copy Live-Ins

slide-9
SLIDE 9

Speculative Precomputation Tutorial

Cache Prefetching Architectural Support – Minimum

  • None. Cache is a shared structure. One

thread can bring in a cache line that is needed by another as a side effect.

Load A/Prefetch A Load A

slide-10
SLIDE 10

Speculative Precomputation Tutorial

Cache Prefetching Architectural Support – Useful

fast thread spawns support for live-in transfer automatic triggering directed prefetches thread management thread creation! retention of computation

  • Del. load

Trigger Point Prefetch

latency

Copy Live-Ins

slide-11
SLIDE 11

Speculative Precomputation Tutorial

Branch Precomputation Architectural Support – Minimum

Although branch predictor is (possibly)

shared, depending on branch side effects is ineffective.

BEQ R1, R2, label BEQ R1, R2, label

slide-12
SLIDE 12

Speculative Precomputation Tutorial

Branch Precomputation Architectural Support – Minimum

ISA support Outcome storage Correlator Ability to override branch predictor

slide-13
SLIDE 13

Speculative Precomputation Tutorial

Branch Precomputation Architectural Support – Useful

fast thread spawns support for live-in transfer automatic triggering thread management thread creation retention of computation

slide-14
SLIDE 14

Speculative Precomputation Tutorial

Arch Support for other types of helper threads

Access to hardware structures

branch predictor, BTB trace cache TLB Caches

Triggering

branch predictor, BTB value profiler trace cache TLB Caches

slide-15
SLIDE 15

Speculative Precomputation Tutorial

Outline -- Architectural Support for Helper Threads

Branch Correlation Support Dynamic Speculative Precomputation --

Arch Support for Creation and Management of Helper Threads

Register Integration – Arch Support for

Reuse of Values in Helper Threads

slide-16
SLIDE 16

Speculative Precomputation Tutorial

Prediction/Branch Correlation

This material heavily based on:

Zilles, Sohi, “Execution-Based Prediction

Using Speculative Slices” ISCA 28

slide-17
SLIDE 17

Speculative Precomputation Tutorial

The Problem

Even assuming the ability to match

instructions in the helper thread with branch PCs in the main thread,

Even assuming the ability to match

instructions in the helper thread with branch PCs in the main thread, we still must correlate dynamic instances of the helper thread predictions with dynamic instances of the branch in the main thread.

slide-18
SLIDE 18

Speculative Precomputation Tutorial

Overall Solution

Tagged Prediction Queue

PC Tag PC Tag PC Tag NT NT NT T T NT NT NT T T T NT NT NT NT T NT NT NT T T T NT PC Tag

slide-19
SLIDE 19

Speculative Precomputation Tutorial

Challenges

Re-ordering predictions produced out of order

allocate entries at fetch of prediction generating instruction

Main Thread (MT) Mis-speculation recovery

consume at fetch of MT branch, free at commit

Late predictions

MT must still consume empty entries, possibly establishing correlation with in-flight prediction

Conditionally-executed branches

slide-20
SLIDE 20

Speculative Precomputation Tutorial

Conditionally Executed Branches

Issue – Helper threads

typically contain no control flow (except maybe a single loop back), and thus will generate a prediction for every iteration.

A B C F D E

slide-21
SLIDE 21

Speculative Precomputation Tutorial

Conditionally Executed Branches

Do not want to introduce control flow into the

slice to conditionally consume predictions.

Key – since the helper thread produces a

prediction every iteration, we just consume one every iteration.

Zilles and Sohi used fetch PC’s to determine

when a prediction should be killed (consumed). Could also use explicit instructions in main thread.

slide-22
SLIDE 22

Speculative Precomputation Tutorial

Conditionally Executed Branches

A B C F D E

Loop Iteration Kill Slice Kill

NT NT NT T T T NT PC Tag

slide-23
SLIDE 23

Speculative Precomputation Tutorial

Outline -- Architectural Support for Helper Threads

Branch Correlation Support Dynamic Speculative Precomputation --

Arch Support for Creation and Management of Helper Threads

Register Integration – Arch Support for

Reuse of Values in Helper Threads

slide-24
SLIDE 24

Speculative Precomputation Tutorial

Why Create Threads in Hardware – Why Dynamic Speculative Precomputation?

SW Speculative Precomputation provides

significant speedup, but

Requires offline program analysis Creates threads for fixed number of thread contexts Does not target existing code Platform specific code

A completely hardware-based version will use

dynamic program analysis via back-end instruction analyzers.

slide-25
SLIDE 25

Speculative Precomputation Tutorial

Example SMT Processor Pipeline

PC PC PC PC

ICache Register Renaming Centralized Instruction Queue Re-order Buffer Re-order Buffer Re-order Buffer Re-order Buffer Monolithic Register File Execution Units Data Cache

slide-26
SLIDE 26

Speculative Precomputation Tutorial

Modified Pipeline

PC PC PC PC

ICache Register Renaming Centralized Instruction Queue Re-order Buffer Re-order Buffer Re-order Buffer Re-order Buffer Monolithic Register File Execution Units Data Cache Delinquent Load Identification Table (DLIT) Identify delinquent loads Construct P-slices Spawn and manage P-slices √

slide-27
SLIDE 27

Speculative Precomputation Tutorial

Delinquent Load Identification Table

Identify PCs of program’s delinquent loads Entries allocated to PC of loads which missed in

L2 cache on last execution

First-come, first-serve

Entry tracks average load behavior After 128k total instructions, evaluated for

delinquency Summary – finds delinquent loads

slide-28
SLIDE 28

Speculative Precomputation Tutorial

PC PC PC PC

ICache Register Renaming Centralized Instruction Queue Re-order Buffer Re-order Buffer Re-order Buffer Re-order Buffer Monolithic Register File Execution Units Data Cache Delinquent Load Identification Table (DLIT)

Modified Pipeline

Identify delinquent loads Construct P-slices Spawn and manage P-slices √

slide-29
SLIDE 29

Speculative Precomputation Tutorial

PC PC PC PC

ICache Register Renaming Centralized Instruction Queue Re-order Buffer Re-order Buffer Re-order Buffer Re-order Buffer Monolithic Register File Execution Units Data Cache Delinquent Load Identification Table (DLIT) Retired Instruction Buffer (RIB)

Modified Pipeline

Identify delinquent loads Construct P-slices Spawn and manage P-slices √ √

slide-30
SLIDE 30

Speculative Precomputation Tutorial

Retired Instruction Buffer

Construct p-slices to prefetch delinquent loads Buffers information on an in-order run of

committed instructions

Comparable to trace cache fill unit

FIFO structure RIB normally idle (> 99% of the time)

We’ll spend more time on this.

slide-31
SLIDE 31

Speculative Precomputation Tutorial

PC PC PC PC

ICache Register Renaming Centralized Instruction Queue Re-order Buffer Re-order Buffer Re-order Buffer Re-order Buffer Monolithic Register File Execution Units Data Cache Delinquent Load Identification Table (DLIT) Retired Instruction Buffer (RIB)

Modified Pipeline

Identify delinquent loads Construct P-slices Spawn and manage P-slices √ √

slide-32
SLIDE 32

Speculative Precomputation Tutorial

PC PC PC PC

ICache Register Renaming Centralized Instruction Queue Re-order Buffer Re-order Buffer Re-order Buffer Re-order Buffer Monolithic Register File Execution Units Data Cache Delinquent Load Identification Table (DLIT) Retired Instruction Buffer (RIB) Slice Information Table (SIT)

Modified Pipeline

Identify delinquent loads Construct P-slices Spawn and manage P-slices √ √ √

slide-33
SLIDE 33

Speculative Precomputation Tutorial

Slice Information Table

Queried each cycle with addresses of main

thread instructions decoded on that cycle

If trigger instruction decoded, rename stage notified

Eliminates ineffective p-slices

P-slice evaluated every 128K committed instructions

slide-34
SLIDE 34

Speculative Precomputation Tutorial

P-slice Construction with RIB

Analyze instructions between two

instances of delinquent load

Most recent to oldest

Add to p-slice instructions which

produce live-in set register

Update register live-in set

When analysis terminates, p-slice has

been constructed and live-in registers identified

slide-35
SLIDE 35

Speculative Precomputation Tutorial

Example

struct DATATYPE { int val[10]; }; DATATYPE * data [100]; for(j = 0; j < 10; j++) { for(i = 0; i < 100; i++) { data[i]->val[j]++; } }

loop: I1 load r1=[r2] I2 add r3=r3+1 I3 add r6=r3-100 I4 add r2=r2+8 I5 add r1=r4+r1 I6 load r5=[r1] I7 add r5=r5+1 I8 store [r1]=r5 I9 blt r6, loop

slide-36
SLIDE 36

Speculative Precomputation Tutorial

P-slice Construction Example

add r5 = r5+1 store [r1] = r5 blt r6, loop

Instruction

load r1 = [r2] add r3 = r3+1 add r6 = r3-100 add r2 = r2+8 add r1 = r4+r1 load r5 = [r1] load r5 = [r1] Analyze from recent

Included Live-in Set To oldest

slide-37
SLIDE 37

Speculative Precomputation Tutorial

P-slice Construction Example

add r5 = r5+1 store [r1] = r5 blt r6, loop

Instruction

load r1 = [r2] add r3 = r3+1 add r6 = r3-100 add r2 = r2+8 add r1 = r4+r1 load r5 = [r1] load r5 = [r1]

Included

r2, r4

Live-in Set

r2, r4 r2, r4 r2, r4 r1, r4 r1, r4 r1, r4 r1, r4 r1

√ √ √

slide-38
SLIDE 38

Speculative Precomputation Tutorial

P-slice Construction Example

Instruction P-Slice

load r1 = [r2] add r1 = r4+r1 load r5 = [r1]

Live-in Set

r2,r4

Delinquent Load is trigger

add r5 = r5+1 store [r1] = r5 blt r6, loop load r1 = [r2] add r3 = r3+1 add r6 = r3-100 add r2 = r2+8 add r1 = r4+r1 load r5 = [r1] load r5 = [r1]

slide-39
SLIDE 39

Speculative Precomputation Tutorial

1 1.05 1.1 1.15 1.2 1.25

mcf vpr art equake mgrid swim em3d mst perimeter treeadd average Speedup Over no Dynamic SP

1.41

slide-40
SLIDE 40

Speculative Precomputation Tutorial

Advanced SP Optimizations

All aimed at earlier prefetch initiation All require two instances of delinquent load in RIB Simply implemented with multiple passes through RIB load r5=[r1] add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1]

RIB

add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] trigger

slide-41
SLIDE 41

Speculative Precomputation Tutorial

Advanced SP Optimizations

load r5=[r1] add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1]

RIB

add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] trigger

slide-42
SLIDE 42

Speculative Precomputation Tutorial

Trigger Placement

add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] trigger Live ins: r2, r4

slide-43
SLIDE 43

Speculative Precomputation Tutorial

add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1] add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1]

Induction Unrolling [Roth, Sohi, HPCA 7]

trigger Live ins: r2, r4

slide-44
SLIDE 44

Speculative Precomputation Tutorial

add r5=r5+1 store [r1]=r5 blt r6, loop load r1=[r2] add r3=r3+1 add r6=r3-100 add r2=r2+8 add r1=r4+r1 load r5=[r1]

Chaining Slices

Requires undetermined

(typically small) number of passes.

Uses previous passes’ live ins,

to continue adding instructions that effect future iterations’ delinquent loads.

Ends when no more changes

introduced.

Loop back branch added to

end.

slide-45
SLIDE 45

Speculative Precomputation Tutorial

Dynamic SP Optimizations – Chaining P-slices

Enable p-slice to repeat its execution in

same thread context

Reduce contention for thread contexts Eliminate redundant induction variable

updates

Must manage runahead distance Kill threads when non-speculative thread

leaves program section

slide-46
SLIDE 46

Speculative Precomputation Tutorial

Advanced Dynamic SP Optimizations, summary

Goal – spawn threads earlier

Assume control flow repeated

Perform additional analysis passes

Retain live-in set from previous pass

Increased construction latency but keeps

RIB simple

Little performance impact

slide-47
SLIDE 47

Speculative Precomputation Tutorial

1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4

basic dynamic SP alternate trigger induction unroll chaining

Speedup over no Dynamic SP 2 Thread Contexts 4 Thread Contexts 8 Thread Contexts

slide-48
SLIDE 48

Speculative Precomputation Tutorial

Dynamic SP Conclusion

Dynamic Speculative Precomputation

aggressively targets delinquent loads

Thread based prefetching scheme Uses back-end (off critical path) instruction

analyzers

P-slices constructed with no external software

support

Basic form gives average 14% speedup Multi-pass RIB analysis enables aggressive

p-slice optimizations

Average 33% speedup using chaining with eight

contexts

slide-49
SLIDE 49

Speculative Precomputation Tutorial

Speculative Precomputation

Speculative Precomputation: Long-range

Prefetching of Delinquent Loads, Collins, Wang, Tullsen, Hughes, Lee, Lavery, Shen, In ISCA 2001

Dynamic Speculative Precomputation,

Collins, Tullsen, Wang, Shen, In Micro 2001

slide-50
SLIDE 50

Speculative Precomputation Tutorial

Outline -- Architectural Support for Helper Threads

Branch Correlation Support Dynamic Speculative Precomputation --

Arch Support for Creation and Management of Helper Threads

Register Integration – Arch Support for

Reuse of Values in Helper Threads

slide-51
SLIDE 51

Speculative Precomputation Tutorial

Helper Thread Value Reuse

Focus on one particular technique, derived from

two papers:

Register Integration [Roth, Sohi, Micro 2000] –

identifies instructions that are being re-executed with the exact same dependencies (squash reuse)

Speculative Data Driven Multithreading (DDMT)

[Roth, Sohi, HPCA 2001] – constructs helper threads in such a way that register integration kicks in automatically.

slide-52
SLIDE 52

Speculative Precomputation Tutorial

Motivation (Register Integration for Squash Reuse)

Assume Unified Physical Register

File (PRF)

Logical Register Map (LRM)

sequentially “manages” PRF

Conventional mis-speculation

recovery

PR values intact LRM restored to prior state, PR’s

become “garbage”

Register Integration: why write?

value is already in PR

add sub sll beq add add sub mul add add sub sll beq add add sub mul add add sub sll beq add add sub mul add

slide-53
SLIDE 53

Speculative Precomputation Tutorial

Register Integration

Key: must locate PR holding squashed

value

Use a second mapping of PRF Integration Table (IT): describe each PR using

creating instruction

Operation (PC) and input PR’s Encodes “reusability criteria”

slide-54
SLIDE 54

Speculative Precomputation Tutorial

Integration in Action (Squash Reuse)

X Y LRM INST PC

  • Dyn. Instrs

Comment No/Alloc/IT enter Integrate/IT disable Squash/IT enable Integrate/IT disable 48 49 PC I1 I2 O IT E 48 49 Y = 2; A2: Alloc/IT enter A2: 49 N 48 47 X = 1; A1: Alloc/IT enter A1: 48 N 51 50 X++; A5: Alloc/IT enter A5: 48 51 N 48 49 if (!X) A3: Predict taken/IT enter A3: 48 N 48 50 Y = 3; A4: Alloc/IT enter A4: 50 N 51 52 Y++; A6: Alloc/IT enter A6: 50 52 N 53 52 X++; A7: Alloc/IT enter A7: 51 53 N X++; A5: A5: 48 51 Y Y++; A6: A6: 50 52 Y X++; A7: A7: 51 53 Y 53 54 N 51 49 N 54 51 A6: 49 54 N 51 50 52 53 Y Y Y Y E = Eligible (can be integrated) PR cannot simultaneously be mapped by two active instructions 48 48 49 50 51 51 [animations courtesy Amir Roth]

slide-55
SLIDE 55

Speculative Precomputation Tutorial

What Integration (Reuse) Accomplishes

Improved performance (first-order effects) Reduced resource contention

slide-56
SLIDE 56

Speculative Precomputation Tutorial

Data-Driven Multithreading (DDMT)

DDMT: an implementation of pre-execution

which uses register integration to recapture some of the computation done by the main thread.

slide-57
SLIDE 57

Speculative Precomputation Tutorial

Example Identify PIs

Use profiling to find PIs

for (node=list; node; node = node->next) node->val -= node->neighbor->val * node->coeff; if (node->neighbor != NULL) STATIC CODE ldt f1, 16(r2) I5 ldt f0, 16(r1) I4 ldt f2, 24(r1) I6 ldt f1, 16(r2) I5 ldt f0, 16(r1) I4 ldq r1, 0(r1) I10 stt f0, 16(r1) I9 subt f0, f3, f0 I8 mult f1, f2, f3 I7 beq r2, I10 I3 ldq r2, 8(r1) I2 beq r1, I12 I1 br I1 I11 beq r2, I10 I3 ldq r2, 8(r1) I2 beq r1, I12 I1 br I1 I5 ldq r1, 0(r1) I3 INST PC DYNAMIC INSN STREAM

Simplified loop from EM3D

slide-58
SLIDE 58

Speculative Precomputation Tutorial

ldq r1, 0(r1) I10 ldt f1, 16(r2) I5 ldt f0, 16(r1) I4 ldt f2, 24(r1) I6 ldt f1, 16(r2) I5 ldt f0, 16(r1) I4 ldq r1, 0(r1) I10 stt f0, 16(r1) I9 subt f0, f3, f0 I8 mult f1, f2, f3 I7 beq r2, I10 I3 ldq r2, 8(r1) I2 beq r1, I12 I1 br I1 I11 beq r2, I10 I3 ldq r2, 8(r1) I2 beq r1, I12 I1 br I1 I11 ldq r1, 0(r1) I10 INST PC

Example Extract DDTs

ldt f1, 16(r2) I5 beq r2, I10 I3 ldq r2, 8(r1) I2 ldq r1, 0(r1) I10 ldt f1, 16(r2) I5 beq r2, I10 I3 ldq r2, 8(r1) I2 ldq r1, 0(r1) I10 INST PC DDTC (static) I10:

  • Examine program traces
  • Start with Problem Insts (PIs)
  • Work backwards, gather backward-slices
  • Pack last N-1 slice instructions into DDT (choice
  • f N a longer topic).
  • Load DDT into DDTC (DDT$)
  • Use first instruction as trigger.
slide-59
SLIDE 59

Speculative Precomputation Tutorial

Example Pre-Execute DDTs

ldt f0, 16(r1) I4 beq r1, I12 I1 br I1 I11 ldq r1, 0(r1) I10 ldq r2, 8(r1) I2 beq r2, I10 I3 ldt f1, 16(r2) I5 stt f0, 16(r1) I9 subt f0, f3, f0 I8 ldt f1, 16(r2) I5 mult f1, f2, f3 I7 beq r2, I10 I3 ldt f2, 24(r1) I6 ldq r2, 8(r1) I2 INST PC ldt f1, 16(r2) I5 ldq r1, 0(r1) I10 DDT ldt f0, 16(r1) I4 beq r2, I10 I3 ldq r2, 8(r1) I2 beq r1, I12 I1 br I1 I11 ldq r1, 0(r1) I10 INST PC … ldq r1, 0(r1) I10 INST PC DDTC (static) I10: MT

  • MT integrates DDT results

Instr’s not re-executed → reduces contention Shortens MT critical path

Pre-computed branch avoids mis-prediction

  • MT, DDT execute in parallel
  • Executed a trigger instr?

Fork DDT (µarch)

  • DDT initiates cache miss

“Absorbs” latency

slide-60
SLIDE 60

Speculative Precomputation Tutorial

DDMT Performance

Cache misses

Speedups vary, 10-15% DDT “unrolling”: increases

latency tolerance (paper)

5 10 15 20 25 30 parser mcf gzip vpr em3d mst Execution Tim e Saved (% ) 5 10 15 20 25 30 eon crafty gzip vpr em3d bh Execution Time Saved (%)

  • Branch mispredictions

Speedups lower, 5-10% More PIs, lower coverage Branch integration

!= perfect branch prediction

  • Effects mix
slide-61
SLIDE 61

Speculative Precomputation Tutorial

More Results

DDT overhead: fetch utilization

~5% (reasonable) Fewer MT fetches (always)

Contention

Fewer total fetches

Early branch resolution

20 40 60 80 100 120

mcf.l vpr.l mst.l eon.b gzip.b em3d.b

Fetched DDMT/Base (%) DDT MT

20 40 60 80 100 mcf.l vpr.l mst.l eon.b gzip.b em3d.b DDT Integrated/Fetched (%)

NOT COMPLETED COMPLETED

  • DDT utility: integration rates

Vary, mostly ~30% (low) Completed: well done Not completed: a little late

slide-62
SLIDE 62

Speculative Precomputation Tutorial

DDMT

Creates pre-execution slices similar to other proposed

schemes, with insts from main thread.

Retains results from helper thread that are valid for main

thread, saving time and execution resources.

Automatically solves the branch correlation problem. Cannot trigger a slice early (must have register rename

table intact)

Integration requires exact dataflow match (but

prefetching may still happen).

Cannot pre-execute multiple instances of same

instruction in one slice.

slide-63
SLIDE 63

Speculative Precomputation Tutorial

Architectural Support for Helper Threading – Summary

Need architectural support to correlate helper-

thread generated predictions with dynamic instances of branches in the main thread.

Dynamic Speculative Precomputation identifies

problem instructions, creates threads, manages threads, all in hardware. Combines advantages

  • f hardware prefetching with thread-based

prefetching.

Register Integration allows some computed

values to be reused by the main thread.