streamit: high-level stream programming on rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... ·...

63
StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek, Andrew Lamb, Jasper Lin, David Maze, William Thies, and Saman Amarasinghe March 6, 2003

Upload: others

Post on 20-May-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

StreamIt: High-Level Stream Programming on Raw

Michael Gordon, Michal Karczmarek, Andrew Lamb, Jasper Lin, David Maze, William Thies, and Saman Amarasinghe

March 6, 2003

Page 2: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

The StreamIt Language

• Why use the StreamIt compiler?– Automatic partitioning and load balancing

– Automatic layout

– Automatic switch code generation

– Automatic buffer management

– Aggressive domain-specific optimizations

• All with a simple, high-level syntax!– Language is architecture-independent

Page 3: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

A Simple Countervoid->void pipeline Counter() {

add IntSource();add IntPrinter();

}void->int filter IntSource() {

int x;init { x = 0; }work push 1 { push (x++); }

}int->void filter IntPrinter() {

work pop 1 { print(pop()); }}

Counter

IntSource

IntPrinter

Page 4: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Demo

• Compile and run the program

counter % knit --raw 4 Counter.strcounter % make –f Makefile.streamit run

• Inspect graphs of program

counter % dotty schedule.dotcounter % dotty layout.dot

Page 5: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

• Hierarchical structures:– Pipeline

– SplitJoin

– Feedback Loop

• Basic programmable unit: Filter

Representing Streams

Page 6: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Representing Filters

• Autonomous unit of computation– No access to global resources

– Communicates through FIFO channels- pop() - peek(index) - push(value)

– Peek / pop / push rates must be constant

• Looks like a Java class, with– An initialization function

– A steady-state “work” function

Page 7: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Filter Example: LowPassFilterfloat->float filter LowPassFilter (int N) {

float[N] weights;

init {weights = calcWeights(N);

}

work push 1 pop 1 peek N {float result = 0;for (int i=0; i<N; i++) {

result += weights[i] * peek(i);}push(result);pop();

}}

Page 8: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

N

Filter Example: LowPassFilterfloat->float filter LowPassFilter (int N) {

float[N] weights;

init {weights = calcWeights(N);

}

work push 1 pop 1 peek N {float result = 0;for (int i=0; i<N; i++) {

result += weights[i] * peek(i);}push(result);pop();

}}

LPF

Page 9: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

N

Filter Example: LowPassFilterfloat->float filter LowPassFilter (int N) {

float[N] weights;

init {weights = calcWeights(N);

}

work push 1 pop 1 peek N {float result = 0;for (int i=0; i<N; i++) {

result += weights[i] * peek(i);}push(result);pop();

}}

LPF

Page 10: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Filter Example: LowPassFilter

N

float->float filter LowPassFilter (int N) {float[N] weights;

init {weights = calcWeights(N);

}

work push 1 pop 1 peek N {float result = 0;for (int i=0; i<N; i++) {

result += weights[i] * peek(i);}push(result);pop();

}}

LPF

Page 11: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Filter Example: LowPassFilter

N

float->float filter LowPassFilter (int N) {float[N] weights;

init {weights = calcWeights(N);

}

work push 1 pop 1 peek N {float result = 0;for (int i=0; i<N; i++) {

result += weights[i] * peek(i);}push(result);pop();

}}

LPF

Page 12: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

SplitJoin Example: BandPass Filter

float->float pipeline BandPassFilter(float low, float high) {add BPFCore(low, high);add Subtract();

}float->float splitjoin BPFCore(float low, float high) {

split duplicate;add LowPassFilter(high);add LowPassFilter(low);join roundrobin;

}float->float filter Subtract {

work pop 2 push 1 {float val1 = pop();float val2 = pop(); push(val1 – val2);

}}

LPF LPF

duplicate

BPFCore

BandPassFilter

Subtract

roundrobin

Page 13: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

duplicate

Parameterization: Equalizer

BPF BPF BPF

Adder

roundrobin

float->float pipeline Equalizer (int N) {add splitjoin {

split duplicate;float freq = 10000;for (int i = 0; i < N; i ++, freq*=2) {

add BandPassFilter(freq, 2*freq); }join roundrobin;

}add Adder(N);

}

Equalizer

Page 14: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

FM Radio

FMDemodulator

LowPassFilter

FloatSource

Equalizer

FloatPrinter

float->float pipeline FMRadio {add FloatSource();add LowPassFilter();add FMDemodulator();add Equalizer(8);add FloatPrinter();

}

FMRadio

Page 15: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Demo: Compile and Run

fm % knit --raw 4 –-partition -–numbers 10 FMRadio.strfm % make –f Makefile.streamit run

Options used:--raw 4 target 4x4 raw machine--partition use automatic greedy partitioning--numbers 10 gather numbers for 10 iterations, and

store in results.out

Page 16: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Compiler Flow Summary

Kopi Front-End

StreamIt code

SIR Conversion

Parse Tree

SIR (unexpanded)

SIR (expanded)

Graph Expansion

Partitioning

Layout

CommunicationScheduler

CodeGeneration

Load-balancedStream Graph

Filters assignedto Raw tiles

Switch Code

ProcessorCode

StreamItFront-EndLegal Java file

Any JavaCompiler

SchedulerStreamItJava Library

Class file

Page 17: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Stream Graph Before Partitioning

fm % dotty before.dot

Page 18: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Stream Graph After Partitioning

fm % dotty after.dot

Page 19: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Layout on Raw

fm % dotty layout.dot

Page 20: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Initial and Steady-State Schedule

fm % dotty schedule.dot

Page 21: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Work Estimates (Graph)

fm % dotty work-before.dot

Page 22: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Work Estimates (Table)

fm % cat work-before.txt

400885FloatSource__3

10301031031LowPassFilter__67

10301031031LowPassFilter__67

10301031031LowPassFilter__67

10301031031LowPassFilter__49

10301031031LowPassFilter__67

10301031031LowPassFilter__49

10301031031LowPassFilter__67

10301031031LowPassFilter__67

10301031031LowPassFilter__67

10301031031LowPassFilter__49

10301031031LowPassFilter__49

10301031031LowPassFilter__49

10301031031LowPassFilter__49

10301031031LowPassFilter__67

10301031031LowPassFilter__49

10301031031LowPassFilter__49

11901191191LowPassFilter__21

21902192191FMDemodulator__31

Total Measured Work(Measured-Estimated)/MeasuredEstimated WorkMeasured WorkRepsFilter

Page 23: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Collected Results

fm % cat results.outPerformance Results

Tiles in configuration: 16Tiles assigned (to filters or joiners): 16Run for 10 steady state cycles.With 0 items skipped for init.With 1 items printed per steady state.

cycles MFLOPS work_count--------------------------2153 350 192272220 347 197312229 310 189632229 291 18512

Page 24: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Collected Results

fm % cat results.outPerformance Results

Tiles in configuration: 16Tiles assigned (to filters or joiners): 16Run for 10 steady state cycles.With 0 items skipped for init.With 1 items printed per steady state.

cycles MFLOPS work_count--------------------------2153 350 192272220 347 197312229 310 189632229 291 18512

2229 292 185372229 293 185592229 291 185132229 292 185572229 289 185102229 291 18530

Summmary:Steady State Executions: 10Total Cycles: 22205Avg Cycles per Steady-State: 2220Thruput per 10^5: 45Avg MFLOPS: 304workCount* = 187639 / 355280

Page 25: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Understanding Performance

Page 26: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Understanding Performance

Page 27: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Demo: Linear Optimization

fm % knit --linearreplacement--raw 4 -–numbers 10 FMRadio.str

fm % make –f Makefile.streamit run

New option:--linearreplacement identifies filters which compute

linear functions of their input, and replaces adjacent linear nodes with a single matrix-multiply

Page 28: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Stream Graph Before Partitioning

fm % dotty before.dot

Page 29: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Stream Graph Before Partitioning

fm % dotty before.dot

Entire Equalizer collapsed!

without linear replacement

Page 30: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Results with Linear Optimization

fm % cat results.out

Summmary:Steady State Executions: 10Total Cycles: 7260Avg Cycles per Steady-State: 726Thruput per 10^5: 137Avg MFLOPS: 128workCount* = 15724 / 116160

Page 31: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Results with Linear Optimization

fm % cat results.out

Summmary:Steady State Executions: 10Total Cycles: 7260Avg Cycles per Steady-State: 726Thruput per 10^5: 137Avg MFLOPS: 128workCount* = 15724 / 116160

Speedup by factor of 3

Page 32: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Results with Linear Optimization

fm % cat results.out

Summmary:Steady State Executions: 10Total Cycles: 7260Avg Cycles per Steady-State: 726Thruput per 10^5: 137Avg MFLOPS: 128workCount* = 15724 / 116160

Speedup by factor of 3

Allows programmer towrite simple, modular filters which compilercombines automatically

Page 33: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Other Results: Processor Utilization

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

FIR

Radar

Radio

Sort FFTFilte

rBan

k

GSM

Vocod

er

3GPP

Page 34: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Speedup Over Single Tile

0

4

8

12

16

20

24

28

32

FIR Radio Sort FFT Filterbank 3GPP

Spee

dup

of S

trea

mIt

on 1

6 til

es

over

Seq

uent

ial C

on

1 til

e

–For Radio we obtained the C implementation from a 3rd party

–For FIR, Sort, FFT, Filterbank, and 3GPP we wrote the C implementation following a reference algorithm.

Page 35: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Scaling of Throughput

0

50

100

150

200

250

0 1 2 3 4 5 6 7 8 9

Tiles per Side

Thro

ughp

ut

(Nor

mal

ized

to 4

x4)

MergeSortFIRBitonicBeamFormerFFTFilterBankFM

Page 36: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Compiler Status

• Raw backend has been working for more than a year– Robust partitioning, layout, and scheduling

– Still working on improvements:• Dynamic programming partitioner

• Optimized scheduling, routing, code generation

• Frontend is relatively new– Semantic checker still in progress

– Some malformed inputs cause Exceptions

• We are eager to gain user feedback!

Page 37: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Library Support

Option: --libraryRun with Java library, not the compiler. Greatly facilitates application development, debugging, and verification.

Given File.str, the frontendwill produce File.java, whichyou can edit and instrumentlike a normal Java file.

Kopi Front-End

StreamIt code

SIR Conversion

Parse Tree

SIR (unexpanded)

SIR (expanded)

Graph Expansion

StreamItFront-EndLegal Java file

Any JavaCompiler

StreamItJava Library

Class file

Page 38: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Library Support

Option: --libraryRun with Java library, not the compiler. Greatly facilitates application development, debugging, and verification.

Given File.str, the frontendwill produce File.java, whichyou can edit and instrumentlike a normal Java file.

Kopi Front-End

StreamIt code

SIR Conversion

Parse Tree

SIR (unexpanded)

SIR (expanded)

Graph Expansion

StreamItFront-EndLegal Java file

Any JavaCompiler

StreamItJava Library

Class file

Many more options will be documented in the release.

Page 39: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Summary

• Why use StreamIt?– High-level, architecture-independent syntax

– Automatic partitioning, load balancing, layout, switch code generation, and buffer management

– Aggressive domain-specific optimizations

– Many graphical outputs for programmer

• Release by next Friday, 3/14/03

http://cag.lcs.mit.edu/streamitStreamIt Homepage

Page 40: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Backup Slides

Page 41: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

N-Element Merge Sort (3-level)

Sort Sort Sort Sort Sort Sort Sort Sort

MergeMerge Merge Merge

Merge Merge

Merge

N/2 N/2

N/4 N/4 N/4 N/4

N/8 N/8 N/8 N/8 N/8 N/8 N/8 N/8

N

Page 42: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

N-Element Merge Sort (K-level)

pipeline MergeSort (int N, int K) {if (K==1) {

add Sort(N);} else {

add splitjoin {split roundrobin;add MergeSort(N/2, K-1);add MergeSort(N/2, K-1);joiner roundrobin;

} }add Merge(N);

}}

Page 43: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App. (Original)Splitter

FIRFilter FIRFilterFIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter

FIRFilter FIRFilterFIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter

Joiner

Splitter

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Joiner

Page 44: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App. (Original)

Page 45: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App. (Original)Splitter

FIRFilter FIRFilterFIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter

FIRFilter FIRFilterFIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter

Joiner

Splitter

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Joiner

Page 46: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App. (Original)Splitter

FIRFilter FIRFilterFIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter

FIRFilter FIRFilterFIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter FIRFilter

Joiner

Splitter

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Joiner

Page 47: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Joiner

Page 48: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Joiner

Page 49: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Detector

Magnitude

FirFilter

Vector Mult

Joiner

Page 50: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 51: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 52: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 53: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 54: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 55: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 56: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App.Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 57: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App. (Balanced)Splitter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

FIRFilterFIRFilter

Joiner

Splitter

Vector MultFIRFilter

MagnitudeDetector

Joiner

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Vector MultFIRFilter

MagnitudeDetector

Page 58: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

Example: Radar App. (Balanced)

Page 59: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

A Moving Averagevoid->void pipeline MovingAverage() {

add IntSource();add Averager(10);add IntPrinter();

}int->int filter Averager(int N) {

work pop 1 push 1 peek N-1 {int sum = 0;for (int i=0; i<N; i++) {sum += peek(i);

}push(sum/N);pop();

}

Counter

IntSource

Averager

IntPrinter

Page 60: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

A Moving Averagevoid->void pipeline MovingAverage() {

add IntSource();add Averager(4);add IntPrinter();

}int->int filter Averager(int N) {

work pop 1 push 1 peek N-1 {int sum = 0;for (int i=0; i<N; i++) {sum += peek(i);

}push(sum/N);pop();

}

Counter

IntSource

Averager

IntPrinter

N

Page 61: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

A Moving Averagevoid->void pipeline MovingAverage() {

add IntSource();add Averager(4);add IntPrinter();

}int->int filter Averager(int N) {

work pop 1 push 1 peek N-1 {int sum = 0;for (int i=0; i<N; i++) {sum += peek(i);

}push(sum/N);pop();

}

Counter

IntSource

Averager

IntPrinter

N

Page 62: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

A Moving Averagevoid->void pipeline MovingAverage() {

add IntSource();add Averager(4);add IntPrinter();

}int->int filter Averager(int N) {

work pop 1 push 1 peek N-1 {int sum = 0;for (int i=0; i<N; i++) {sum += peek(i);

}push(sum/N);pop();

}

Counter

IntSource

Averager

IntPrinter

N

Page 63: StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... · StreamIt: High-Level Stream Programming on Raw Michael Gordon, Michal Karczmarek,

A Moving Averagevoid->void pipeline MovingAverage() {

add IntSource();add Averager(4);add IntPrinter();

}int->int filter Averager(int N) {

work pop 1 push 1 peek N-1 {int sum = 0;for (int i=0; i<N; i++) {sum += peek(i);

}push(sum/N);pop();

}

Counter

IntSource

Averager

IntPrinter

N