Download presentation
Published byArthur Lickey Modified over 9 years ago
1
A Dataflow Programming Language and Its Compiler for Streaming Systems
Haitao Wei, Stephane Zuckerman, Xiaoming Li, and Guang Gao University of Delaware
2
Why a new dataflow programming language?
3
Why a new dataflow programming language?
4
Why a new dataflow programming language?
5
Why a new dataflow programming language?
Arbitrary dataflow graph with multiple input/output operators Beyond static mapping True asynchronous processing Primitive and compositional coding Code reuse: using subgraph template Easy to construct dataflow graph: using explicit variable/name passing to connect the computation node Efficiency under dynamic program configurations Automatic software pipelining Optimized resource allocation and mapping
6
COStream Programming Language
Multiple I/O Operators VS Single I/O Operator Split Join Fork-join style dataflow graph in Streamit with single input/output and split-join structure Arbitrary Dataflow graph in COSTream with multiple Input/Output Operator and stream
7
COStream Programming Language
composite Connect operators to construct a dataflow subgraph Can be instantiated to reuse the code to explore the parallelism
8
COStream Programming Language
Stream variable and dataflow graph construct Split composite Main(){ graph stream<float x> S=A(){… } stream<float x> T=B(){…} stream<float x> P=C(T,S){…} A B A B Join C Costream: Easy to construct and make it simple C StreamIt: Introduce useless split-join nodes which makes programming hard and brings the overhead
9
Example: Moving Average
Source composite Main(){ Int N=10; graph stream<float x> S=Source(){ int x; init{x=0;} work{ S[0].x=x; x++; } //initialize an instance of composite MovAve stream<float x> P=MovAver(S)(N); Sink(P){ print(P[0].x); }} composite MovAver(output O, input rawIn){ param int N; graph stream<float x> O=Aver(rawIn){ float w[N]; init{ for(i=0;i<N;i++) w[i]=i;} work{ int sum=0, i; sum += rawIn[i].x*w[i]; O[0].i=sum/N; } window{ rawIn sliding(N,1) O tumbling(1);} }} … N Sliding Window Average tumbling Window 1 Sink
10
Example: Moving Average
Source composite Main(){ Int N=10; graph stream<float x> S=Source(){ int x; init{x=0;} work{ S[0].x=x; x++; } //initialize an instance of composite MovAve stream<float x> P=MovAver(S)(N); Sink(P){ print(P[0].x); }} composite MovAver(output O, input rawIn){ param int N; graph stream<float x> O=Aver(rawIn){ float w[N]; init{ for(i=0;i<N;i++) w[i]=i;} work{ int sum=0, i; sum += rawIn[i].x*w[i]; O[0].i=sum/N; } window{ rawIn sliding(N,1) O tumbling(1);} }} … N Sliding Window Average tumbling Window 1 Sink
11
Example: Moving Average
Source composite Main(){ Int N=10; graph stream<float x> S=Source(){ int x; init{x=0;} work{ S[0].x=x; x++; } //initialize an instance of composite MovAve stream<float x> P=MovAver(S)(N); Sink(P){ print(P[0].x); }} composite MovAver(output O, input rawIn){ param int N; graph stream<float x> O=Aver(rawIn){ float w[N]; init{ for(i=0;i<N;i++) w[i]=i;} work{ int sum=0, i; sum += rawIn[i].x*w[i]; O[0].i=sum/N; } window{ rawIn sliding(N,1) O tumbling(1);} }} … N Sliding Window Average tumbling Window 1 Sink
12
Example: Moving Average
Source composite Main(){ Int N=10; graph stream<float x> S=Source(){ int x; init{x=0;} work{ S[0].x=x; x++; } //initialize an instance of composite MovAve stream<float x> P=MovAver(S)(N); Sink(P){ print(P[0].x); }} composite MovAver(output O, input rawIn){ param int N; graph stream<float x> O=Aver(rawIn){ float w[N]; init{ for(i=0;i<N;i++) w[i]=i;} work{ int sum=0, i; sum += rawIn[i].x*w[i]; O[0].i=sum/N; } window{ rawIn sliding(N,1) O tumbling(1);} }} … N Sliding Window Average tumbling Window 1 Sink
13
Example: Moving Average
Source composite Main(){ Int N=10; graph stream<float x> S=Source(){ int x; init{x=0;} work{ S[0].x=x; x++; } //initialize an instance of composite MovAve stream<float x> P=MovAver(S)(N); Sink(P){ print(P[0].x); }} composite MovAver(output O, input rawIn){ param int N; graph stream<float x> O=Aver(rawIn){ float w[N]; init{ for(i=0;i<N;i++) w[i]=i;} work{ int sum=0, i; sum += rawIn[i].x*w[i]; O[0].i=sum/N; } window{ rawIn sliding(N,1) O tumbling(1);} }} … N Sliding Window Average tumbling Window 1 Sink
14
Compiler Framework COStream program B A C E Synchronization Data Flow
Front-end Lexer, parser and construct AST B MIR Construct stream graph from AST A C E Synchronization Data Flow D Symbol Execute Initial && Periodic schedule of SG Runtime System Low-level c/c++ compiler Optimization Parallel exploring Buffer allocation Synchronization Multi/Many-core Code Generation
15
Software Pipelining A0 21 A1 B0 9 B1 B2 Core1 Core2 Core3
Step1:Task Assignment
16
Software Pipelining Stage1 Stage0 A0 21 A1 B0 9 B1 B2
Step2:Stage Assignment
17
Software Pipelining Time B0 B1 B2 Core1 Core2 Core3 A0 A1 …
Barrier
20
Ongoing Research Compilation Backend Currently using pthread
Software Pipelining within codelets Backend Currently using pthread Will use Fresh Breeze runtime
21
Ongoing Research (cont’d)
Runtime Currently re-optimize for every new configuration Graceful transition between configurations
22
Transition between configurations
23
Transition between configurations
24
Transition between configurations
25
Transition between configurations
26
Acknowledgements AFOSR FA9550-13-1-0213
NSF CCF , CCF and OCI
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.