15
Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D 0(R2), F0 SUBI R1, R1, 8 SUBI R2, R2, 8 BNEZ R2, Loop

Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Embed Size (px)

Citation preview

Page 1: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Example

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Page 2: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

• Speculative Dynamic Machine specification

• Issue rate of 1

• One broadcast per cycle for CDB

• branch takes 1 cycle,

• Load takes 1 cycle,

• integer alu takes 1 cycle,

• float add takes 2 cycle

• float multiply takes 3 cycle.

• These cycle count doesn’t include write to CDB

Page 3: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 N

2 N

3 N

4 N

5 N

6 N

7 N

8 N

9 N

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 N

Add2 N

Add3 N

Mult1 N

Mult2 N

Int1 N

Int2 N

Int3 N

Reservation table

Field F0 f2

Reorder #

Busy n n

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle 0

Page 4: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 Y Ld f0, 0(R1) issue f0 Mem(R1)

2 N

3 N

4 N

5 N

6 N

7 N

8 N

9 N

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 N

Add2 N

Add3 N

Mult1 N

Mult2 N

Int1 Y ld R1 #1

Int2 N

Int3 N

Reservation table

Field F0 f2

Reorder # #1

Busy Y n

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle 1

Page 5: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 Y Ld f0, 0(R1) execute F0 Mem(R1)

2 Y Add.d f0 f0, f2 issue F0 #1+F2

3 N

4 N

5 N

6 N

7 N

8 N

9 N

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 Y addd f2 #1 #2

Add2 N

Add3 N

Mult1 N

Mult2 N

Int1 Y ld R1 #1

Int2 N

Int3 N

Reservation table

Field F0 f2

Reorder # #2

Busy Y N

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle 2

Page 6: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 Y Ld f0, 0(R1) Write F0 Mem(R1)

2 Y Add.d f0 f0, f2 Excute F0 #1+F2

3 Y S.D 0(R1), F0 issue

4 N

5 N

6 N

7 N

8 N

9 N

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 Y addd f2 #1 #2

Add2 N

Add3 N

Mult1 N

Mult2 N

Int1 Y ld R1 #1

Int2 Y sd R1 #2

Int3 N

Reservation table

Field F0 f2

Reorder # #2

Busy Y N

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle 3

Page 7: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 N Ld f0, 0(R1) commit F0 Mem(R1)

2 Y Add.d f0 f0, f2 Excute F0 #1+F2

3 Y S.D 0(R1), F0 Excute

4 Y L.D F0, 0(R2) Issue F0 Mem(R2)

5 N

6 N

7 N

8 N

9 N

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 Y addd f0 f2 #2

Add2 N

Add3 N

Mult1 N

Mult2 N

Int1 N ld R1 #1

Int2 Y sd R1 #2

Int3 Y ld R2 #4

Reservation table

Field F0 f2

Reorder # #4

Busy Y N

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle 4

Page 8: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 N Ld f0, 0(R1) Commit F0 Mem(R1)

2 N Add.d f0 f0, f2 Commit F0 #1+F2

3 N S.D 0(R1), F0 Commit

4 N L.D F0, 0(R2) Commit F0 Mem(R2)

5 Y Mult.D F0, F0, F2 Write F0

6 Y S.D 0(R2), F0 execute

7 Y SUBI R1, R1, 8 Execute R1 R1+8

8 Y SUBI R2, R2, 8 execute R2 R2+8

9 Y Bnez r1, loop Issue

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 N

Add2 N

Add3 N

Mult1 Y Multd f0 f2 #5

Mult2 N

Int1 Y sd r2 #5 #6

Int2 Y Subi R1 #7

Int3 Y subi r2 #8

Reservation table

Field F0 f2

Reorder # #5

Busy Y N

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle n

Page 9: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 N Ld f0, 0(R1) issue F0 Mem(R1)

2 N Add.d f0 f0, f2 Commit F0 #1+F2

3 N S.D 0(R1), F0 Commit

4 N L.D F0, 0(R2) Commit F0 Mem(R2)

5 N Mult.D F0, F0, F2 commit F0 F0*F2

6 Y S.D 0(R2), F0 execute

7 Y SUBI R1, R1, 8 write R1 R1+8

8 Y SUBI R2, R2, 8 execute R2 R2+8

9 Y Bnez r1, loop Issue

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 N

Add2 N

Add3 N

Mult1 N Multd f0 f2 #5

Mult2 N

Int1 Y sd r2 f0 #6

Int2 Y Subi R1 #7

Int3 Y subi r2 #8

Reservation table

Field F0 f2

Reorder #

Busy N N

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle n+1

Page 10: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 Y Ld f0, 0(R1) issue F0 Mem(R1)

2 N Add.d f0 f0, f2 Commit F0 #1+F2

3 N S.D 0(R1), F0 Commit

4 N L.D F0, 0(R2) Commit F0 Mem(R2)

5 N Mult.D F0, F0, F2 commit F0 F0*F2

6 N S.D 0(R2), F0 commit

7 Y SUBI R1, R1, 8 Done write R1 R1+8

8 Y SUBI R2, R2, 8 write R2 R2+8

9 Y Bnez r1, loop Issue

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 N

Add2 N

Add3 N

Mult1 N Multd f0 f2 #5

Mult2 N

Int1 Y ld r1 #1

Int2 N Subi R1 #7

Int3 Y subi r2 #8

Reservation table

Field F0 f2

Reorder # #1

Busy Y N

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Cycle n+2

Page 11: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Entry Busy Instruction State Destination value

1 Y Ld f0, 0(R1) issue F0 Mem(R1)

2 N Add.d f0 f0, f2 Commit F0 #1+F2

3 N S.D 0(R1), F0 Commit

4 N L.D F0, 0(R2) Commit F0 Mem(R2)

5 N Mult.D F0, F0, F2 commit F0 F0*F2

6 N S.D 0(R2), F0 commit

7 Y SUBI R1, R1, 8 Execute R1 R1+8

8 Y SUBI R2, R2, 8 execute R2 R2+8

9 Y Bnez r1, loop Issue

Reorder buffer

Name Busy OP Vj Vk Qj Qk Rob des

Add1 N

Add2 N

Add3 N

Mult1 N Multd f0 f2 #5

Mult2 N

Int1 Y ld r1 #1

Int2 Y Subi R1 #7

Int3 Y subi r2 #8

Reservation table

Field F0 f2

Reorder # #1

Busy Y N

FP register status

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R1, Loop

Cycle n+3

Page 12: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

VLIW exampleLoop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

•Static machine specification

•One delay slot between any true data flow dependency

•One branch delay slot

Page 13: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F0, 0(R2)

Mult.D F0, F0, F2

S.D 0(R2), F0

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F1, 0(R2)

Mult.D F1, F1, F2

S.D 0(R2), F1

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Register rename

Page 14: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Loop: L.D F0, 0(R1)

Add.D F0, F0, F2

S.D 0(R1), F0

L.D F1, 0(R2)

Mult.D F1, F1, F2

S.D 0(R2), F1

SUBI R1, R1, 8

SUBI R2, R2, 8

BNEZ R2, Loop

Instruction reorder

Loop: L.D F0, 0(R1)

L.D F1, 0(R2) Add.D F0, F0, F2

Mult.D F1, F1, F2

S.D 0(R1), F0

S.D 0(R2), F1

SUBI R2, R2, 8 BNEZ R2, Loop SUBI R1, R1, 8

Page 15: Example Loop: L.D F0, 0(R1) Add.D F0, F0, F2 S.D 0(R1), F0 L.D F0, 0(R2) Mult.D F0, F0, F2 S.D0(R2), F0 SUBIR1, R1, 8 SUBIR2, R2, 8 BNEZR2, Loop

Software pipeline

L.D F0, 0(R1)

L.D F1, 0(R2)

Add.D F0, F0, F2

Mult.D F1, F1, F2

S.D 0(R1), F0

S.D 0(R2), F1

SUBI R2, R2, 8

SUBI R1, R1, 8

BNEZ R2, Loop

L.D F0, 0(R1)

L.D F1, 0(R2)

Add.D F0, F0, F2

Mult.D F1, F1, F2

S.D 0(R1), F0

S.D 0(R2), F1

SUBI R2, R2, 8

SUBI R1, R1, 8

BNEZ R2, Loop

L.D F0, 0(R1)

L.D F1, 0(R2)

Add.D F0, F0, F2

Mult.D F1, F1, F2

S.D 0(R1), F0

S.D 0(R2), F1

SUBI R2, R2, 8

SUBI R1, R1, 8

BNEZ R2, Loop

8 copies

Code for one iteration.