update on strict sequential constructiveness
play

Update on Strict Sequential Constructiveness Alexander - PowerPoint PPT Presentation

Update on Strict Sequential Constructiveness Alexander Schulz-Rosengarten Reinhard von Hanxleden and Michael Mendler Kiel University / Bamberg University 2 Sequential Constructiveness / SCL Variables x = 1; Sequence if x {


  1. Update on Strict Sequential Constructiveness Alexander Schulz-Rosengarten Reinhard von Hanxleden and Michael Mendler Kiel University / Bamberg University

  2. 2

  3. Sequential Constructiveness / SCL ● Variables x = 1; ● Sequence if x { ● Conditional x = 0 ● Fork-par-join }; y = x ● Goto ● Pause 3

  4. Sequential Constructiveness / SCL fork x = 1; I x = 1 if x { par x = 0 x = x + 2 U }; par y = x y = x R join 4

  5. Recall P10 int x, y; { y = 0; //S0 fork x = 1; //S1 y = x //S2 par if y == 0 { //S3 x = 0 //S4 } join } → Speculation about execution of S4 5

  6. Thou shalt not Speculate Strict Sequential Constructiveness is Sequential Constructiveness without speculation Idea : Ground SC in constructiveness in the spirit of Esterel (Berry-Constructiveness) 6

  7. Restricting Sequential Constructiveness ● Use Esterel for analysis and code generation ● Requires transformation from SCL to Esterel Esterel SCL SSA SCL Signal Encoding SSA 7

  8. P10 int x, y; int x0, x1, y0, y1; { { y = 0; y0 = 0; fork fork x = 1; x0 = 1; y = x y1 = ? (x0, x1) par par if y == 0 { if y1 == 0 { x = 0 x1 = 0 } } join join SSA } } 8

  9. P10 int x, y; int x0, x1, y0, y1; { { y = 0; y0 = 0; fork fork x = 1; x0 = 1; y = x y1 = conc (x0, x1) par par if y == 0 { if y1 == 0 { x = 0 x1 = 0 } } join join SSA Esterel } } 9

  10. Variable Encoding SCL Esterel emit xp; x = true emit x; x = false emit xp; present conflict then emit error; else emit xp; x = conc(..) present value then emit x end 10 end

  11. signal x0p, x0, x1p, x1 in signal y0p, y0, y1p, y1 in signal error in P10 [ emit y0p; [ emit x0p; emit x0; int x0, x1, y0, y1; present x0p and x1p and { ((x0 and not x1) or (not x0 and x1)) then y0 = 0; emit error fork else emit y1p; x0 = 1; present (x0p and x0) or y1 = conc(x0, x1) (x1p and x1) then emit y1 par end if y1 == 0 { end || x1 = 0 present y1p and (not y1) then } emit x1p end join ] } || signal err in Esterel present error then present err else emit err end end 11 end signal ]

  12. signal x0p, x0, x1p, x1 in signal y0p, y0, y1p, y1 in signal error in P10 [ emit y0p; [ emit x0p; emit x0; int x0, x1, y0, y1; present x0p and x1p and { ((x0 and not x1) or (not x0 and x1)) then y0 = 0; emit error fork else emit y1p; x0 = 1; present (x0p and x0) or y1 = conc(x0, x1) (x1p and x1) then emit y1 par end if y1 == 0 { end || x1 = 0 present y1p and (not y1) then } emit x1p end join ] } || signal err in Esterel present error then present err else emit err end end 12 end signal ]

  13. signal x0p, x0, x1p, x1 in signal y0p, y0, y1p, y1 in signal error in P10 [ emit y0p; [ emit x0p; emit x0; int x0, x1, y0, y1; present x0p and x1p and { ((x0 and not x1) or (not x0 and x1)) then y0 = 0; emit error fork else present x0p and x1p and emit y1p; x0 = 1; ((x0 and not x1) or present (x0p and x0) or y1 = conc(x0, x1) (x1p and x1) then (not x0 and x1)) then emit y1 par emit error end if y1 == 0 { end else || x1 = 0 ... present y1p and (not y1) then } emit x1p end join ] } || signal err in Esterel present error then present err else emit err end end 13 end signal ]

  14. signal x0p, x0, x1p, x1 in signal y0p, y0, y1p, y1 in signal error in P10 [ emit y0p; [ emit x0p; emit x0; int x0, x1, y0, y1; present x0p and x1p and { ((x0 and not x1) or (not x0 and x1)) then y0 = 0; emit error fork else emit y1p; x0 = 1; present (x0p and x0) or y1 = conc(x0, x1) (x1p and x1) then emit y1 par end if y1 == 0 { end || x1 = 0 present y1p and (not y1) then } emit x1p end join ] } || signal err in Esterel present error then present err else emit err end end 14 end signal ]

  15. P10 int x0, x1, y0, y1; { y0 = 0; Not Berry fork Constructive x0 = 1; y1 = conc(x0, x1) → Not Strictly par Sequentially if y1 == 0 { x1 = 0 Constructive } join } 15

  16. New Compile Chain SCCharts SCL Esterel SCEst 16

  17. SCChart: ABO 17

  18. SCEst present S then unemit S else emit S; end; present S % do stuff end 18

  19. SSA Merge Functions for SC seq(x0, x1) conc(x0, x1) Further issues: ● Updates ● Persistent Variables ● Interface Variables ● Loops 19

  20. Update Value Merge fork x = 1 par x = x + 2 par y = x join 20

  21. Update Value Merge fork x0 = 1 par x1 = x0 + 2 par y = conc(x0, x1) join 21

  22. Update Value Merge fork x0 = 1 par x1up = 2 par y = conc(x0, x1) join 22

  23. Update Value Merge fork x0 = 1 par x1up = 2 par y = combine ( + , x0, x1up ) join 23

  24. Persistence of Merged Values fork x0 = 1; if I { x0 = 1; x1 = 0 if I { } x1 = 0 pause; } y = pre( xreg ) pause; par y = seq(x0, x1) l: xreg = seq(seq( pre(xreg), x0), x1); goto l //or terminate join 24

  25. Interface Variables output int x; int x0, x1; output int x0, x1; fork x0 = 1; x0 = 1 if I { if I { x1 = 0 x1 = 0 } } par l: x = seq(x0, x1); goto l //or terminate join 25

  26. Loops fork x = 0; x0 = 0; Loop: Loop: if I { if I { x1 = 1 x = 1 } } y = seq(seq(seq(pre(xreg), x0), x2), x1); y = x; pause; pause; if J { if J { x2 = 0 } x = 0 goto Loop } par goto Loop l: xreg = ... 26

  27. Current Limitations ● Instantaneous loops ● Goto structures ● Static scheduling of updates ● Some confmuent writes 27

  28. Alternative Dual-Rail Encoding not_x \ x present absent present illegal false absent true undef 28

  29. Future Work SCCharts SCL Esterel SCEst The End 29

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend