scheduler for in-order processors what’s present and what ... · title 44pt title case...

28
© ARM 2016 Scheduler for in-order processors What’s present and what’s missing in LLVM? Javed Absar LLVM Cauldron, Hebden-Bridge Staff Engineer, Compilation Tools September 8, 2016

Upload: others

Post on 18-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

Title 44pt Title Case

Affiliations 24pt sentence case

20pt sentence case

© ARM 2016

Scheduler for in-order processors What’s present and what’s missing in LLVM?

Javed Absar

LLVM Cauldron, Hebden-Bridge

Staff Engineer, Compilation Tools

September 8, 2016

Page 2: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 2

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Contents

Introduction to LLVM Machine Scheduler

Carp - A generic in-order processor

Develop Scheduler for Carp in LLVM

Discussion – what’s present and what’s missing?

Conclusion

Page 3: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 3

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Progress

Introduction

LLVM Machine

Scheduler

Carp –

A generic

in-order

processor

Develop

Scheduler

for Carp

In LLVM

What’s present

What’s missing? Conclusion

Page 4: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 4

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Instruction Scheduling

Re-order instructions to improve performance

Reduce pipeline stalls, increase IPC

In-order vs Out-of-order

In-order: fetched, executed & complete in compiler generated program order

Statically scheduled

Out-of-order: fetch and completion in order

Lockup-free cache, speculative execution

Dynamically scheduled

Focus on in-order processor in this presentation

Page 5: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 5

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Instruction Scheduling

General scheduling algorithms -

Create dependence graph

Topological sort– many choices NPC

List scheduling (heuristic, sub-optimal solutions)

Decreasing time, critical path, register pressure, clustering,

Require –

latencies, resource cycles, micro-ops

a ALU

ALU

LDST

e

b

c

f

g

d

7

6

2

3

4

3

3

3

[8]

[2]

[11]

[5]

[8] [14]

h

4

[4]

DIV

MAC

Page 6: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 6

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

LLVM Scheduler

Machine scheduler (MIScheduler) ~ 2012

Per-operand approach

Latest and greatest, adapted as Scheduler of the future

List Scheduler (with prioritization)

Function Pass, works at Machine Instrs level (ScheduleDAG/SUnit)

Previously, in LLVM

Before ~ 2008: At end of SelectionDAG

SDNodes (ScheduleDAG)– scheduling units

Page 7: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 7

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

LLVM Machine Scheduler

Enabling and using –

Choose policy

-misched-topdown, -misched-bottom-up

Choose options

–misched-cutoff –misched-limit –misched-regpressure –misched-cyclicpath –misched-cluster

$ clang ...-mllvm -enable-misched -mllvm -enable-post-misched -mllvm -misched-postra

$ llc ... -mcpu=carp -enable-misched -enable-post-misched -misched-postra -misched-topdown

Page 8: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 8

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Progress

Introduction

LLVM Machine

Scheduler

Carp –

A generic

in-order

processor

Modelling Carp

In LLVM

What’s present

What’s missing? Conclusion

Page 9: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 9

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP – A generic in-order processor

Functional Units

Fully Pipelined, forwarding facility

2 ALU, 2 MUL, 1 DIV, 1 LD/ST

Instruction fetch

Fetch multiple instructions data per cycle

Instruction Queue (IQ)

De-couple instruction fetch from decode/execution

Multiple issue

Issue up to two instructions (in program order)

Once issued proceed together

Score-board

Issues instructions when data, resource available

Status tables

Branch Prediction

Predict call-return address, branch-taken

Pipeline flush in case of mis-prediction

Page 10: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 10

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Pipeline

PF1 PF0 DP5

address

generation

fetch (PFU) decode/issue

RAM access

decode

branch

prediction

I

Q

PF2 PF3 DP0 DP1

data-path

DP2 DP3 DP4

decode

reg.

read

address

generation

RAM access exceptions STORE

reg.

write shift

shift

multiplier

load/store

ALI

MUL

multiplier

Forwarding / Bypass

Score-board

dual issue /

hazard det.

Page 11: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 11

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Pipeline - Forwarding

Consumed - when value is consumed

Produced– earliest when value is produced

Complex map of different ‘Produced x Consumed’

Same cycle forwarding

DP2

DP3

DP4

DP1 LSL r0, r1, #2 ADD r2, r0, #12 STR r2, [r3] LDR r5, [r4] stall ADD r6,r0, r5

… LSL r0, r1, #2 ADD r2, r0, #12 STR r2, [r3] LDR r5, [r4] stall

... ... LSL r0, r1, #2 ADD r2, r0, #12 STR r2, [r3] LDR r5, [r4]

... ... … LSL r0, r1, #2 ADD r2, r0, #12 STR r2, [r3]

time

Page 12: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 12

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Pipeline – Dual Issue

Earlier (or sole in case of single issue) instruction - slot-0

Sliding window

Cannot independently interlock

Not dual-issued if:

Structural dependence or data dependence

slot-1 instruction increases interlock

Multi-cycle instructions (dual issue only in last cycle)

Loads to PC

0x08000234: e3018000 .... MOVW r8,#0x1000 0x08000238: e240a001 ..@. SUB r10,r0,#1 0x0800023c: e3a07000 .p.. MOV r7,#0 0x08000240: e3408014 ..@. MOVT r8,#0x14 0x08000244: e0894107 .A.. ADD r4,r9,r7,LSL #2 0x08000248: e2877001 .p.. ADD r7,r7,#1 0x0800024c: e5945004 .P.. LDR r5,[r4,#4] 0x08000250: e5d50000 .... LDRB r0,[r5,#0] 0x08000254: e350002d -.P. CMP r0,#0x2d 0x08000258: 1a000014 .... BNE 0x80002b0

SLOT-0

SLOT-1

Page 13: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 13

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Instruction Flow in pipeline

S0-DP0 MUL ROR STR STR STR - - - LDR SUB ADD - - - -

S0-DP1 - MUL ROR ROR ROR STR - - - LDR SUB ADD - - - -

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

S0-DP2 - - MUL - - ROR STR - - - LDR SUB ADD ADD ADD

S0-DP3 - - - MUL - - ROR STR - - - LDR SUB SUB SUB ADD

S0-DP4 - - - - MUL - - ROR STR - - - LDR LDR LDR SUB

S1-DP0 SUB ADD - - - - - - MOV MUL - - - - -

S1-DP1 - SUB ADD ADD ADD - - - - MOV MUL - - - -

S1-DP2 - - SUB - - ADD - - - - MOV MUL - - -

S1-DP3 - - - SUB - - ADD - - - - MOV MUL MUL MUL -

S1-DP4 - - - - SUB - - ADD - - - - MOV MOV MOV MUL

Page 14: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 14

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Progress

Introduction

LLVM Machine

Scheduler

Carp –

A generic

in-order

processor

Modelling Carp

In LLVM

What’s present

What’s missing? Conclusion

Page 15: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 15

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Machine Scheduler in LLVM

MachineSchedContext

+ MF, MLI, MDT, PassConfig

MachineSchedPolicy

+ OnlyTopDown, OnlyBotUp

+ ShouldTrackPressure

MachineSchedStrategy

<< interface >>

+ -

+ initPolicy( )

+ shouldTrackPressure( )

+ pickNode(bool) = 0;

+ schedNode(SUnit) = 0;

+ releaseTopNode(Sunit *..)

+ releaseBottomNode( Sunit *)

ScheduleDAGInstrs

+ buildSchedGraph // from MBB

+ virtual void schedule( ) = 0;

+ getSchedClass( Sunit *)

ScheduleDAGMI

+ canAddEdge(Succ, Pred)

+ addEdge( SuccSU, Sdep)

+ schedule( ) //implement I/F

# initQueues( TopRoots, BotRoots)

# updateQueues()

# findRootsAndBiasEdges( …)

# releaseSucc(SU, Sdep *SuccEdge

# releasePred(SU, Sdep *PredEdge)

+ unq_ptr<MachedSchedStr> SchedImpl

+ ScheduleDAGTopologicalSort Topo

+ MBB::iterator CurrentTop //unsched

+ MBB::iterator CurrentBot //unsched

ScheduleDAGMILive

+ isTrackingPressure( )

+ getRegPressure( )

+ getDFSResult( )

+ initQueues( )

# SchedDFSResult *DFSResult

# BitVector ScheduledTrees ReadyQueue

+ ID, Name, <Sunit*> Queue

+ push(), pop(), empty()

SchedRemainder

+ CriticalPath, RemIssue

+ init(), reset( )

SchedBoundary

+ {TopQID, BotQID, ..}

+ ScheduleDAGMI *DAG

+ TargetSchedModel *SchedModel

+ SchedRemainder *Rem

+ ReadyQueue Avail, Pending

+ CurrCycle, CurrMOps

+ MinReadyCycle ExpectedLatency

+ isTop( ), getCurrCyle( )

+ getCurrMOps( ), isNextSU()

+ getScheduledLatency()

+ getUnscheduledLatency()

+ getLatencyStallCycle( )

+ getNextResourceCycle( )

+ bumpNode( )

+ pickOnlyChoice( )

TargetSchedModel

MCSchedModel SchedModel

GenericSchedulerBase

+ CandReason {

TopDepthRed, BotHtRed..}

+ CandPolicy { ReduceLat…}

+ SchedResourceDelta

+ SchedCandidate { Policy,

SU, Reason, … }

# MachineSchedContext

# TargetSchedModel *ScMo

+ setPolicy( )

PostMachineScheduler

initializePostMachineSchedulerPass( )

MachineScheduler

+ runOnMachineFunction( )

MachineSchedulerBase

+ scheduleRegions( )

MachineFunctionPass

ScheduleDAG

+ getInstrDesc(Sunit*)

+ verifyScheduleDAG()

+ TargetSchedModel SchedModel

- SchedDAGInstrs *Scheduler

- SchedDAGInstrs *Scheduler

CarpModel

+ getIssueWidth( )

+ computeOperandLatency( )

PostGenericScheduler

+ schedulDAGMI *DAG

+ SchedBoundary Top

+ initPolicy( )

+ shouldTackPressure( ) {false; }

+ pickNode( )

+ schedNode( )

# tryCandidate(SchedCandidate)

# pickNodeFromQue(SchedCandidate)

MCSchedModel

Page 16: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 16

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Sched Machine Model

// ===---------------------------------------------------------------------===// // The following definitions describe the per-operand machine model. // This works with MachineScheduler. See TargetSchedule.td for details. def CarpModel : SchedMachineModel { let MicroOpBufferSize = 0; // Carp is in-order processor let IssueWidth = 2; // 2 micro-ops dispatched per cycle let LoadLatency = 1; // Optimistic, assuming no misses let MispredictPenalty = 8; // A branch direction mispredict, including PFU let PostRAScheduler = 1; // Enable PostRA scheduler pass. let CompleteModel = 0; // FIXME: Remove if all instructions are covered. }

Top-level pipeline description

Page 17: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 17

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

LLVM Scheduler //==- FishScheduleCarp.td – Carp Scheduling Definitions -*- tablegen -*-=// def CarpModel : SchedMachineModel { let MicroOpBufferSize = 0; // Carp is in-order processor let IssueWidth = 2; // 2 micro-ops dispatched per cycle let LoadLatency = 1; // Optimistic, assuming no misses let MispredictPenalty = 8; // A branch direction mispredict, including PFU let PostRAScheduler = 1; // Enable PostRA scheduler pass. let CompleteModel = 0; // FIXME: Remove if all instructions are covered. } …

//==- FishGenSubtargetInfo.inc --------------------------------*/ /*===- TableGen'erated file ---------------------*- C++ -*-===*\ |* Automatically generated file, do not edit! *|..*/ … static const llvm::MCSchedModel CarpModel = { 2, // IssueWidth 0, // MicroOpBufferSize MCSchedModel::DefaultLoopMicroOpBufferSize, 1, // LoadLatency … CarpModelProcResources, CarpModelSchedClasses, }; … extern const llvm::MCWriteLatencyEntry FishWriteLatencyTable[] = { … }

TABLEGEN

//===-- lib/Target/Fish/FishMCTargetDesc.cpp – Fish Target Descriptions --------------------===// … #define GET_SUBTARGETINFO_MC_DESC #include “FishGenSubtargetInfo.inc"

included

Page 18: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 18

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Sched Machine Model

Target general approach

Step 1 - Modify instruction definition to inherit from Sched

Associate each operand with SchedReadWrite type (input/output operand)

Step 2 – In sub-target, WriteRes and ReadAdvance

Associate resource and latency for each SchedReadWrite type

Sub-target specific approach

Define own SchedReadWrite types

Associate resources / latencies through SchedWriteRes

Associate forwards through SchedReadAdvance

Map SchedReadWrite types to specific opcodes/operands

Page 19: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 19

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Sched Machine Model

//===----------------------------------------------------------------------===// // Subtarget-specific SchedWrite types which both map the ProcResources and // set the latency. let SchedModel = CarpModel in { // ALU - Write occurs in Late EX2 (independent of whether shift was required) def : WriteRes<WriteALU, [CarpUnitALU]> { let Latency = 3; } def : WriteRes<WriteALUsi, [CarpUnitALU]> { let Latency = 4; } def : WriteRes<WriteALUsr, [CarpUnitALU]> { let Latency = 4; } def : WriteRes<WriteALUSsr, [CarpUnitALU]> { let Latency = 4; } // Loads def : WriteRes<WriteLd, [CarpUnitLd]> { let Latency = 4; } // WRI … }

// FishSchedule.td def WriteALU : SchedWrite;

// FishInstrInfo.td class ALUInst<bits<4> Opc, string OpcodeStr, SDNode OpNode> : InstFish<(outs GPR:$dst), (ins GPR:$src2, GPR:src1), !stroncat(OpcdeStr, “\t$dst, $src2, $src1”), [(set GPR:$dst, (OpNode GPR:$src2, GPR:$src1))]>, Sched<[WriteALU]> {…}

Page 20: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 20

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Sched Machine Model

Sub-target specific SchedWrite

Associate resources with SchedWrites types

// Carp specific SchedWrites for use with InstRW def CarpWriteMAC : SchedWriteRes<[CarpUnitMAC]> { let Latency = 4; } def CarpWriteLd : SchedWriteRes<[CarpUnitLd]> { let Latency = 4; } ... def CarpWriteALU_DP2 : SchedWriteRes<[CarpUnitALU]> { let Latency = 2; } def CarpWriteALU_DP3 : SchedWriteRes<[CarpUnitALU]> { let Latency = 3; } ... // FP division takes fixed #cycles def CarpWriteFPDIV_SP : SchedWriteRes<[CarpUnitFPDIV]> { let Latency = 7; } def CarpWriteFPDIV_DP : SchedWriteRes<[CarpUnitFPDIV]> { let Latency = 17; } ...

// TargetSchedule.td

class SchedWriteRes<list<ProcResourceKind> resources> : SchedWrite,

ProcWriteResources<resources>;

Page 21: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 21

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Sched Machine Model

ReadAdvance –

Forwarding/ByPass information for SchedReads

// Carp specific SchedReads - related to pipeline stages def CarpRead_ISS : SchedRead; def CarpRead_EX1 : SchedRead; def CarpRead_EX2 : SchedRead; def CarpRead_WRI : SchedRead; def CarpRead_F0 : SchedRead; // FP-F0 maps to DP1 stage of integer pipe def CarpRead_F1 : SchedRead; def CarpRead_F2 : SchedRead; … // Forwarding information - based on when an operand is read def : ReadAdvance<CarpRead_DP1, 0>; def : ReadAdvance<CarpRead_DP2, 1>; def : ReadAdvance<CarpRead_DP3, 2>; def : ReadAdvance<CarpRead_F0, 0>; def : ReadAdvance<CarpRead_F1, 1>; def : ReadAdvance<CarpRead_F2, 2>;

Page 22: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 22

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

CARP Sched Machine Model

Sub-target specific SchedWrites

def : InstRW<[CarpWriteALU_DP3, CarpRead_DP2], (instregex "AD(C|D)S?ri", \ “ANDS?ri", "BICS?ri", "CLZ", "EORri", "MVNS?r", "ORRri", "RSBri", \ "RSCri", "SBCri")>; … // Floating Point Support def : InstRW<[CarpWriteFPALU_F5, CarpRead_F1, CarpRead_F1], \ (instregex "(VADD|VSUB)(D|S|H)")>; def : InstRW<[CarpWriteFPALU_F5, CarpRead_F1], \ (instregex "VCVT(DS|SD|BHD|BDH|THD|TDH)")>; def : InstRW<[CarpWriteFPST_F4, CarpRead_F0, CarpRead_F2], \ (instregex "VSTR(D|S|H)")>; def : InstRW<[CarpWriteFPDIV_SP, CarpRead_F0, CarpRead_F0], \ (instregex "VDIV(S|H)")>; def : InstRW<[CarpWriteFPDIV_DP, CarpRead_F0, CarpRead_F0], \ (instregex "VDIVD")>;

Page 23: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 23

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Sched Model - Flow

Define

HL

SchedMachine

Model

Define

Processor

Resources

Define

SchedReads

Define

SchedWrites

Attach

Resources

Latency

Provide

Forwarding

Info

Connect

Opcodes

Operands

Done!

Micro-ops

Multi-cycle

Resource cycles

SchedVariants

Sequence

Page 24: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 24

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Progress

Introduction

LLVM Machine

Scheduler

Carp –

A generic

in-order

processor

Modelling Carp

In LLVM

What’s present

What’s missing? Conclusion

Page 25: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 25

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

LLVM Scheduler – What’s present ?

Easy to describe machine model

Per operand latencies

Resource utilization/cycles

Compact with instructions inheriting from Sched

Consistency across sub-targets

Ability to define variable number of writes

Varying Micro-ops, resource-cycles, latencies

Page 26: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 26

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

LLVM Scheduler – What’s missing?

Instructions with slot constraints

Cannot issue in second slot – specification and pickNode changes

Cannot issue with any other – micro-ops

Cannot issue with specific another – reliance on resource constraint (not adequate)

Inter-lock constraint modelling

Cannot slow down previous instruction

First-half, second-half and in-stage forwarding

Further divide pipeline stages

Variadic instructions

SchedPredicate, SchedVariant – an alternate compact representation necessary

Page 27: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

© ARM 2016 27

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Conclusion

Significant performance improvement with accurate model

Most pipeline features easy to capture

Dynamic decisions by hardware hard to model

Not a limitation, but that’s how it is

Some aspects harder to describe in current tablegen descriptions

Continuous improvement, discussion points

Page 28: Scheduler for in-order processors What’s present and what ... · Title 44pt Title Case Affiliations 24pt sentence case 20pt sentence case © ARM 2016 Scheduler for in-order processors

The trademarks featured in this presentation are registered and/or unregistered trademarks of ARM Limited

(or its subsidiaries) in the EU and/or elsewhere. All rights reserved. All other marks featured may be

trademarks of their respective owners.

Copyright © 2016 ARM Limited

© ARM 2016