code scheduling

127
Spring 2004 Code Scheduling

Upload: eron

Post on 15-Jan-2016

103 views

Category:

Documents


0 download

DESCRIPTION

Code Scheduling. Outline. Modern architectures Delay slots Introduction to instruction scheduling List scheduling Resource constraints Interaction with register allocation Scheduling across basic blocks Trace scheduling Scheduling for loops Loop unrolling Software pipelining. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Code Scheduling

Spring 2004

Code Scheduling

Page 2: Code Scheduling

Kostis Sagonas 2 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 3: Code Scheduling

Kostis Sagonas 3 Spring 2004

Simple Machine Model

• Instructions are executed in sequence– Fetch, decode, execute, store results– One instruction at a time

• For branch instructions, start fetching from a different location if needed– Check branch condition– Next instruction may come from a new location

given by the branch instruction

Page 4: Code Scheduling

Kostis Sagonas 4 Spring 2004

Simple Execution Model

5 Stage pipe-line

Fetch: get the next instructionDecode: figure out what that instruction isExecute: perform ALU operation

address calculation in a memory op

Memory: do the memory access in a mem. op.Write Back: write the results back

fetch decode execute memory write back

Page 5: Code Scheduling

Kostis Sagonas 5 Spring 2004

Execution Models

IF DE EXE MEM WB

IF DE EXE MEM WB

Inst 1

Inst 2

time

Model 1

IF DE EXE MEM WB

IF DE EXE MEM WB

IF DE EXE MEM WB

IF DE EXE MEM WB

IF DE EXE MEM WB

Inst 1

Inst 2

Inst 3

Inst 4

Inst 5

Model 2

Page 6: Code Scheduling

Kostis Sagonas 6 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 7: Code Scheduling

Kostis Sagonas 7 Spring 2004

Handling Branch Instructions

Problem: We do not know the location of the next instruction until later– after DE in jump instructions– after EXE in conditional branch instructions

IF DE EXE MEM WBBranch

IF DE EXE MEM WB

IF DE EXE MEM WB

???

???IF DE EXE MEM WBInst

What to do with the middle 2 instructions?

Page 8: Code Scheduling

Kostis Sagonas 8 Spring 2004

Handling Branch Instructions

What to do with the middle 2 instructions?

1. Stall the pipeline in case of a branch until we know the address of the next instruction

– wasted cycles

IF DE EXE MEM WB

IF DE EXE MEM WB

Branch

Next inst

Page 9: Code Scheduling

Kostis Sagonas 9 Spring 2004

Handling Branch Instructions

What to do with the middle 2 instructions?2. Delay the action of the branch

– Make branch affect only after two instructions– Following two instructions after the branch get

executed regardless of the branch

IF DE EXE MEM WB

IF DE EXE MEM WB

IF DE EXE MEM WB

IF DE EXE MEM WB

Branch

Next seq inst

Next seq inst

Branch target inst

Page 10: Code Scheduling

Kostis Sagonas 10 Spring 2004

Branch Delay Slot(s)

MIPS has a branch delay slot– The instruction after a conditional branch gets

executed even if the code branches to target– Fetching from the branch target takes place only

after that

ble r3, foo

Branch delay slot

What instruction to put in the branch delay slot?

Page 11: Code Scheduling

Kostis Sagonas 11 Spring 2004

Filling the Branch Delay Slot

Simple Solution: Put a no-op

Wasted instruction, just like a stall

noop

ble r3, lbl

Branch delay slot

Page 12: Code Scheduling

Kostis Sagonas 12 Spring 2004

Filling the Branch Delay Slot

• moved instruction executes iff branch executes– Get the instruction from the same basic block as the

branch– Don’t move a branch instruction!

• instruction need to be moved over the branch– branch does not depend on the result of the inst.

prev_instr

prev_instr

Move an instruction from above the branch

ble r3, lbl

Branch delay slot

Page 13: Code Scheduling

Kostis Sagonas 13 Spring 2004

Filling the Branch Delay Slot

Move an instruction dominated by the branch instruction

ble r3, lbl

Branch delay slot

lbl:

dom_instr

dom_instr

Page 14: Code Scheduling

Kostis Sagonas 14 Spring 2004

Filling the Branch Delay Slot

Move an instruction from the branch target– Instruction dominated by target– No other ways to reach target (if so, take care of them)– If conditional branch, instruction should not have a

lasting effect if the branch is not takenble r3, lbl

instr Branch delay slot

lbl:instr

Page 15: Code Scheduling

Kostis Sagonas 15 Spring 2004

Load Delay Slots

Problem: Results of the loads are not available until end of MEM stage

If the value of the load is used…what to do??

IF DE EXE MEM WB

IF DE EXE MEM WB

Load

Use of load

Page 16: Code Scheduling

Kostis Sagonas 16 Spring 2004

Load Delay SlotsIf the value of the load is used…what to do??• Always stall one cycle• Stall one cycle if next instruction uses the value

– Need hardware to do this

• Have a delay slot for load– The new value is only available after two instructions– If next inst. uses the register, it will get the old value

IF DE EXE MEM WB

IF DE EXE MEM WB

IF DE EXE MEM WB

Load

???

Use of load

Page 17: Code Scheduling

Kostis Sagonas 17 Spring 2004

Example

r2 = *(r1 + 4)

r3 = *(r1 + 8)

r4 = r2 + r3

r5 = r2 - 1

goto L1

Page 18: Code Scheduling

Kostis Sagonas 18 Spring 2004

Example

r2 = *(r1 + 4)r3 = *(r1 + 8)noopr4 = r2 + r3r5 = r2 - 1goto L1noop

Assume 1 cycle delay on branches and 1 cycle latency for loads

Page 19: Code Scheduling

Kostis Sagonas 19 Spring 2004

Example

r2 = *(r1 + 4)r3 = *(r1 + 8)r5 = r2 - 1r4 = r2 + r3

goto L1noop

Assume 1 cycle delay on branches and 1 cycle latency for loads

Page 20: Code Scheduling

Kostis Sagonas 20 Spring 2004

Example

r2 = *(r1 + 4)r3 = *(r1 + 8)r5 = r2 - 1

goto L1r4 = r2 + r3

Assume 1 cycle delay on branches and 1 cycle latency for loads

Page 21: Code Scheduling

Kostis Sagonas 21 Spring 2004

Example

r2 = *(r1 + 4)r3 = *(r1 + 8)r5 = r2 - 1goto L1r4 = r2 + r3

Final code after delay slot filling

Page 22: Code Scheduling

Kostis Sagonas 22 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 23: Code Scheduling

Kostis Sagonas 23 Spring 2004

From a Simple Machine Model to a Real Machine Model

• Many pipeline stages– MIPS R4000 has 8 stages

• Different instructions take different amount of time to execute– mult 10 cycles– div 69 cycles– ddiv 133 cycles

• Hardware to stall the pipeline if an instruction uses a result that is not ready

Page 24: Code Scheduling

Kostis Sagonas 24 Spring 2004

Real Machine Model cont.

• Most modern processors have multiple execution units (superscalar)– If the instruction sequence is correct, multiple

operations will take place in the same cycles– Even more important to have the right instruction

sequence

Page 25: Code Scheduling

Kostis Sagonas 25 Spring 2004

Instruction Scheduling

Goal: Reorder instructions so that pipeline stalls are minimized

Constraints on Instruction Scheduling:– Data dependencies– Control dependencies – Resource constraints

Page 26: Code Scheduling

Kostis Sagonas 26 Spring 2004

Data Dependencies

• If two instructions access the same variable, they can be dependent

• Kinds of dependencies – True: write read– Anti: read write– Output: write write

• What to do if two instructions are dependent?– The order of execution cannot be reversed – Reduce the possibilities for scheduling

Page 27: Code Scheduling

Kostis Sagonas 27 Spring 2004

Computing Data Dependencies

• For basic blocks, compute dependencies by walking through the instructions

• Identifying register dependencies is simple– is it the same register?

• For memory accesses– simple: base + offset1 ?= base + offset2– data dependence analysis: a[2i] ?= a[2i+1]– interprocedural analysis: global ?= parameter– pointer alias analysis: p1 ?= p

Page 28: Code Scheduling

Kostis Sagonas 28 Spring 2004

• Using a dependence DAG, one per basic block• Nodes are instructions, edges represent

dependencies

Representing Dependencies

3

1 2

4

2 22

1: r2 = *(r1 + 4)2: r3 = *(r1 + 8)3: r4 = r2 + r34: r5 = r2 - 1

Edge is labeled with latency:v(i j) = delay required between initiation times of i and j minus the execution time required by i

Page 29: Code Scheduling

Kostis Sagonas 29 Spring 2004

Example

1: r2 = *(r1 + 4)

2: r3 = *(r2 + 4)

3: r4 = r2 + r3

4: r5 = r2 - 1

3

1 2

4

2 22

3

Page 30: Code Scheduling

Kostis Sagonas 30 Spring 2004

Another Example

1: r2 = *(r1 + 4)

2: *(r1 + 4) = r3

3: r3 = r2 + r3

4: r5 = r2 - 1

3

1 2

4

2 21

1

Page 31: Code Scheduling

Kostis Sagonas 31 Spring 2004

Control Dependencies and Resource Constraints

• For now, let’s only worry about basic blocks

• For now, let’s look at simple pipelines

Page 32: Code Scheduling

Kostis Sagonas 32 Spring 2004

ExampleResults available in

1 cycle1 cycle1 cycle3 cycles

4 cycles1 cycle3 cycles

1 2

1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: MULC r6,r6,1005: ST r7,4(r6)6: DIVC r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

Page 33: Code Scheduling

Kostis Sagonas 33 Spring 2004

ExampleResults available in

1: LA r1,array 1 cycle2: LD r2,4(r1) 1 cycle3: AND r3,r3,0x00FF 1 cycle4: MULC r6,r6,100 3 cycles5: ST r7,4(r6)6: DIVC r5,r5,100 4 cycles7: ADD r4,r2,r5 1 cycle8: MUL r5,r2,r4 3 cycles9: ST r4,0(r1)

1 2 3 4 5st st

Page 34: Code Scheduling

Kostis Sagonas 34 Spring 2004

ExampleResults available in

1: LA r1,array 1 cycle2: LD r2,4(r1) 1 cycle3: AND r3,r3,0x00FF 1 cycle4: MULC r6,r6,100 3 cycles5: ST r7,4(r6)6: DIVC r5,r5,100 4 cycles7: ADD r4,r2,r5 1 cycle8: MUL r5,r2,r4 3 cycles9: ST r4,0(r1)

1 2 3 4 st st 5 6 7st st st

Page 35: Code Scheduling

Kostis Sagonas 35 Spring 2004

ExampleResults available in

1: LA r1,array 1 cycle2: LD r2,4(r1) 1 cycle3: AND r3,r3,0x00FF 1 cycle4: MULC r6,r6,100 3 cycles5: ST r7,4(r6)6: DIVC r5,r5,100 4 cycles7: ADD r4,r2,r5 1 cycle8: MUL r5,r2,r4 3 cycles9: ST r4,0(r1)

1 2 3 4 st st 5 6 st st st 7 8

Page 36: Code Scheduling

Kostis Sagonas 36 Spring 2004

ExampleResults available in

1: LA r1,array 1 cycle2: LD r2,4(r1) 1 cycle3: AND r3,r3,0x00FF 1 cycle4: MULC r6,r6,100 3 cycles5: ST r7,4(r6)6: DIVC r5,r5,100 4 cycles7: ADD r4,r2,r5 1 cycle8: MUL r5,r2,r4 3 cycles9: ST r4,0(r1)

1 2 3 4 st st 5 6 st st st 7 8 9

14 cycles!

Page 37: Code Scheduling

Kostis Sagonas 37 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 38: Code Scheduling

Kostis Sagonas 38 Spring 2004

List Scheduling Algorithm

• Idea– Do a topological sort of the dependence DAG– Consider when an instruction can be scheduled

without causing a stall– Schedule the instruction if it causes no stall and all

its predecessors are already scheduled

• Optimal list scheduling is NP-complete– Use heuristics when necessary

Page 39: Code Scheduling

Kostis Sagonas 39 Spring 2004

List Scheduling Algorithm

• Create a dependence DAG of a basic block

• Topological SortREADY = nodes with no predecessors

Loop until READY is empty

Schedule each node in READY when no stalling

READY += nodes whose predecessors have all been scheduled

Page 40: Code Scheduling

Kostis Sagonas 40 Spring 2004

Heuristics for selection

Heuristics for selecting from the READY list1. pick the node with the longest path to a leaf in the

dependence graph

2. pick a node with the most immediate successors

3. pick a node that can go to a less busy pipeline (in a superscalar implementation)

Page 41: Code Scheduling

Kostis Sagonas 41 Spring 2004

Heuristics for selection

Pick the node with the longest path to a leaf in the dependence graph

Algorithm (for node x)– If x has no successors dx = 0

– dx = MAX( dy + cxy) for all successors y of x

Use reverse breadth-first visiting order

Page 42: Code Scheduling

Kostis Sagonas 42 Spring 2004

Heuristics for selection

Pick a node with the most immediate successors

Algorithm (for node x):– fx = number of successors of x

Page 43: Code Scheduling

Kostis Sagonas 43 Spring 2004

ExampleResults available in

1: LA r1,array 1 cycle2: LD r2,4(r1) 1 cycle3: AND r3,r3,0x00FF 1 cycle4: MULC r6,r6,100 3 cycles5: ST r7,4(r6)6: DIVC r5,r5,100 4 cycles7: ADD r4,r2,r5 1 cycle8: MUL r5,r2,r4 3 cycles9: ST r4,0(r1)

Page 44: Code Scheduling

Kostis Sagonas 44 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

31: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: MULC r6,r6,1005: ST r7,4(r6)6: DIVC r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

Page 45: Code Scheduling

Kostis Sagonas 45 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { }

Page 46: Code Scheduling

Kostis Sagonas 46 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { }1, 3, 4, 6 6, 1, 4, 3

Page 47: Code Scheduling

Kostis Sagonas 47 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 6, 1, 4, 3 }

6

Page 48: Code Scheduling

Kostis Sagonas 48 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 1, 4, 3 }

6 1

1

Page 49: Code Scheduling

Kostis Sagonas 49 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 4, 3 }

6 1

2

Page 50: Code Scheduling

Kostis Sagonas 50 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 2, 4, 3 }

6 1

2

Page 51: Code Scheduling

Kostis Sagonas 51 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 2, 4, 3 }

6 1 2

Page 52: Code Scheduling

Kostis Sagonas 52 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 4, 3 }

6 1 2

7

Page 53: Code Scheduling

Kostis Sagonas 53 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 7, 4, 3 }

6 1 2

7

Page 54: Code Scheduling

Kostis Sagonas 54 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 7, 4, 3 }

6 1 2 4

Page 55: Code Scheduling

Kostis Sagonas 55 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 7, 3 }

6 1 2 4

5

Page 56: Code Scheduling

Kostis Sagonas 56 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 7, 3, 5 }

6 1 2 4

7

Page 57: Code Scheduling

Kostis Sagonas 57 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 7, 3, 5 }

6 1 2 4 7

Page 58: Code Scheduling

Kostis Sagonas 58 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 3, 5 }

6 1 2 4 7

8, 9

Page 59: Code Scheduling

Kostis Sagonas 59 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 3, 5, 8, 9 }

6 1 2 4 7 3

3

Page 60: Code Scheduling

Kostis Sagonas 60 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 5, 8, 9 }

6 1 2 4 7 3

5

Page 61: Code Scheduling

Kostis Sagonas 61 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 5, 8, 9 }

6 1 2 4 7 3 5

Page 62: Code Scheduling

Kostis Sagonas 62 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 8, 9 }

6 1 2 4 7 3 5

8

Page 63: Code Scheduling

Kostis Sagonas 63 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 8, 9 }

6 1 2 4 7 3 5 8

Page 64: Code Scheduling

Kostis Sagonas 64 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 9 }

6 1 2 4 7 3 5 8

9

Page 65: Code Scheduling

Kostis Sagonas 65 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { 9 }

6 1 2 4 7 3 5 8 9

Page 66: Code Scheduling

Kostis Sagonas 66 Spring 2004

Example1

6

8

2

7

9

1

1

3

4

1

4

5

3

3

d=0 d=0

d=0

d=0 d=3

d=3

d=7d=4

d=5f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

READY = { }

6 1 2 4 7 3 5 8 9

Page 67: Code Scheduling

Kostis Sagonas 67 Spring 2004

ExampleResults available in

1: LA r1,array 1 cycle2: LD r2,4(r1) 1 cycle3: AND r3,r3,0x00FF 1 cycle4: MULC r6,r6,100 3 cycles5: ST r7,4(r6)6: DIVC r5,r5,100 4 cycles7: ADD r4,r2,r5 1 cycle8: MUL r5,r2,r4 3 cycles9: ST r4,0(r1)

9 cycles6 1 2 4 7 3 5 8 9

1 2 3 4 st st 5 6 st st st 7 8 9

14 cyclesvs.

Page 68: Code Scheduling

Kostis Sagonas 68 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 69: Code Scheduling

Kostis Sagonas 69 Spring 2004

Resource Constraints

• Modern machines have many resource constraints

• Superscalar architectures:– can run few parallel operations– but have constraints

Page 70: Code Scheduling

Kostis Sagonas 70 Spring 2004

Resource Constraints of a Superscalar Processor

Example:– 1 integer operation

ALUop dest, src1, src2 # in 1 clock cycle

In parallel with– 1 memory operation

LD dst, addr # in 2 clock cycles ST src, addr # in 1 clock cycle

Page 71: Code Scheduling

Kostis Sagonas 71 Spring 2004

List Scheduling Algorithm with Resource Constraints

• Represent the superscalar architecture as multiple pipelines– Each pipeline represents some resource

Page 72: Code Scheduling

Kostis Sagonas 72 Spring 2004

List Scheduling Algorithm with Resource Constraints

• Represent the superscalar architecture as multiple pipelines– Each pipeline represents some resource

• Example– One single cycle ALU unit– One two-cycle pipelined memory unit

ALUop

MEM 1

MEM 2

Page 73: Code Scheduling

Kostis Sagonas 73 Spring 2004

List Scheduling Algorithm with Resource Constraints

• Create a dependence DAG of a basic block

• Topological SortREADY = nodes with no predecessors

Loop until READY is empty

Let n READY be the node with the highest priority

Schedule n in the earliest slot

that satisfies precedence + resource constraints

Update READY

Page 74: Code Scheduling

Kostis Sagonas 74 Spring 2004

1

6

8

2

7

9

1

2

1

1

1

4

5

23

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

ALUop

MEM 1

MEM 2

READY = { 1, 6, 4, 3 } d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0 1

1

Page 75: Code Scheduling

Kostis Sagonas 75 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

ALUop

MEM 1

MEM 2

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

1

READY = { 6, 4, 3 }

Page 76: Code Scheduling

Kostis Sagonas 76 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

ALUop

MEM 1

MEM 2

READY = { 2, 6, 4, 3 }

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

1

2

2

2

Page 77: Code Scheduling

Kostis Sagonas 77 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 ALUop

MEM 1

2 MEM 2

READY = { 6, 4, 3 }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=06

Page 78: Code Scheduling

Kostis Sagonas 78 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 ALUop

MEM 1

2 MEM 2

READY = { 4, 3 } 7

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

Page 79: Code Scheduling

Kostis Sagonas 79 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 ALUop

MEM 1

4

4 2 MEM 2

READY = { 4, 7, 3 }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=04

Page 80: Code Scheduling

Kostis Sagonas 80 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 ALUop

4 MEM 1

4 2 MEM 2

READY = { 7, 3 } 5

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

Page 81: Code Scheduling

Kostis Sagonas 81 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 7 ALUop

4 MEM 1

4 2 MEM 2

READY = { 7, 3, 5 }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=07

Page 82: Code Scheduling

Kostis Sagonas 82 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 ALUop

4 MEM 1

4 2 MEM 2

READY = { 3, 5 } 8, 9

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

7

Page 83: Code Scheduling

Kostis Sagonas 83 Spring 2004

7

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 ALUop

4 MEM 1

4 2 MEM 2

READY = { 3, 5, 8, 9 }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=03

3

Page 84: Code Scheduling

Kostis Sagonas 84 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 3 7 ALUop

4 MEM 1

4 2 MEM 2

READY = { 5, 8, 9 }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=05

5

Page 85: Code Scheduling

Kostis Sagonas 85 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 3 7 ALUop

4 5 MEM 1

4 2 MEM 2

READY = { 8, 9 }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

8

8

Page 86: Code Scheduling

Kostis Sagonas 86 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 3 7 8 ALUop

4 5 MEM 1

4 2 MEM 2

READY = { 9 }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

9

9

Page 87: Code Scheduling

Kostis Sagonas 87 Spring 2004

Example1: LA r1,array2: LD r2,4(r1)3: AND r3,r3,0x00FF4: LD r6,8(sp)5: ST r7,4(r6)6: ADD r5,r5,1007: ADD r4,r2,r58: MUL r5,r2,r49: ST r4,0(r1)

1 6 3 7 8 ALUop

4 5 9 MEM 1

4 2 MEM 2

READY = { }

2

1

6

8

2

7

9

1

2

1

1

1

4

5

23

d=0 d=0

d=0

d=0 d=2

d=1

d=2d=3

d=4f=1f=0

f=0f=1f=1

f=1

f=2

f=0 f=0

Page 88: Code Scheduling

Kostis Sagonas 88 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 89: Code Scheduling

Kostis Sagonas 89 Spring 2004

Register Allocation and Instruction Scheduling

• If register allocation is performed before instruction scheduling– the choices for scheduling are restricted

Page 90: Code Scheduling

Kostis Sagonas 90 Spring 2004

Example

1: LD r2,0(r1)2: ADD r3,r3,r23: LD r2,4(r5)4: ADD r6,r6,r2

1

4

2

3

3

1

3

1 1

1

2 4ALUop

1 3 MEM 1

1 3 MEM 2

Page 91: Code Scheduling

Kostis Sagonas 91 Spring 2004

Example

1: LD r2,0(r1)2: ADD r3,r3,r23: LD r2,4(r5)4: ADD r6,r6,r2

Anti-dependence

How about using a different register?

1

4

2

3

3

1

3

1 1

1

Page 92: Code Scheduling

Kostis Sagonas 92 Spring 2004

Example

1: LD r2,0(r1)2: ADD r3,r3,r23: LD r4,4(r5)4: ADD r6,r6,r4

1

4

2

3

3

3

2 4ALUop

1 3 MEM 1

1 3MEM 2

Page 93: Code Scheduling

Kostis Sagonas 93 Spring 2004

Register Allocation and Instruction Scheduling

• If register allocation is performed before instruction scheduling– the choices for scheduling are restricted

• If instruction scheduling is performed before register allocation– register allocation may spill registers– will change the carefully done schedule!!!

Page 94: Code Scheduling

Kostis Sagonas 94 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 95: Code Scheduling

Kostis Sagonas 95 Spring 2004

Scheduling across basic blocks

• Number of instructions in a basic block is small– Cannot keep a multiple units with long pipelines

busy by just scheduling within a basic block

• Need to handle control dependencies– Scheduling constraints across basic blocks– Scheduling policy

Page 96: Code Scheduling

Kostis Sagonas 96 Spring 2004

Moving across basic blocks

Downward to adjacent basic block

A

B C

A path to B that does not execute A?

Page 97: Code Scheduling

Kostis Sagonas 97 Spring 2004

Moving across basic blocks

Upward to adjacent basic block

A

B C

A path from C that does not reach A?

Page 98: Code Scheduling

Kostis Sagonas 98 Spring 2004

Control Dependencies

if ( . . . )

a = b op c

if ( . . . )

d = *(a1)

Constraints in moving instructions across basic blocks

if (c != 0 )

a = b / c

Not allowed if e.g.

if(valid_address(a1))

d = *(a1)

Not allowed if e.g.

Page 99: Code Scheduling

Kostis Sagonas 99 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 100: Code Scheduling

Kostis Sagonas 100 Spring 2004

Trace Scheduling

• Find the most common trace of basic blocks– Use profile information

• Combine the basic blocks in the trace and schedule them as one block

• Create compensating (clean-up) code if the execution goes off-trace

Page 101: Code Scheduling

Kostis Sagonas 101 Spring 2004

Trace Scheduling

D

B C

A

H

F G

E

Page 102: Code Scheduling

Kostis Sagonas 102 Spring 2004

Trace Scheduling

D

B C

A

H

F G

E

Page 103: Code Scheduling

Kostis Sagonas 103 Spring 2004

Trace Scheduling

D

B

A

H

G

E

Page 104: Code Scheduling

Kostis Sagonas 104 Spring 2004

Trace Scheduling

D

B

A

H

G

E

Page 105: Code Scheduling

Kostis Sagonas 105 Spring 2004

Trace Scheduling

D

B

A

H

G

E

Page 106: Code Scheduling

Kostis Sagonas 106 Spring 2004

Large Basic Blocks via Code Duplication

• Creating large extended basic blocks by duplication

• Schedule the larger blocks

D

B C

A

E

B C

A

D

E

D

E

Page 107: Code Scheduling

Kostis Sagonas 107 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 108: Code Scheduling

Kostis Sagonas 108 Spring 2004

Scheduling for Loops

• Loop bodies are typically small

• But a lot of time is spend in loops due to their iterative nature

• Need better ways to schedule loops

Page 109: Code Scheduling

Kostis Sagonas 109 Spring 2004

Loop Example

Machine:– One load/store unit

• load 2 cycles• store 2 cycles

– Two arithmetic units• add 2 cycles• branch 2 cycles (no delay slot)• multiply 3 cycles

– Both units are pipelined (initiate one op each cycle)

Page 110: Code Scheduling

Kostis Sagonas 110 Spring 2004

Loop Example

Source Codefor i = 1 to N A[i] = A[i] * b

Assembly Codeloop: ld r6, (r2) mul r6, r6, r3 st r6, (r2) add r2, r2, 4 ble r2, r5, loop

Page 111: Code Scheduling

Kostis Sagonas 111 Spring 2004

Loop Example

Assembly Codeloop: ld r6, (r2) mul r6, r6, r3 st r6, (r2) add r2, r2, 4 ble r2, r5, loop

Schedule (9 cycles per iteration)ld st

ld st mul ble

mul ble mul

add add

Page 112: Code Scheduling

Kostis Sagonas 112 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 113: Code Scheduling

Kostis Sagonas 113 Spring 2004

Loop Unrolling

Oldest compiler trick of the trade:Unroll the loop body a few times

Pros:– Creates a much larger basic block for the body– Eliminates few loop bounds checks

Cons:– Much larger program– Setup code (# of iterations < unroll factor)– Beginning and end of the schedule can still have

unused slots

Page 114: Code Scheduling

Kostis Sagonas 114 Spring 2004

Loop Example

Schedule (8 cycles per iteration)ld st ld st

ld st ld st mul mul ble

mul mul blemul mul

add add add add

loop:ld r6, (r2)mul r6, r6, r3st r6, (r2)add r2, r2, 4ble r2, r5, loop

loop:ld r6,(r2)mul r6, r6, r3st r6,(r2)add r2, r2, 4ld r6,(r2)mul r6, r6, r3st r6,(r2)add r2, r2, 4ble r2, r5, loop

Page 115: Code Scheduling

Kostis Sagonas 115 Spring 2004

Loop Unrolling

• Rename registers– Use different registers in different iterations

Page 116: Code Scheduling

Kostis Sagonas 116 Spring 2004

Loop Example

loop:ld r6, (r2)mul r6, r6, r3st r6, (r2)add r2, r2, 4ld r6, (r2)mul r6, r6, r3st r6, (r2)add r2, r2, 4ble r2, r5, loop

loop:ld r6, (r2)mul r6, r6, r3st r6, (r2)add r2, r2, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r2, r2, 4ble r2, r5, loop

Page 117: Code Scheduling

Kostis Sagonas 117 Spring 2004

Loop Unrolling

• Rename registers– Use different registers in different iterations

• Eliminate unnecessary dependencies – again, use more registers to eliminate true, anti and

output dependencies– eliminate dependent-chains of calculations when

possible

Page 118: Code Scheduling

Kostis Sagonas 118 Spring 2004

Loop Example

loop:ld r6, (r2)mul r6, r6, r3st r6, (r2)add r2, r2, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r2, r2, 4ble r2, r5, loop

loop:ld r6, (r1)mul r6, r6, r3st r6, (r1)add r2, r1, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r1, r2, 4ble r1, r5, loop

Page 119: Code Scheduling

Kostis Sagonas 119 Spring 2004

Loop Example

loop:ld r6, (r1)mul r6, r6, r3st r6, (r1)add r2, r1, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r1, r2, 4ble r1, r5, loop

loop:ld r6, (r1)mul r6, r6, r3st r6, (r1)add r2, r1, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r1, r2, 4ble r1, r5, loop

Page 120: Code Scheduling

Kostis Sagonas 120 Spring 2004

Loop Example

loop:ld r6, (r1)mul r6, r6, r3st r6, (r1)add r2, r1, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r1, r2, 4ble r1, r5, loop

loop:ld r6, (r1)mul r6, r6, r3st r6, (r1)add r2, r1, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r1, r1, 8ble r1, r5, loop

Page 121: Code Scheduling

Kostis Sagonas 121 Spring 2004

Loop Exampleloop:

ld r6, (r1)mul r6, r6, r3st r6, (r1)add r2, r1, 4ld r7, (r2)mul r7, r7, r3st r7, (r2)add r1, r1, 8ble r1, r5, loop

Schedule (4.5 cycles per iteration)ld ld st st

ld ld st stmul mul ble

mul mul blemul mul

add addadd add

Page 122: Code Scheduling

Kostis Sagonas 122 Spring 2004

Outline

• Modern architectures• Delay slots• Introduction to instruction scheduling• List scheduling• Resource constraints• Interaction with register allocation• Scheduling across basic blocks• Trace scheduling• Scheduling for loops• Loop unrolling• Software pipelining

Page 123: Code Scheduling

Kostis Sagonas 123 Spring 2004

Software Pipelining

• Try to overlap multiple iterations so that the slots will be filled

• Find the steady-state window so that:– all the instructions of the loop body is executed – but from different iterations

Page 124: Code Scheduling

Kostis Sagonas 124 Spring 2004

Loop ExampleAssembly Code

loop:ld r6, (r2)mul r6, r6, r3st r6, (r2)add r2, r2, 4ble r2, r5, loop

Schedule

ld6ld5ld5

mul5

ld4ld4

mul4mul4

mul4

ld stld st

mul blemul ble

muladd

add

ld1 st1ld1 st1

mul1 ble1mul1 ble1

mul1add1

add1

ld2 st2ld2 st2

mul2 ble2mul2 ble2

mul2add2

add2

ld3 st3ld3 st3

mul3mul3

mul3add3

add3

Page 125: Code Scheduling

Kostis Sagonas 125 Spring 2004

Loop Exampleld3 st1st ld3mul2 ble

mul2mul1

add1add

Assembly Codeloop:ld r6, (r2)mul r6, r6, r3st r6, (r2)add r2, r2, 4ble r2, r5, loop

Schedule (2 cycles per iteration)

Page 126: Code Scheduling

Kostis Sagonas 126 Spring 2004

Loop Example4 iterations are overlapped

– values of r3 and r5 don’t change

– 4 regs for &A[i] (r2)– each addr. incremented by 4*4

– 4 regs to keep value A[i] (r6)

– Same registers can be reused after 4 of these blocksgenerate code for 4 blocks, otherwise need to move

ld3 st1st ld3mul2 ble

mul2mul1

add1add

loop: ld r6, (r2) mul r6, r6, r3 st r6, (r2) add r2, r2, 4 ble r2, r5, loop

Page 127: Code Scheduling

Kostis Sagonas 127 Spring 2004

Software Pipelining

• Optimal use of resources• Need a lot of registers

– Values in multiple iterations need to be kept• Issues in dependencies

– Executing a store instruction in an iteration before branch instruction is executed for a previous iteration (writing when it should not have)

– Loads and stores are issued out-of-order (need to figure-out dependencies before doing this)

• Code generation issues– Generate pre-amble and post-amble code– Multiple blocks so no register copy is needed