CS 3330: Pipelining
6 October 2016
1
CS 3330: Pipelining 6 October 2016 1 Human pipeline: laundry - - PowerPoint PPT Presentation
CS 3330: Pipelining 6 October 2016 1 Human pipeline: laundry whites sheets sheets sheets colors colors colors whites whites whites colors colors colors whites whites 14:00 Washer 13:00 12:00 11:00 Table Folding Dryer
1
11:00 12:00 13:00 14:00
11:00 12:00 13:00 14:00
2
11:00 12:00 13:00 14:00
11:00 12:00 13:00 14:00
2
11:00 12:00 13:00 14:00
3
11:00 12:00 13:00 14:00
3
11:00 12:00 13:00 14:00
4
11:00 12:00 13:00 14:00
5
11:00 12:00 13:00 14:00
5
11:00 12:00 13:00 14:00
5
11:00 12:00 13:00 14:00
6
11:00 12:00 13:00 14:00
6
11:00 12:00 13:00 14:00
6
0 ps 50 ps 100 ps
7
0 ps 50 ps 100 ps
7
0 ps 50 ps 100 ps
7
0 ps 100 ps 200 ps 300 ps 400 ps 500 ps
0 ps 100 ps 200 ps 300 ps 400 ps 500 ps
8
0 ps 100 ps 200 ps 300 ps 400 ps 500 ps
0 ps 100 ps 200 ps 300 ps 400 ps 500 ps
8
A (t + 1)
9
A (t + 1)
9
10
10
10
A (t + 1)
11
A (t + 1)
11
A (t + 1)
ps ps ps ps ps ps ps ps ps
A
12
A (t + 1)
10 ps 25 ps 25 ps 10 ps 10 ps 25 ps 10 ps 25 ps 10 ps
A
12
A (t + 1)
10 ps 25 ps 25 ps 10 ps 10 ps 25 ps 10 ps 25 ps 10 ps
A
12
A (t + 1)
10 ps 25 ps 25 ps 10 ps 10 ps 25 ps 10 ps 25 ps 10 ps
A
12
A (t + 1)
10 ps 25 ps 25 ps 10 ps 10 ps 25 ps 10 ps 25 ps 10 ps
A
12
logic (all)
logic (1/2)
logic (2/2)
logic (1/3)
logic (2/3)
logic (3/3)
13
14
14
14
15
15
A (t + 1)
10 ps 25 ps 25 ps 10 ps 10 ps 25 ps 10 ps 25 ps 10 ps
A
16
logic (all)
logic (1/2)
logic (2/2)
logic (1/3)
logic (2/3)
logic (3/3)
17
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
18
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
18
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
18
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
18
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
19
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
19
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
19
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
addq %r8, %r9 //(1) address of (2) addq %r10, %r11 //(2) reg #s 8, 9 from (1) reg #s 10, 11 from (2) reg # 9, values for (1)
20
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
addq %r8, %r9 //(1) address of (2) addq %r10, %r11 //(2) reg #s 8, 9 from (1) reg #s 10, 11 from (2) reg # 9, values for (1)
20
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
addq %r8, %r9 //(1) address of (2) addq %r10, %r11 //(2) reg #s 8, 9 from (1) reg #s 10, 11 from (2) reg # 9, values for (1)
20
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
addq %r8, %r9 //(1) address of (2) addq %r10, %r11 //(2) reg #s 8, 9 from (1) reg #s 10, 11 from (2) reg # 9, values for (1)
20
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 0x4 10 11 800 900 9 3 0x6 12 13 1000 1100 11 1700 9 4 9 8 1200 1300 13 2100 11 5 1700 800 8 2500 13 6 2500 8 fetch/decode decode/execute execute/writeback
21
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 0x4 10 11 800 900 9 3 0x6 12 13 1000 1100 11 1700 9 4 9 8 1200 1300 13 2100 11 5 1700 800 8 2500 13 6 2500 8 fetch/decode decode/execute execute/writeback
21
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 0x4 10 11 800 900 9 3 0x6 12 13 1000 1100 11 1700 9 4 9 8 1200 1300 13 2100 11 5 1700 800 8 2500 13 6 2500 8 fetch/decode decode/execute execute/writeback
21
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 0x4 10 11 800 900 9 3 0x6 12 13 1000 1100 11 1700 9 4 9 8 1200 1300 13 2100 11 5 1700 800 8 2500 13 6 2500 8 fetch/decode decode/execute execute/writeback
21
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 0x4 10 11 800 900 9 3 0x6 12 13 1000 1100 11 1700 9 4 9 8 1200 1300 13 2100 11 5 1700 800 8 2500 13 6 2500 8 fetch/decode decode/execute execute/writeback
21
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
22
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ALU
23
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ALU
23
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ALU
23
Instr. Mem.
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ALU
23
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 9 8 800 900 9 3 900 800 8 1700 9 4 1700 8 fetch/decode decode/execute execute/writeback
24
25
26
27
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2* 8 9 2 0x2* F F 800 900 9 3 0x2 F F
1700 9 4 9 8
5 1700 800 8
6 2500 8 fetch/decode decode/execute execute/writeback
28
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2* 8 9 2 0x2* F F 800 900 9 3 0x2 F F
1700 9 4 9 8
5 1700 800 8
6 2500 8 fetch/decode decode/execute execute/writeback
28
PC
Instr. Mem.
register fjle
srcA srcB dstM dstE next R[dstM] next R[dstE] R[srcA] R[srcB] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2* 8 9 2 0x2* F F 800 900 9 3 0x2 F F
1700 9 4 9 8
5 1700 800 8
6 2500 8 fetch/decode decode/execute execute/writeback
28
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC SF/ZF rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 0/1 1 0x2 0/1 8 9 2 ??? 0/1 F F 800 900 9 fetch/decode decode/execute execute/writeback
29
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC SF/ZF rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 0/1 1 0x2 0/1 8 9 2 ??? 0/1 F F 800 900 9 fetch/decode decode/execute execute/writeback
29
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC SF/ZF rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 0/1 1 0x2* 0/1 8 9 2 0x2* 0/1 F F 800 900 9 3 0x2 0/0 F F
1700 9 4 0x10 0/0 F F
5 10 11
6 1000 1100 11
fetch/decode decode/execute execute/writeback
30
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC SF/ZF rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 0/1 1 0x2* 0/1 8 9 2 0x2* 0/1 F F 800 900 9 3 0x2 0/0 F F
1700 9 4 0x10 0/0 F F
5 10 11
6 1000 1100 11
fetch/decode decode/execute execute/writeback
30
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC SF/ZF rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 0/1 1 0x2* 0/1 8 9 2 0x2* 0/1 F F 800 900 9 3 0x2 0/0 F F
1700 9 4 0x10 0/0 F F
5 10 11
6 1000 1100 11
fetch/decode decode/execute execute/writeback
30
31
32
33