Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf ·...

35
Arrays in Lustre P. Caspi, N. Halbwachs, F. Maraninchi, L. Morel, P. Raymond Verimag/CNRS Grenoble N. Halbwachs (Verimag/CNRS) Arrays in Lustre 1 / 35

Transcript of Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf ·...

Page 1: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre

P. Caspi, N. Halbwachs, F. Maraninchi,L. Morel, P. Raymond

Verimag/CNRSGrenoble

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 1 / 35

Page 2: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

1 Arrays in Lustre-V4

2 Arrays in Lustre-V6

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 2 / 35

Page 3: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Arrays in Lustre-V4 [Rocheteau 92]

Introduced for hardware description (register, regularcircuits), and verification (scalable examples).

Expanded by the front-end

Constraints:

Introduce an array mechanism that fits the generaldata-flow philosophy of the languageDon’t introduce the possibility of unpredictable runtimeerrors (index out of bounds)

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 3 / 35

Page 4: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Arrays in Lustre-V4 (cont.)T : intˆ42 ;const SIZE = 16;type register = boolˆSIZE ;R : register ;

(SIZE is an integer constant known at compile time)

Equations (as usual)R = Exp ;

(Exp is an expression of type register)

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 4 / 35

Page 5: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Arrays in Lustre-V4 (cont.)

Access to array elementsLet A be an array of size n. Its elements are

A[0], A[1], . . . A[n-1]

A[i] is legal if i is an integer constant known at compile time,with 0≤ i≤ n−1

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 5 / 35

Page 6: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Arrays in Lustre-V4 (cont.)

Constructors: [0, 3, 2] trueˆ3 = [true, true, true]

Slices:

A[2..5] = [A[2], A[3], A[4], A[5]]

A[5..2] = [A[5], A[4]. A[3], A[2]]

A[i..j] =

[A[i], A[i+1], . . . , A[j] if i ≤ j

[A[i], A[i-1], . . . , A[i] if j < i

(i and j are static constants)

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 6 / 35

Page 7: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Arrays in Lustre-V4 (cont.)

Concatenation:

A | B = [A[0], A[1], . . . , A[n-1], B[0], B[1],. . . , B[m-1]

Lustre polymorphic operators

if...then...else..., pre, ->

apply to arrays

Ex.: A = trueˆ4 -> if c then B[4..7] else pre(A)

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 7 / 35

Page 8: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Homomorphic extensionEach operator or node of type

τ1× τ2× . . .× τk → θ1× . . .×θ`

has also the type

τ1ˆn× τ2ˆn× . . .× τk ˆn → θ1ˆn× . . .×θ`ˆn

Ex.: A or B = [A[0] or B[0], A[1] or B[1], . . . , A[n-1] or B[n-1]]

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 8 / 35

Page 9: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Examples

Define an array A of size 10, containing successive integersfrom 1 to 10.

1st solution

A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 9 / 35

Page 10: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

2nd solution

1

1 1 1 1 1 1 1 1 1

A[0] = 1; A[1..9] = A[0..8] + 1ˆ9;

3rd solution

A = [1] | (A[0..8] + 1ˆ9);

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 10 / 35

Page 11: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Define a node building an array A of size n, containingsuccessive integers from 1 to n.

node N(const n: int) returns (A: intˆn);let

A = [1] | (A[0..(n-2)] + 1ˆ(n-1));tel

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 11 / 35

Page 12: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Cumulated “or”

OR(s,A) = A[0] or A[1] or ... or A[s-1]

or or or or

OR

A

ff

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 12 / 35

Page 13: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

node OR(const s: int; A: boolˆs) returns (OR: bool);var X : boolˆ(s+1);let

OR = X[s];X = [false] | (X[0..s-1] or A);

tel

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 13 / 35

Page 14: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Generalized delay

Takes a non negative integer constant d and a boolean x andreturns the dth last value of x (false during the first d cycles).

dxxxn xn−1 xn−d

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 14 / 35

Page 15: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

node DELAY(const d: int; x: bool) returns (dx: bool);var D: boolˆ(d+1);let

dx = D[d];D = [x] | (falseˆd ->pre(D[0..d-1]);

tel

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 15 / 35

Page 16: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

A general combinational adder

Use the one bit adder FULL ADD

node FULL ADD(ci,a,b: bool) returns (co, s: bool);let

s = a xor (b xor ci);c0 = (a and b) or (b and ci) or (a and ci);

tel

to build an n-bits adder.

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 16 / 35

Page 17: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

node ADD(const n: int; A, B: boolˆn)returns (S: boolˆn; overflow: bool);

var CARRY: boolˆn;let

(CARRY,S) =FULL ADD([false] | CARRY[0..n-2], A, B);

overflow = CARRY[n-1];tel

a0 b0 a1 b1 a2 b2 a3 b3

0 c0 c1 c2 c3FA FA FA FA

s0 s1 s2 s3 carry

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 17 / 35

Page 18: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Arrays in Lustre-V4

Restrictive, but quite satisfactory and elegant for description.

The compiler V4 first expands arrays into single variables.

Ok for hardware and verificationUnsatisfactory for softwareArrays and loops in the object code needed.

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 18 / 35

Page 19: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Good sequential code generation

Problems:

Code optimization: avoid useless intermediate arraysComputation order: difficult cases can occur.

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 19 / 35

Page 20: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Code optimization: avoid useless intermediate arrays

node OR(const s: int; A: boolˆs)returns (OR: bool);

var X : boolˆ(s+1);let

OR = X[s];X = [false] |

(X[0..s-1] or A);tel

x=0;for(i=0;i<n;i++){

x= x |A[i];}OR = x;

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 20 / 35

Page 21: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V4

Computation order: difficult cases can occur

Y = f(X);

X[0] = a;

X[1..2] = g(Y[4..5]) ;

X[3..5] = h(Y[0..3]);

1 2

3 4

5 6

7 8

9 1011 12

X Y

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 21 / 35

Page 22: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

1 Arrays in Lustre-V4

2 Arrays in Lustre-V6

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 22 / 35

Page 23: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

Arrays in Lustre V6

New proposal integrated into SCADE6

Restrict the use of arrays to identified operators ofgeneral-usage.Define efficient compilation scheme for these operators.Key: forbid arbitrary dependences within a single array.

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 23 / 35

Page 24: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

Arrays in Lustre V6

Array types: unchangedEquations: unchanged, but self-dependence forbiddenAccess to elements: unchanged, but no more slicesConstructors: unchangedApplication of polymorphic operators unchangedHomomorphic extension: suppressed (replaced)

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 24 / 35

Page 25: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

Iterators

Introduce a few higher order operators, implementing themost useful patterns (classical in functional programming)

Iterators take as arguments a node or an operator, and asize, and define a new operator.

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 25 / 35

Page 26: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “map” iterator

For any node or operator N,of sort

τ1× . . .× τk →

θ1× . . .×θ`

map<N,n> is of sort

τ1ˆn× . . .× τk ˆn→

θ1ˆn× . . .×θ`ˆn

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 26 / 35

Page 27: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “map” iterator

Ex.: A = map<+,n>(B,C)

means ∀i = 0 . . .n−1, A[i] = B[i] + C[i]

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 27 / 35

Page 28: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “red” iterator

For any node or operator N, of sort

τ× τ1× . . .× τk → τ

red<N,n> is of sort

τ× τ1ˆn× . . .× τk ˆn→ τ

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 28 / 35

Page 29: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “red” iterator

Ex.: b = red<or,n>(false, A)

means b = false or A[0] or . . . or A[n-1]

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 29 / 35

Page 30: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “fill” iterator

For any node or operator N, of sort

τ → τ×θ1× . . .×θ`

fill<N,n> is of sort

τ → τ×θ1ˆn× . . .×θ`ˆn

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 30 / 35

Page 31: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “fill” iterator

Ex.: Given the node

node MyInc(i: int) returns (j,k: int);let j = i+1; k = i; tel

(A,x) = fill<MyInc,n>(0);

means ∀i = 0 . . .n−1, A[i] = i, and x = n

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 31 / 35

Page 32: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “mapred” iterator

For any node or operator N, ofsort

τ× τ1× . . .× τk →

τ×θ1× . . .×θ`

map red<N,n> is of sort

τ× τ1ˆn× . . .× τk ˆn→

τ×θ1ˆn× . . .×θ`ˆn

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 32 / 35

Page 33: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

The “mapred” iterator

Ex.:(overflow,S) = map red<FULL ADD,n>(false,A,B);

means

∀i = 0 . . .n−1,

(ci+1,S[i]) = FULL ADD(ci , A[i], B[i])

c0 = false

overflow = cn

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 33 / 35

Page 34: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

Conclusions

Still quite powerfulEasy to produce good codeFurther optimizations [Morel01 . . . ]

e.g. map<N,n>(map<M,n>(X)) = map<N◦M, n>(X)

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 34 / 35

Page 35: Arrays in Lustre - laure.gonnord.orglaure.gonnord.org/pro/research/ER02_2014/nh_arrays.pdf · Arrays in Lustre-V4 Arrays in Lustre-V4[Rocheteau 92] Introduced for hardware description

Arrays in Lustre-V6

Conclusions

A step towards a higher order language(Synchronous Lucid [Pouzet], Lava [Sheeran])

Tremendous reduction of code size in real applications(Airbus)Implementation in Lustre V6, and (more or less) in Scade6

N. Halbwachs (Verimag/CNRS) Arrays in Lustre 35 / 35