La compilation logicielle dEsterel v5 Gérard Berry Chaire Algorithmes, machines et langages Collège de France Cours 4, 23 avril 2013
23/04/ G. Berry, Collège de France Rappel : Esterel noyau
23/04/ G. Berry, Collège de France Rappel : codes de retour Si deux traps sont levés en même temps, seul le plus extérieur compte trap T in trap U in nothing 0 || pause 1 || exit U 2 || exit T 3 end trap || exit T 2 end trap Code de retour du parallèle max des codes des branches (codage de Gonthier)
23/04/ G. Berry, Collège de France Rappel : sémantique comportementale p E E k p signaux reçus signaux émis code de retour Diffusion : E E 0 : terminaison 1 : pause 2 : sortie dun niveau de trap 3 : sortie de deux niveaux de trap k
23/04/ G. Berry, Collège de France Rappel : les règles problématiques si une seule règle sapplique => déterminisme Mais si les deux sappliquent, problème ! absence présence
23/04/ G. Berry, Collège de France Rappel : cycles de causalité if s then emit s if s else emit s contradiction pour la causalité pas contradictoire, mais deux choix possibles if s then emit s else emit s pas contradictoire, un seul choix possible mais problématique car non constructif ! Hamlet : ToBe ToBe or not ToBe
23/04/ G. Berry, Collège de France Propagation constructive : Must et Cannot emit x || if not x then emit y || if not y then emit z Must emit x || if not x then emit y || if not y then emit z car les émetteurs de y ont disparu Cannot emit x || if not x then emit y || if not y then emit z emit x || if not x then emit y || if not y then emit z Must
23/04/ G. Berry, Collège de France Règles constructives pour p \ s absence présence Déterministe car
23/04/ G. Berry, Collège de France Acceptation des bons cycles X Y xor Y X grâce au if if I then if X then emit Y else if Y then emit X end if X then emit Y; pause ; if Y then emit X X Y xor Y X grâce au pause Comme pour lanalyse constructive des circuits cycliques, cf. cours 1 et séminaire Ledinot
23/04/ G. Berry, Collège de France La sémantique constructive : Must Ce que doit faire une instruction dans un environnement donné signaux devant être émis code devant être retourné
23/04/ G. Berry, Collège de France La sémantique constructive : Can signaux pouvant être émis codes pouvant être retournés Ce que peut faire une instruction dans un environnement donné
23/04/ G. Berry, Collège de France
23/04/201313G. Berry, Collège de France
23/04/ G. Berry, Collège de France
23/04/ G. Berry, Collège de France
23/04/201316G. Berry, Collège de France
23/04/ G. Berry, Collège de France Réduction comportementale nothing; if x then pause else emit y end ; emit z pause; if x then nothing else emit y en ; emit z pause; if x then nothing else emit y en ; nothing pause; if x then pause else emit y end ; emit z, 1 {x}{x} {z}, 1
{x}{x}, 1 23/04/ G. Berry, Collège de France Marquer lactivité dans linstruction {z}, 1 pause; if x then pause else emit y end ; emit z pause; pause; if x then pause else emit y end ; emit zpause; pause; if x then pause else emit y end ; emit zpause; boot pause;, 1
23/04/ G. Berry, Collège de France Instructions actives
23/04/ G. Berry, Collège de France Expansion des instructions actives
23/04/ G. Berry, Collège de France Traduction en circuits synchrones Chaque instruction génère un sous-circuit : GO RES SUSP KILL SEL K0 K1 K2... EE' p –E and E: signaux reçus et émis –GO : démarrer p –RES : continuer p depuis son état courant –SUSP: geler p pour le cycle courant –KILL : tuer p en remettant ses registres à 0 –SEL : p vivant, au moins un registre à 1 –Ki : code de retour, 1 fil par code K0 : termine K1 : pause K2, K3,… : sortie de trap englobants abort : RES 0 weak abort : RES 1, KILL 1 Propagation des 1 : Must Propagation des 0 : Cannot
23/04/ G. Berry, Collège de France nothing (0), exit (k 2) et emit s (!s) GO K0 s emit s GOKi pour i 1 (pause) i 0 nothing i k 2 exit T k
23/04/ G. Berry, Collège de France pause (1) KILL RES K0SUSP GOK1 SEL
23/04/ G. Berry, Collège de France present s then p else q end (s?p,q) s E SEL K0 K1 K2 GO RES SUSP KILL E p q
23/04/ G. Berry, Collège de France abort p when s
23/04/ G. Berry, Collège de France suspend p when s RES SUSP s K0 GO KILL SEL K1 K2 E E' p
23/04/ G. Berry, Collège de France Séquence p;q RES SUSP K0 GO KILL SEL K1 K2 E E' p q
23/04/ G. Berry, Collège de France loop p end p* p RES SUSP GO KILL E K0 SEL K1 K2 E' Cycles combinatoires interdits !
23/04/ G. Berry, Collège de France Parallèle || (ou |) K0 SEL K1 K2 E' RES SUSP GO KILL E K3 p q
23/04/ G. Berry, Collège de France Le synchroniseur 2-adique En voyant L (left), R (right) et K comme 2-adiques : K Max(L,R) { max(l, r), l L, r R } K (L L) (R R) (L R) K (L | L) & (R | R) & (L | R) en C unsigned
23/04/ G. Berry, Collège de France Max 2-adique malin L {3,4,5,7}R {1,2,3,6} K Max(L,R) { max(l, r) | l L, r R } {3,4,5,6,7} K { k L R | k max(min(L), min(R) } L L L L L L L L { k N | k min(L) } (L L) & (R R) { k N | k min(L) et k min(R) } (L L) & (R R) { k N | k max(min(L), min(R)) } K (L L) & (R R) & (L R) }
23/04/ G. Berry, Collège de France Circuit pour trap T in p end {p} RES SUSP GO KILL E K0 SEL K1 K2 E' p
23/04/ G. Berry, Collège de France signal s in p end (p\ s) RES SUSP GO KILL E K0 SEL K1 K2 E' peut provoquer des cycles combinatoires, sains pour les programmes constructifs! p
23/04/ G. Berry, Collège de France ABRO : circuit réseau de preuve loop abort { await A || await B }; emit O ; halt when R; end loop optimisé loop { await A || await B }; emit O each R
23/04/ G. Berry, Collège de France Actions sur les données signal X : integer in sustain ?X <= ?I+1 || loop pause; emit ?Y <= ?X+pre(?X) end loop end signal dépendances de données pour propagation constructive et tri topologique
23/04/ G. Berry, Collège de France La réincarnation module Reincarnation : output X ; loop signal S in present S then emit X end ; pause ; emit S end signal end loop end module
23/04/ G. Berry, Collège de France La réincarnation module Reincarnation : output X : loop signal S in present S then emit X end ; pause ; emit S end signal end loop end module
23/04/ G. Berry, Collège de France La réincarnation module Reincarnation : output X : loop signal S in present S then emit X end ; pause ; emit S end signal end loop end module
23/04/201339G. Berry, Collège de France module Vishnu-3 : loop trap T1 in signal S1 in pause; emit S1; exit T1 || loop trap T2 in signal S2 in pause; emit S2; exit T2 || loop present S1 and S2 then emit X end; present S1 and not S2 then emit Y end; present not S1 and not S2 then emit Z end; pause end loop end signal end trap end loop end signal end trap end loop end module
23/04/ G. Berry, Collège de France Kit pour neuf réincarnations
23/04/ G. Berry, Collège de France Séparer les réincarnations par duplication loop signal S in present S then emit X end ; pause ; emit S end signal end loop loop signal S in present S then emit X end ; pause ; emit S end signal ; signal S in present S then emit X end ; pause ; emit S end signal ; end loop Mais dupliquer récursivement des boucles imbriquées explosion exponentielle !
loop signal S in present S then emit X end ; gotopause P1; pause; emit S end signal ; signal S in present S then emit X end ; P1 : pause ; pause; emit S end signal ; end loop 23/04/ G. Berry, Collège de France Dupliquer seulement la surface loop signal S in present S then emit X end ; pause ; emit S end signal end loop
23/04/ G. Berry, Collège de France Pire cas loop trap... loop trap... loop trap Pire cas quadratique + analyse statique (O. Tardieu) sans problème en pratique 3 incarnations, pas 4 !
23/04/ G. Berry, Collège de France Structure du compilateur foo.strlbar.strl foo.icbar.ic all.lc all.sc all1.call2.call4.c interprétation constructive équations de circuits triées automate explicite all5.v model checkers circuit / FPGA langage noyau équations de circuit Traçabilité complète pour debugging
23/04/ G. Berry, Collège de France Code équation de circuits triées E[64] = __WRISTWATCH_R[19]&&!(__WRISTWATCH_R[0]); E[65] = (E[62]&&E[63])||(__WRISTWATCH_R[19]&&E[64]&&!(E[63])); E[66] = E[61]&&E[65]; E[67] = __WRISTWATCH_R[19]||__WRISTWATCH_R[20]; E[68] = __WRISTWATCH_R[21]||__WRISTWATCH_R[22]; E[69] = E[67]||E[68]; E[62] = (E[64]&&E[63])||(__WRISTWATCH_R[20]&&E[62]&&!(E[63])); E[67] = (E[69]&&!(E[67]))||E[65]||E[62]; E[64] = __WRISTWATCH_R[22]&&!(__WRISTWATCH_R[0]); E[58] = (E[64]&&E[60])||(__WRISTWATCH_R[21]&&E[58]&&!(E[60])); E[64] = (E[61]&&!(E[65]))||(__WRISTWATCH_R[22]&&E[64]&&!(E[60])); E[68] = (E[69]&&!(E[68]))||E[58]||E[64]; E[66] = E[66]&&E[67]&&(E[68]||E[66]); if (__WRISTWATCH_R[0]) { __WRISTWATCH_A99; #ifdef TRACE_ACTION fprintf(stderr, "__WRISTWATCH_A99\n"); #endif }
1982, Thèse L. Cosserat : première sémantique, compilation v1 par calcul symbolique des résidus 23/04/ G. Berry, Collège de France Résumé 1985, Thèse Ph. Couronné : Esterel v2 (LeLisp) premier vrai compilateur, lent / explosif 1989, Thèse G. Gonthier + équipe : Esterel v3 (C++), causalité par potentiels, réincarnation, rapide / explosif 1991, virage circuits : Esterel v4 (C++) premier vrai compilateur, rapide / quasi-linéaire, mais causalité restreinte (tri topologique); vérification formelle ~ 1995, causalité constructive générale, Esterel v5 (C++ / TiGeR) : Esterel v4 + interprète constructif + compilation BDD (chère)
Traduction directe en C rapide : –Stephen Edwards : Synopsys Compiler (Synopsys), Columbia Compiler (U. Colombia). –Reprise par Dumitru Potop dans Esterel v5+ et Marc Perreaut dans Esterel v7 23/04/ G. Berry, Collège de France Travaux reliés Automates synchrones hiérarchiques: – Florence Maraninchi (IMAG) : Argos – Charles André (I3S Nice) : SyncCharts Esterel Sudio / Scade 6 Langages réactifs – Frédéric Boussinot et. al. : Reactive C, Junior, SugarCubes, etc. – Marc Pouzet, Louis Mandel (Paris X1, ENS) : Reactive ML Autres langages synchrones – Lustre / SCADE (Verimag), Signal (Rennes) – Quartz / Averest : Klaus Schneider (U. Kaiserslautern) – Timed CCP : Vijay Saraswat (IBM), ECL (Lavagno / Sentovich), etc.
23/04/ G. Berry, Collège de France Références Compiling Esterel Dumitru Potop-Butucaru, Stephen Edwards et Gérard Berry Springer, 2008 The Constructive Semantics of Pure Esterel Gérard Berry, web book...et plus sur www-sop.inria.fr/members/Gerard/Berrywww-sop.inria.fr/members/Gerard/Berry