EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016...

21
Lecture 10 Slide 1 EECS 470 © Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar EECS 470 Lecture 10 Memory Speculation Fall 2019 Prof. Ron Dreslinski http://www.eecs.umich.edu/courses/eecs470 Slides developed in part by Profs. Austin, Brehob , Falsafi , Hill, Hoe, Lipasti , Martin, Roth, Shen , Smith, Sohi , Tyson, and Vijaykumar of Carnegie Mellon University, Purdue University, University of Michigan, Univerity of Pennsylvania, and University of Wisconsin.

Transcript of EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016...

Page 1: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 1EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

EECS 470Lecture 10Memory Speculation

Fall 2019

Prof. Ron Dreslinski

http://www.eecs.umich.edu/courses/eecs470

Slides developed in part by Profs. Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, and Vijaykumar of Carnegie Mellon University, Purdue University, University of Michigan, Univerity of Pennsylvania, and University of Wisconsin.

Page 2: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 2EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Announcements

Midterm in the evening on 10/17!r October 17th, 7:00-8:30pm 1571 GGB

Page 3: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10

Slide 3EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Memory Dataflow Techniques

Page 4: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 4EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Out of Order Memory OperationsAll insns are easy in out-of-order…

r Register inputs onlyr Register renaming captures all dependencesr Tags tell you exactly when you can execute

… except loadsr Register and memory inputs (older stores)r Register renaming does not tell you all dependencesr How do loads find older in-flight stores to same address (if any)?

Page 5: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 5EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Dynamic Reordering of Memory Operations

Storing to memory is irrevocableHence, hold stores until retire (ROB head)

No memory WAW or WARAllow OoO Loads that don’t have RAW memory-dependenceWhat is hard about managing memory-dependence?

r memory addresses are much wider than reg namesr memory dependencies are not static

m a load (or store) instruction’s address can change m addresses need to be calculated and translated first

r memory instructions take longer to execute

Page 6: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 6EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Some trivial ways to handle LoadsAllow only one load or store in OoO core

r Stall other operations at dispatch – very slowr No need for LSQ

Load may only issue when LSQ headr Stall other operations at dispatchr Loads always get value from cache, only 1 outstanding load

More aggressive options:r Load to store forwardingr Speculative load-to-store forwarding – requires rewind mechanism

Several hardware realizationsr Unified LSQ (easier to understand, but nasty hardware)r Separate LQ and SQ (more complicated, but elegant)

Page 7: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 7EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Recall: Load/Store Queue (LSQ)ROB makes register writes in-order, but what about stores?

As usual, i.e., to D$ in X stage?r Not even close, imprecise memory worse than imprecise registers

Load/store queue (LSQ)r Completed stores write to LSQr When store retires, head of LSQ written to D$r When loads execute, access LSQ and D$ in parallel

m Forward from LSQ if older store with matching addressr More modern design: loads and stores in separate queuesr More on this later

Page 8: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 8EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Recall: ROB + LSQ

Modulo gross simplifications, this picture is almost realistic!

regfile

D$

I$BP

ROB

C R

LSQload/store

store dataaddr

load data

Page 9: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 9EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

HW #1: Unified Load/Store Queue

Operates as a circular FIFOr allocate on dispatchr de-allocate on retirement

Calc address in register dataflow order

A NxN comparator matrix detects memory address dependence (also considers relative age of entries)

r store ops are held until retirement

r load ops are issued when no dependency exists & all older store addresses known

==========

=========

=

========

==

=======

= = ====

======

=

addresscalculation+translation

Page 10: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 10EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

HW#2: Split QueuesD$/TLB + structures to handle in-flight loads/stores

Performs four functions

In-order store retirement• Writes stores to D$ in order

• Basic, implemented by store queue (SQ)

Store-load forwarding• Allows loads to read values from older un-retired stores

• Also basic, also implemented by store queue (SQ)

Memory ordering violation detection• Checks load speculation (more later)

• Advanced, implemented by load queue (LQ)

Memory ordering violation avoidance• Advanced, implemented by dependence predictors

Page 11: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 11EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Simple Data Memory FU: D$/TLB + SQJust like any other FU

• 2 register inputs (addr, data in)• 1 register output (data out)• 1 non-register input (load pos)?

Store queue (SQ)• In-flight store address/value• In program order (like ROB)• Addresses associatively searchable• Size heuristic: 15-20% of ROB

But what does it do?

valueaddress================

age

D$/TLB

head

tail

load positionaddress data in data out

Store Queue (SQ)

Page 12: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 12EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Data Memory FU “Pipeline”Stores

Dispatch (D)• Allocate entry at SQ tail

Execute (X)• Write address and data into corresponding SQ slot

Retire (R)• Write address/data from SQ head to D$, free SQ head

LoadsDispatch (D)

• Record current SQ tail as “load position” in RS (most be > to issue)Execute (X)

• Where the good stuff happens

Page 13: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 13EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

“Out-of-Order” Load ExecutionIn parallel with D$ accessSend address to SQ

• Compare with all store addresses• CAM: like FA$, or RS tag match• Select all matching addresses

Age logic selects youngest store that is older than load• Uses load position input• Any? load “forwards” value from SQ• None? Load gets value from D$

valueaddress================

age

D$/TLB

head

tail

load positionaddress data in data out

Page 14: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 14EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Conservative Load Scheduling• Why “” in “out-of-order”?

+ Load can execute out-of-order with respect to (wrt) other loads+ Stores can execute out-of-order wrt other stores– Loads must execute in-order wrt older stores

• Load execution requires knowledge of all older store addresses+ Simple– Restricts performance

• Used in P6

Page 15: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 15EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Opportunistic Memory Scheduling• Observe: on average, < 10% of loads forward from SQ

• Even if older store address is unknown, chances are it won’t match• Let loads execute in presence of older “ambiguous stores”+ Increases performance• But what if ambiguous store does match?

• Memory ordering violation: load executed too early • Must detect…• And fix (e.g., by flushing/refetching insns starting at load)

Page 16: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 16EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

D$/TLB + SQ + LQLoad queue (LQ)

• In-flight load addresses• In program-order (like ROB,SQ)• Associatively searchable• Size heuristic: 20-30% of ROB

================

D$/TLB

head

tail

load queue(LQ)

address================

tail

head

age

store position flush?

SQ

Page 17: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

Lecture 10 Slide 17EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Advanced Memory “Pipeline” (LQ Only)Loads

r Dispatch (D)m Allocate entry at LQ tail

r Execute (X)m Write address into corresponding LQ slot

Storesr Dispatch (D)

m Record current LQ tail as “store position” in RSr Execute (X)

m Where the good stuff happens

Page 18: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 18EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Detecting Memory Ordering ViolationsStore sends address to LQ

• Compare with all load addresses• Selecting matching addresses• Matching address?

• Load executed before store• Violation• Fix!

Age logic selects oldest load that is younger than store• Use store position• Processor flushes and restarts

================

D$/TLB

head

tail

load queue(LQ)

address================

tail

head

age

store position flush?

Page 19: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 19EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Intelligent Load Scheduling• Opportunistic scheduling better than conservative…

+ Avoids many unnecessary delays• …but not significantly

– Introduces a few flushes, but each is much costlier than a delay

• Observe: loads/stores that cause violations are “stable”• Dependences are mostly program based, program doesn’t change• Scheduler is deterministic

• Exploit: intelligent load scheduling• Hybridize conservative and opportunistic• Predict which loads, or load/store pairs will cause violations• Use conservative scheduling for those, opportunistic for the rest

Page 20: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 20EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Memory Dependence Prediction• Store-blind prediction

• Predict load only, wait for all older stores to execute

± Simple, but a little too heavy handed

• Example: Alpha 21264

• Store-load pair prediction• Predict load/store pair, wait only for one store to execute

± More complex, but minimizes delay

• Example: Store-Sets• Load identifies the right dynamic store in two steps

• Store-Set Table: load-PC ® store-PC

• Last Store Table: store-PC ® SQ index of most recent instance

• Implemented in Pentium 4, Apple A7-A9? (guess)

Page 21: EECS 470 Lecture 10 Memory Speculation · EECS 470 Lecture 10 EECS 470 Slide 3 © Wenisch 2016 --Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith,

EECS 470Lecture 10 Slide 21EECS 470 EECS 470

© Wenisch 2016 -- Portions © Austin, Brehob, Falsafi, Hill, Hoe, Lipasti, Martin, Roth, Shen, Smith, Sohi, Tyson, Vijaykumar

Summary• Modern dynamic scheduling must support precise state

• A software sanity issue, not a performance issue

• Strategy: Writeback ® Complete (OoO) + Retire (iO)

• Two basic designs• P6: Tomasulo + re-order buffer, copy based register renaming

± Precise state is simple, but fast implementations are difficult

• R10K: implements true register renaming

± Easier fast implementations, but precise state is more complex

• Out-of-order memory operations• Store queue: conservative load scheduling (iO wrt older stores)

• Load queue: opportunistic load scheduling (OoO wrt older stores)

• Intelligent memory scheduling: hybrid