StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... ·...
Transcript of StreamIt: High-Level Stream Programming on Rawgroups.csail.mit.edu/cag/raw/raw_intro_day_web/... ·...
![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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/1.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/2.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/3.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/4.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/5.jpg)
• 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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/6.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/7.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/8.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/9.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/10.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/11.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/12.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/13.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/14.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/15.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/16.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/17.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/18.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/19.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/20.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/21.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/22.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/23.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/24.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/25.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/26.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/27.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/28.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/29.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/30.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/31.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/32.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/33.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/34.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/35.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/36.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/37.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/38.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/39.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/40.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/41.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/42.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/43.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/44.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/45.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/46.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/47.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/48.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/49.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/50.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/51.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/52.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/53.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/54.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/55.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/56.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/57.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/58.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/59.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/60.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/61.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/62.jpg)
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,](https://reader030.fdocuments.us/reader030/viewer/2022041013/5ec45bb4729db15f1a30860f/html5/thumbnails/63.jpg)
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