Clemson University
CPSC 464/664 Lecture Notes
Fall 2003
Mark Smotherman
| 1995 | 2005 | |
|---|---|---|
| memory latency | low (50 cycles) | high (100-500 cycles) |
| L1 cache latency | low (1 cycle) | multi-cycle (2-3 cycles) |
| pipelines | short (5 stages) | long (20-50 stages) |
| operand forwarding paths | full network | clustered subnets, multi-cycle |
IF | ID | EX | DC | WB
.--.
IF ID EX DC |WB|
IF ID EX |DC| WB
IF ID |EX| DC WB
IF |ID| EX DC WB
|IF| ID EX DC WB
`--'
ld r2,0(r1) IF ID.EX DC WB.
\ . .
dadd r4,r2,r3 IF.-- -- --.ID EX DC WB
. .
set-----reset
r2 busy
ld r2,0(r1) IF ID.EX DC WB
\ . \
dadd r4,r2,r3 IF.-- -- ID EX DC WB
. .
set---reset
r2 busy
ld r2,0(r1) IF ID EX DC WB
\ \
dadd r4,r2,r3 IF -- ID EX DC WB
\ \
dsub r6,r4,r5 -- IF ID EX DC WB
branch CPI = 5 (taken or untaken)
a: br t IF ID EX DC WB
t: -- -- -- -- IF ID EX DC WB
a: br t IF ID EX DC WB. untaken branch CPI = 1
a+4: IF ID EX DC| taken branch CPI = 5 (or less if
a+8: IF ID EX| you accelerate
a+12: IF ID| BTA calc. and
a+16: IF| decision)
v
t: IF ID EX DC WB
a: br t IF ID. EX DC WB branch CPI = 1 (taken or untaken)
a+4: IF| ID EX DC WB delay slot inst. always executed
v
t: IF ID EX DC WB
!
IF ID EX DC WB|
IF ID EX DC|flush <-- save this address to resume
IF ID EX|flush
IF ID|flush
IF|flush
v
TRAP ID EX DC WB
IF ID EX DC WB instructions
IF ID EX DC WB from handler
or
!
IF ID EX DC WB|
IF ID EX DC| WB \
IF ID EX| DC WB | but what happens to exceptions
IF ID| EX DC WB | that occur in these instructions?
IF| ID EX DC WB /
v <-- save normal next IF address to resume
TRAP ID EX DC WB
IF ID EX DC WB instructions
IF ID EX DC WB from handler
x: delayed branch to y <-- interrupt after this
x+4: delay slot
y: target instruction
sequence w/o interrupt: x, x+4, y, y+4, ...
sequence after interrupt: x+4, y, y+4, ...
(but x+4 is not the branch to y!)
so must save PC = x+4 and NPC = y
IF ID EX [DC] .. <-- data page fault
[IF] .. ..| .. .. <-- inst page fault
v |
TRAP ID| EX DC WB <-- start inst page fault handler
IF| ID EX DC WB
v
?TRAP? <-- start data page fault handler?
(or wait until after inst page
fault handler completes?)
IF ID EX [DC] .. <-- data page fault, seen in WB
[IF] .. ..| .. .. <-- inst page fault, ignored b/c WB disabled
[IF] ..| .. .. .. <-- ignored because WB disabled
[IF| .. .. .. .. <-- ignored because WB disabled
v
TRAP ID EX DC WB <-- start data page fault handler
after handler runs, resume with inst. that caused data page fault
IF|ID|EX|DC|WB
IF ID E1 E2 E3 DC WB // fp
IF ID -- -- EX DC WB // int
IF -- -- ID EX DC WB // int
IF ID EX DC WB // ld/st
|EX|~~|~~|WB (single-cycle integer)
IF|ID|AC|DC|~~|WB (load/stores)
|E1|E2|E3|WB (fp and multi-cycle integer)
IF ID E1 E2 E3 WB // fp
IF ID EX ~~ ~~ WB // int
IF ID EX ~~ ~~ WB // int
IF ID AC DC ~~ WB // ld/st
|EX|WB (single-cycle integer)
IF|ID|AC|DC|WB (load/stores)
|E1|E2|E3|WB (fp and multi-cycle integer)
IF ID E1 E2 E3 WB
IF ID EX WB <-- out-of-order completion
IF ID EX WB <-- competition for WB port / resource conflict?
IF ID AC DC WB
|EX|WB
IF|ID|E1|E2|E3|WB
|X1|X2|X3|X4|X5|WB
exception in b
V
a: IF ID X1 X2 X3 X4| <-- not completed!
b: IF ID E1 E2 E3| <-- resume here or where after handler?
c: IF ID EX WB| <-- completed!
d: IF ID EX| .. ..
e: IF ID| .. .. ..
f: IF| .. .. .. ..
v
TRAP
consider if inst c overwrites a source, e.g., ADDI R1,R1,#1
a: IF ID X1 X2 X3 X4 X5 WB
b: IF ID -- -- -- -- -- E1 E2 E3. <-- resume here
c: IF -- -- -- -- -- ID -- --|
d: IF -- --|
v
TRAP
b: IF ID E1 E2 E3. <-- resume here
barrier IF ID -- --|
c: IF -- --| <-- never executed
v
TRAP
b: IF ID E1 E2 E3* .. <-- queued exception
c: IF ID EX WB
d: IF ID EX WB
e: IF ID E1. <-- earlier exception recognized =>
f: IF ID| handle and restart here at e
g: IF|
v
TRAP
b: IF ID E1 E2 E3. <-- resume here
c: IF -- --| <-- never executed
v
TRAP
a: IF ID X1 X2 X3 X4 X5 WB <-- allow to drain
b: IF ID E1 E2 E3. <-- resume here
c: IF ID EX WB| RB <-- roll back dest reg to previous value
d: IF ID EX| .. .. <-- flushed
e: IF ID| .. .. ..
f: IF| .. .. .. ..
v
TRAP
a: IF ID X1 X2 X3 X4 X5 WB RT <-- retires from buffer to reg file
b: IF ID E1 E2 E3. <-- resume here
c: IF ID EX WB| .. <-- completes but doesn't retire
d: IF ID EX| .. .. <-- flushed
e: IF ID| .. .. ..
f: IF| .. .. .. ..
v
TRAP
[Course home page] [Mark's homepage] [CPSC homepage] [Clemson Univ. homepage]
mark@cs.clemson.edu