Calls for ASTI

35
1 Vasanth Asokan and Alex Dean [email protected] Center for Embedded Systems Research Department of Electrical and Computer Engineering North Carolina State University www.cesr.ncsu.edu/agdean Providing Time Providing Time - - and Space and Space - - Efficient Efficient Procedure Calls for Asynchronous Procedure Calls for Asynchronous Software Thread Integration Software Thread Integration

Transcript of Calls for ASTI

Page 1: Calls for ASTI

1

Vasanth Asokan and Alex Dean [email protected]

Center for Embedded Systems ResearchDepartment of Electrical and Computer Engineering

North Carolina State Universitywww.cesr.ncsu.edu/agdean

Providing TimeProviding Time-- and Spaceand Space--Efficient Efficient Procedure Calls for Asynchronous Procedure Calls for Asynchronous

Software Thread IntegrationSoftware Thread Integration

Page 2: Calls for ASTI

2

OverviewOverview

• The Big Picture

• Overview of ASTI

• Dealing efficiently with procedure calls

• Experiments

Page 3: Calls for ASTI

3

MotivationMotivation• How do we efficiently allocate N concurrent (potentially real-

time) tasks onto M<N processors?– Compilation and scheduling for concurrent/parallel/distributed

systems– Real-time systems– Hardware/software cosynthesis

• Threads must be able to make independent (asynchronous) progress

• Bottlenecks– Scheduling each context switch– Performing each context switch

• Our approach– M = 1 processor, and that processor is generic (low-cost) with no

special features for accelerating context switch bottlenecks– N = 2 threads. N >2 is an extension of N=2– Context switches are scheduled statically, cutting run-time overhead– Partition register file to accelerate performing each context switch

Page 4: Calls for ASTI

4

Basic Idea of ASTIBasic Idea of ASTI• Examine application to find a function f with significant

internal idle time• Long - If an idle time piece n is coarse-grain (TIdle(f,n) >>

2*TContextSwitch), then we can recover it efficiently with a context switch

• Short - If it is fine grain (TIdle(f,n) !>> 2*TContextSwitch), then apply ASTI– Remove intervening code (which fragments the idle time) and

integrate it into any other thread which we might run• (pad conditionals to same time modulo TIdle)

– Break those other threads into segments which are statically scheduled and guaranteed to return precisely when needed

– Use coroutine calls to switch between primary and secondary threads

Page 5: Calls for ASTI

5

ControlControl--Flow Implications of Basic IdeaFlow Implications of Basic Idea

IdleTime

IdleTime

Break secondary thread into segments lasting approximately for the

total idle time

Integrate intervening primary code into each

segmentIdle

Time Insert coroutine call back to primary at end of each

segment

Primary Function Secondary Function

Page 6: Calls for ASTI

6

ASTI vs. STIASTI vs. STI• Synchronicity

– STI provides synchronous (lock-step) progress of integrated threads. Entire primary and entire secondary function execute.

– ASTI provides asynchronous (independent) progress. Entire primary function and a segment of the secondary function execute at a time.

• Nature of integration– STI: Entire primary function is integrated into a copy of the

secondary– ASTI: Portion of primary is integrated into every location in

the secondary.

Page 7: Calls for ASTI

7

Assumptions Assumptions -- Small Embedded SystemsSmall Embedded Systems• Processors

– Not practical to design a custom processor– Not practical to use fast processor

(e.g. raise clock speed by 100x)– Can handle some code explosion

(e.g. up to 3x)– Using a generic microcontroller

(e.g. 4, 8 or 16 bit) without memory protection, virtual memory, caches.

• Workload– At most a few threads need to make asynchronous progress,

others can wait– One hard-real-time thread with tight deadlines– Other threads may have deadlines which are significantly

longer– Interrupts are delayed or handled with polling servers

(CASES 2003)

8 Bit57%

4 Bit12%

DSP11%

32 Bit8%

16 Bit12%

Page 8: Calls for ASTI

8

Application Domain: Protocol ControllersApplication Domain: Protocol Controllers• Need concurrency – fully loaded bus• Idle time is very fine grain (under one bit time)• Each application domain customizes its protocols

– Wireless sensor networks tweak the medium access control, etc. for minimal energy use

– Automotive: optimize for guaranteed (hard real-time) delivery• Chicken and egg problem

– Protocol controller chip won’t appear until adequate market anticipated– Chip costs remain high until volumes amortize design costs– Delay until protocol controller appears as peripheral on cheap MCUs

• MCUs are good fit for many embedded protocols, if concurrency ischeap

– 10 to 200 cycles of processing needed per bit– 1 kbps – 1 Mbps bus speed– Temporally predictable MCUs are cheap and flexible

• 1 MHz for $0.25• 100 MHz for $5-$10 (but you pay in increased energy use and other

issues)

Page 9: Calls for ASTI

9

Protocol Controller OptionsProtocol Controller Options

Physical Layer Transceiver

Physical Layer Transceiver

Physical Layer Transceiver

I/O ExpanderDiscreteProtocol Controller

On-BoardProtocol Controller

SystemMCU

SystemMCU

I/O Expander Discreteprotocol

controller with MCU

MCU with on-board protocol controller

Communication Network

Analog & Digital I/O

Analog & Digital I/O

Analog & Digital I/O

Physical Layer Transceiver

Generic MCUwith ASTI S/W

Protocol Controller

Optional System MCU

Generic MCU with ASTI SW

protocol controller

Analog & Digital I/O

Page 10: Calls for ASTI

10

Motivation Motivation -- Constraint on ProceduresConstraint on Procedures• Procedure calls in the secondary

thread are a problem.

• Conflicts arise in the placement of cocalls in the body of the procedure.– Extends to placing intervening

primary code.

• Ad hoc solution – Pad call sites to a worst case offset and schedule cocalls in the procedure according to that offset.

• Problem - Wasted cycles, lower processor efficiency. Coroutine call

Call to SampleProc

Cocall placement

conflict

SampleProc

Secondary Thread

Exe

cutio

n P

rogr

ess

Φ1=10

Φ2=30 ?

?

main

Page 11: Calls for ASTI

11

Solution: Select Mix of Inlining and CloningSolution: Select Mix of Inlining and Cloning• Procedure inlining

– Replace calls with body of procedure. – Primarily trading off code size for execution speed.– Another benefit – whole-program optimization– Drawbacks – code size, register and stack pressure, compile time

• Procedure cloning– Form clones of a procedure optimized for a certain context.– Retarget original calls to appropriate clones based on context of the

call.– Similar and an alternative to inlining.– Drawback – code expansion (might be lower than inlining).

Page 12: Calls for ASTI

12

Overall Approach to SolutionOverall Approach to Solution• Begin with call graph of secondary thread.

• Phase one - Inlining: From the set S of procedures in the secondary thread, select a subset I of procedures to be inlined, such that a maximal number of call sites are removed while not exceeding some code expansion limit L. Inline the set of procedures in I.

• Phase two - Cloning: Transform remaining S-I of procedures to remove timing variability. Use procedure cloning to reduce the amount of padding cycles .

Page 13: Calls for ASTI

13

Phase Phase One One –– Decide What to InlineDecide What to Inline• Primary concern

– Remove as many static call sites as possible given a code size constraint.

• Similar to the knapsack problem.– However, new call sites may be created with the inlining of

one call site. – The cost of each call site is also not constant.

• Full exploration of search space is too slow.

• Solution – Use branch and bound algorithm.– Simplified version of Leupers & Marwedel, ICCAD ’99– Use static, not dynamic information

Page 14: Calls for ASTI

14

Phase Phase Two Two –– Decide How Much to CloneDecide How Much to Clone

• Now create a small set of procedure clones to handle temporally-clustered calls, reducing the padding needed

• Definition: – Phase φ at any point in the code: Number of cycles left before which

a cocall must be made back to the primary.– Alternatively,

φ = (TSegmentIdle – number of cycles elapsed since last cocall)• For each procedure,

– Plot the distribution of φ at each call site to the procedure.– Cluster call sites and dedicate a clone of the procedure, reducing the

amount of padding required.– Re-target calls to appropriate clones.

10000 10 20 30 40 50 60 70 80 90 | 10 20 30 40 50 60 70 80 90

Φ

Use Clone 1 Use Clone 2Two clone

points

Page 15: Calls for ASTI

15

Clustering of Call SitesClustering of Call Sites• Phase two uses the Minimal Spanning Tree clustering algorithm.

– Agglomerative approach.– Iteratively merge sets whose cost of linkage is minimum.

• Distance metric for two elements Φ1 and Φ2– Translates to padding cycles required when Φ1 and Φ2 are two calls that

need to be serviced by a single clone.• Within Groups Linkage metric for gauging similarity between two sets

– Translates to padding cycles required when two sets are merged to form a single set.

0 10 20 30 40 50 60 70 80 90 | 10 20 30 40 50 60 70 80 90 | 10 20 30 40A cocall is

inserted at this point

Cocall duration = 220 cycles

Φ1 Φ2

dstraight = 140 cycles (green)dwrap = 80 cycles (blue)

distance = MIN(dstraight, dwrap)= 80 cycles

Page 16: Calls for ASTI

16

Control Knob Control Knob –– CloneClone RatioRatio• Controlling the number of clones created

– Tradeoff between • number of clones formed -- code size• reduction in the static padding cycles – processor efficiency

• Define for each procedure,– Clone Ratio: CR = Nc /Ncl

Nc - Number of clones created,Ncl - Number of incoming calls to the procedure

• CR can range from 1/Ncl to a maximum of 1.– No Clones: at CR = 1/Ncl , min code size, max padding cycles– All Clones: At CR = 1, max code size, min padding cycles

Page 17: Calls for ASTI

17

• Atmel AVR– 8 bit RISC ISA, 32 registers– 8 MHz (<=20 MHz)

• Code developed in C, compiled with avr-gcc 3.2

• Evaluated performance statically• Code structured as two threads

– Primary thread - Protocol controller – Secondary thread – Event-processing loop

• Each secondary thread gets inlined and cloned– Host Interface

• Soft J1850 to UART bridge with queue interface– Smart Node (Serial I/O Expander)

• I/O ports, ADC, PWM controller, fan control– PID Controller

• Proportional/Integral/Derivative controller• Feedback signal is filtered (FIR) and linearized before use

Experiments with BenchmarkExperiments with Benchmark Suite of Suite of 22aryary ThreadsThreads

Physical Layer Transceiver

Physical Layer Transceiver

Physical Layer Transceiver

I/O ExpanderDiscreteProtocol Controller

On-BoardProtocol Controller

SystemMCU

SystemMCU

I/O Expander Discreteprotocol

controller with MCU

MCU with on-board protocol controller

Communication Network

Analog & Digital I/O

Analog & Digital I/O

Analog & Digital I/O

Physical Layer Transceiver

Generic MCUwith ASTI S/W

Protocol Controller

Optional System MCU

Generic MCU with ASTI SW

protocol controller

Analog & Digital I/O

Physical Layer Transceiver

Physical Layer Transceiver

Physical Layer Transceiver

I/O ExpanderDiscreteProtocol Controller

On-BoardProtocol Controller

SystemMCU

SystemMCU

I/O Expander Discreteprotocol

controller with MCU

MCU with on-board protocol controller

Communication Network

Analog & Digital I/O

Analog & Digital I/O

Analog & Digital I/O

Physical Layer Transceiver

Generic MCUwith ASTI S/W

Protocol Controller

Optional System MCU

Generic MCU with ASTI SW

protocol controller

Analog & Digital I/O

Physical Layer Transceiver

Generic MCUwith ASTI S/W

Protocol Controller

Optional System MCU

Generic MCU with ASTI SW

protocol controller

Analog & Digital I/O

Page 18: Calls for ASTI

18

Secondary Thread Call GraphsSecondary Thread Call Graphs

cnt_interface_fsm

flush_rx_buffer

flush_tx_buffer

receive

receive_data_from_int

report_status

transmit_data

receive_buf_init

send_data_to_int

main_control_loop

check_for_events

dequeue

handle_message

send_acknowledgement

handle_message handle_adc

handle_error

handle_event

handle_fan

handle_ioport

handle_power

handle_pwm

send_acknowledgement

enqueue modulo_increment

set_fan_speed

shutdown_fan

configure_bit

get_port_and_bit

get_bit_value

read_data_register

write_bit_value

write_data_register

change_power_mode

disable_pwm

enable_pwm

main_control_loop

fir_circular

fpsub

LinearizeFixed

UpdatePID

fpadd

fpmul mult asr

fpsubPID Controller

Smart Node

HostInterface

Page 19: Calls for ASTI

19

Phase 1 ResultsPhase 1 Results• Inlining reduces code

size for these benchmarks!– procedure prolog

and epilog large– procedure body

small– calls not nested

deeply• Our heuristic didn’t

factor in reduction due to elimination of prolog/epilog

• Chose inlining based on 105% expansion limit

0

0.2

0.4

0.6

0.8

1

100 110 120 130 140 150

Cod

e S

ize

Afte

r In

linin

g (b

ytes

)

Expansion Limit (%)

Impact of Inlining

Smart NodeHost InterfacePID Controller

Page 20: Calls for ASTI

20

Phase 2 Results Phase 2 Results –– Sensitivity to TSensitivity to TIdleSegmentIdleSegment

• Clustering limits padding cycles required, clipping the penalty for long TSegmentIdle

Smart Node: Static Padding Cycles Needed

0

200

400

600

800

1000

1200

1400

1600

50 100 150 200 250 300 350 400

T Segment Idle

Sta

tic P

addi

ng C

ycle

s N

eede

d Before Phase 2After Phase 2

Page 21: Calls for ASTI

21

Phase 2 Results Phase 2 Results –– Raising Clone RatioRaising Clone Ratio• Payoff is largest

for large values of TSegmentIdle

• Clone ratios of 0.2, 0.3 cut most static padding cycles

• What about the memory expansion cost? 0

200

400

600

800

1000

1200

0 0.2 0.4 0.6 0.8 1

Sta

tic P

addi

ng C

ycle

s

Clone Ratio (CR)

PID Controller Static Padding Cycles vs. Clone Ratio

TSegmentIdle = 50TSegmentIdle = 100TSegmentIdle = 150TSegmentIdle = 200TSegmentIdle = 250TSegmentIdle = 300TSegmentIdle = 350TSegmentIdle = 400

Page 22: Calls for ASTI

22

Phase 2 Results Phase 2 Results –– Exploring Costs and BenefitsExploring Costs and Benefits• Approach

works: first clones save the most padding cycles most densely

• CR = 0.3 eliminates 70% to 90% of static padding cycles

• PID, SmartNode require more clones than Host Interface

1

1.2

1.4

1.6

1.8

2

2.2

0 0.2 0.4 0.6 0.8 1

Nor

mal

ized

Cod

e S

ize

Normalized Static Padding Cycles

Static Padding Cycles vs. Code Size at TSegmentIdle = 50 cycles

Clone Ratio=0

0.10.1

0.1

0.20.20.2

PIDSmart Node

Host Interface

Page 23: Calls for ASTI

23

Secondary Thread SpeedSecondary Thread Speed--Up from Phase 2Up from Phase 2• How much does Phase 2

(clustering and cloning) speed up the secondary thread?

• Based on dynamic performance of secondary thread

• Host Interface and Smart Node have many calls in loops

• PID Controller has only two calls in loops, is instead dominated by math

0.9

1

1.1

1.2

1.3

1.4

1.5

1.6

1.7

50 100 150 200 250 300 350 400Spe

ed-u

p R

elat

ive

to N

on-C

lone

d V

ersi

on

TSegmentIdle

Dynamic Speed-Up

PID ControllerHost Interface

Smart Node

Page 24: Calls for ASTI

24

ConclusionsConclusions• Need efficient support for procedures in secondary

threads– ASTI techniques lose efficiency as TSegmentIdle grows– Easier to develop, debug and maintain modular code.

• Approach provides an algorithmic basis for trading off code size and processor efficiency.

• Application of inlining and cloning with real-time twist • Greater program run-time efficiency

– Can avoid raising clock speeds, staying in cheap-and-easy-hardware land

• not past the memory wall (avoid unpredictable memory access times)

• minimal pipelining (avoid long branch penalties)• low operating frequencies (avoid high power

consumption)

Page 25: Calls for ASTI

25

Questions?Questions?• Have you applied this to SPEC?

– No, that’s not representative of embedded software implemented communication protocols

• Don’t caches break the timing predictability you need?– The processors we use run at under 50 MHz, so we don’t

have a memory wall• Why not use a multithreaded processor?

– They’re too expensive, too rare, and businesses prefer familiar processors

• Why not just design an ASIC to do it?– Too expensive to get the first one

• Why not program an FPGA to do it?– Too expensive to get the rest of them

Page 26: Calls for ASTI

26

Backup SlidesBackup Slides

Page 27: Calls for ASTI

27

Protocol Software StructureProtocol Software Structure

sendidle receive

send_message()

send_bit() receive_bit()

receive_message()

protocol_executive()

Most idle time is located in these functions

Page 28: Calls for ASTI

28

Obtaining Timing Information in Phase TwoObtaining Timing Information in Phase Two• Timing information (Φ ) of call

incoming calls, required completely, before a procedure can be processed.

• Can proceed through call graph in topological order.

• However, timing information is not easy to obtain.

– Nested calls to topologically lower procedures.

– Interleaving of calls in the same level.• For e.g. while processing P1, call site

b may be present in between a and c. But call site b has not been processed yet – therefore Φ of c cannot be determined.

• Solution – Pad all procedures to last a multiple of a cocall duration. This way, the duration of all procedures is known ahead of time.

• Problem – Contrary to purposes.

System

P1 P2

P3 P4

P5 P6

a

j

d

e

f

gh

j

c

k

b

Page 29: Calls for ASTI

29

Why Not Use Dynamic Call Graph Information?Why Not Use Dynamic Call Graph Information?• Gathering profile information is difficult with these

applications– Limited resources

• 4 kB SRAM• No file system

– Applications tightly coupled to I/O, complicating simulation

• Stimulus and log files don’t scale well, becoming cumbersome

• This is the first step into solving the problem– Performance penalty of static vs. dynamic information is

expected to be small (e.g. 24%) compared with impact of ASTI

– Future work

Page 30: Calls for ASTI

30

Thrint OverviewThrint OverviewSTI

Parse Asm

Form CFG/CDG

Read Integration Directives

Static Timing Analysis

Node Labelling

Idle Time Analysis

Data-Flow Analysis

Integration

Static Timing Analysis

Timing Verification

Code Regeneration

Temporal Determinism Analysis

Pad Timing Jitter in secondary thread

Plan integration

Pad excess timing jitter

For each guest

Pad excess timing jitter

Do host loop transformations

Clone and insert guest node(s)

For each host

For each guest

If Fused loop,add fused loop control

test code

For each host

Delete original guests

ASTI

Pad Timing Jitter in message level function.

Delete original guests

Pad Timing Jitter in bit level function.

Plan integration insecondary thread

Pad jitter in predicate nodes and blocking I/O loops

Integrate cocalls within the secondary thread.

Integrate intervening guest code at appropriate locations.

Page 31: Calls for ASTI

31

Microcontroller configurations and High Volume PricesMicrocontroller configurations and High Volume Prices

70-832ATMega323

5.100-816ATMega161

2.350-88ATMega8L

Cost per unitat 50k Units (in dollars)

Clock Speedin MHz

Flash Memory Sizein kilobytes

Chip

Page 32: Calls for ASTI

32

Timing Conflict ExampleTiming Conflict Example

Sample();.....

.

.Sample();..

Cocall placement within Sample’s body

Body of Secondary Thread

.

.

.

.

.

10 cycles

30 cycles

TSegmentIdle is 50 cycles

20 cycles

40 cycles

- Cocalls

Conflict

21

1

1

2

Page 33: Calls for ASTI

33

Problems Obtaining Timing InformationProblems Obtaining Timing Information

P1();..P2();..P1();

Call site a

Call site b

Call site c

Page 34: Calls for ASTI

34

Breakdown of Automatic and Manual TasksBreakdown of Automatic and Manual Tasks

Profile code expansion and static call site reduction.x

Inline procedures chosen in plan using gcc.x

Choose an inlining plan.x

Apply Min_IV algorithm for various code expansion limits.x

Phase 1

Topologically sort the call graph.x

Form the call graph of secondary thread.xDescription of TaskManualAutomatic

Profile padding cycles inserted and code expansion due to Clones.

x

Choose desired cloning plan.x

Apply minimal spanning tree clustering algorithm for each pro-cedure and get cloning plans.

x

Obtain timing information on ∆c distribution for each procedure.

x

Calculating durations of each procedure in reverse topological Order.

x

Pad blocking I/O loops to duration of a cocall.x

Pad jitter in each procedure’s CDG.x

Phase 2

Page 35: Calls for ASTI

35

ReferencesReferences• Rainer Leupers, Peter Marwedel, “Function Inlining

Under Code Size Constraints for Embedded Processors”. Proceedings of the 1999 IEEE/ACM international conference on Computer-aided design, p.253-256, November 07-11, 1999, San Jose, California, United States

• Owen Kaser and C. R. Ramakrishnan, “Evaluating Inlining Techniques”. Computer Languages, 24:45-72, 1998

• Michael R. Garey and David S. Johnson, “Computers and Intractability: A Guide to the theory of NP-Completeness”. W.H. Freeman and Company, 1979.