Bo Bounded St Stream Sc Scheduli ling in in Polyh lyhedral l OpenStream
Nuno Mig iguel Nob
- bre | nunomiguel.nobre@manchester.ac.uk
Bo Bounded St Stream Sc Scheduli ling in in Polyh lyhedral l - - PowerPoint PPT Presentation
Bo Bounded St Stream Sc Scheduli ling in in Polyh lyhedral l OpenStream Nuno Mig iguel Nob obre | nunomiguel.nobre@manchester.ac.uk Andi Drebes | andi.drebes@inria.fr Graham Riley | graham.riley@manchester.ac.uk Antoniu Pop |
2 / 11
2 / 11
2 / 11
2 / 11
2 / 11
2 / 11
2 / 11
2 / 11
3 / 11
4 / 11
4 / 11
stream s;
s
4 / 11
stream s; task p1 { write three times to s; }
p1 p1 s
4 / 11
stream s; task p1 { write three times to s; } task p2 { write two times to s; }
p1 p2 p1 p2 s
4 / 11
stream s; task p1 { write three times to s; } task p2 { write two times to s; } task r { peek three times from s; }
p1 p2 r p1 p2 r s
4 / 11
stream s; task p1 { write three times to s; } task p2 { write two times to s; } task r { peek three times from s; } task c { read five times from s; }
p1 p2 r c p1 p2 r c s
5 / 11
stream s; parameter N; for(i = 0; i < N; ++i) task tw { write two times to s; } for(j = 0; j < N/2; ++j) task tc { read four times from s; }
5 / 11
stream s; parameter N; for(i = 0; i < N; ++i) task tw { write two times to s; } for(j = 0; j < N/2; ++j) task tc { read four times from s; }
5 / 11
stream s; parameter N; for(i = 0; i < N; ++i) task tw { write two times to s; } for(j = 0; j < N/2; ++j) task tc { read four times from s; }
tc,0 tw,0 tw,1
6 / 11
6 / 11
𝑙∈ℕ𝑜
𝑙1 𝑦 𝑞2 𝑙2 𝑦 … 𝑞𝑜 𝑙𝑜(𝑦)
6 / 11
𝑙∈ℕ𝑜
𝑙1 𝑦 𝑞2 𝑙2 𝑦 … 𝑞𝑜 𝑙𝑜(𝑦)
7 / 11 stream s; parameter N; for(i = 0; i < N; ++i) task tw { write two times to s; } for(j = 0; j < N/2; ++j) task tc { read four times from s; }
tw,0 tw,1 tw,2 tw,3 tc,0 tw,0 tw,1 tc,1 tw,2 tw,3
tc,0 tc,1 s
7 / 11 stream s; parameter N; for(i = 0; i < N; ++i) task tw { write two times to s; } for(j = 0; j < N/2; ++j) task tc { read four times from s; }
tw,0 tw,1 tw,2 tw,3 tc,0 tw,0 tw,1 tc,1 tw,2 tw,3
tc,0 tc,1 tw,2
s
7 / 11 stream s; parameter N; for(i = 0; i < N; ++i) task tw { write two times to s; } for(j = 0; j < N/2; ++j) task tc { read four times from s; }
tw,0 tw,1 tw,2 tw,3 tc,0 tw,0 tw,1 tc,1 tw,2 tw,3
tc,0 tc,1 tw,2
s
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3 s
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
tw,3 s
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
tw,3 s
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
s
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
s tsour
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
s tw,3
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
s tw,2
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
s tw,1
8 / 11 stream s; parameter N; task tsink { read once from s; } for(k = 1; k < N; ++k) task tw { read once from s; write once to s; } task tsource { write once to s; }
tsour tsink tw,1 tw,2
tw,1 tw,2 tsour tsink
tw,3 tw,3
s tsink
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tb ta s1 s2
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tb ta s1 s2
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tb ta s1 s2
ta
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tb ta s1 s2
ta tb
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tb ta s1 s2
ta tb
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tw1
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
ta
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tc2
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tw2
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tb
9 / 11 stream s1, s2; task tw1 { write two times to s1; } task tw2 { write three times to s2; } task ta { write two times to s2; read two times from s1; } task tb { write once to s1; read three times from s2; } task tc1 { read once from s1; } task tc2 { read two times from s2; }
tw1 tw2 ta tb tc1 tc2
tc1
10 / 11
11 / 11