StreamIt: High-Level Stream Programming on Raw
description
Transcript of StreamIt: High-Level Stream Programming on Raw
![Page 1: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/4.jpg)
Demo• Compile and run the program
counter % knit --raw 4 Counter.str
counter % make –f Makefile.streamit run
• Inspect graphs of program
counter % dotty schedule.dotcounter % dotty layout.dot
![Page 5: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/5.jpg)
• Hierarchical structures:– Pipeline
– SplitJoin
– Feedback Loop
• Basic programmable unit: Filter
Representing Streams
![Page 6: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/12.jpg)
SplitJoin Example: BandPass Filterfloat->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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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
StreamIt Front-End
Legal Java file
Any JavaCompiler
SchedulerStreamIt
Java Library
Class file
![Page 17: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/17.jpg)
Stream Graph Before Partitioning
fm % dotty before.dot
![Page 18: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/18.jpg)
Stream Graph After Partitioningfm % dotty after.dot
![Page 19: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/19.jpg)
Layout on Raw
fm % dotty layout.dot
![Page 20: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/20.jpg)
Initial and Steady-State Schedule
fm % dotty schedule.dot
![Page 21: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/21.jpg)
Work Estimates (Graph)
fm % dotty work-before.dot
![Page 22: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/22.jpg)
Work Estimates (Table)
fm % cat work-before.txt
Filter Reps Measured Work Estimated Work (Measured-Estimated)/Measured Total Measured Work
FMDemodulator__31 1 219 219 0 219
LowPassFilter__21 1 119 119 0 119
LowPassFilter__49 1 103 103 0 103
LowPassFilter__49 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
LowPassFilter__49 1 103 103 0 103
LowPassFilter__49 1 103 103 0 103
LowPassFilter__49 1 103 103 0 103
LowPassFilter__49 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
LowPassFilter__49 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
LowPassFilter__49 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
LowPassFilter__67 1 103 103 0 103
FloatSource__3 5 8 8 0 40
FloatPrinter__82 1 21 21 0 21
Adder__79 1 15 15 0 15
Subtract__72 1 10 10 0 10
Subtract__72 1 10 10 0 10
Subtract__72 1 10 10 0 10
Subtract__72 1 10 10 0 10
Subtract__72 1 10 10 0 10
Subtract__72 1 10 10 0 10
Subtract__72 1 10 10 0 10
Subtract__72 1 10 10 0 10
![Page 23: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/23.jpg)
Collected Results
fm % cat results.out
Performance 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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/24.jpg)
Collected Results
fm % cat results.out
Performance 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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/25.jpg)
Understanding Performance
![Page 26: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/26.jpg)
Understanding Performance
![Page 27: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/27.jpg)
Demo: Linear Optimization
fm % knit --linearreplacement --raw 4 -–numbers 10 FMRadio.strfm % 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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/28.jpg)
Stream Graph Before Partitioning
fm % dotty before.dot
![Page 29: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/30.jpg)
Results with Linear Optimizationfm % 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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/31.jpg)
Results with Linear Optimizationfm % 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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/32.jpg)
Results with Linear Optimizationfm % 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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/33.jpg)
Other Results: Processor Utilization
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
![Page 34: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/34.jpg)
Speedup Over Single Tile
0
4
8
12
16
20
24
28
32
FIR Radio Sort FFT Filterbank 3GPP
Sp
eed
up
of
Str
eam
It o
n 1
6 ti
les
ove
r S
equ
enti
al C
on
1 t
ile
–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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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
Th
rou
gh
pu
t (N
orm
aliz
ed t
o 4
x4) MergeSort
FIR
Bitonic
BeamFormer
FFT
FilterBank
FM
![Page 36: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/37.jpg)
Library Support
Option: --library
Run with Java library, not the compiler. Greatly facilitates application development, debugging, and verification.
Given File.str, the frontend will produce File.java, which you can edit and instrument like a normal Java file.
Kopi Front-End
StreamIt code
SIR Conversion
Parse Tree
SIR (unexpanded)
SIR (expanded)
Graph Expansion
StreamIt Front-End
Legal Java file
Any JavaCompiler
StreamItJava Library
Class file
![Page 38: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/38.jpg)
Library Support
Option: --library
Run with Java library, not the compiler. Greatly facilitates application development, debugging, and verification.
Given File.str, the frontend will produce File.java, which you can edit and instrument like a normal Java file.
Kopi Front-End
StreamIt code
SIR Conversion
Parse Tree
SIR (unexpanded)
SIR (expanded)
Graph Expansion
StreamIt Front-End
Legal 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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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/03http://cag.lcs.mit.edu/streamit
StreamIt Homepage
![Page 40: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/40.jpg)
Backup Slides
![Page 41: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/44.jpg)
Example: Radar App. (Original)
![Page 45: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/47.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/48.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/49.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/50.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/51.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/52.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/53.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/54.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/55.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/56.jpg)
Example: Radar App.Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/57.jpg)
Example: Radar App. (Balanced)
Splitter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilterFIRFilter
FIRFilter FIRFilter
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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/html5/thumbnails/58.jpg)
Example: Radar App. (Balanced)
![Page 59: StreamIt: High-Level Stream Programming on Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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 Raw](https://reader035.fdocuments.in/reader035/viewer/2022062221/56813d81550346895da75ed3/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