![Page 1: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/1.jpg)
A code generator for the CAL actor language
Lars Wernli
Supervisor: Joern Janneck, UC BerkeleyProfessor: Lothar Thiele, ETH Zuerich
![Page 2: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/2.jpg)
What is Ptolemy II?
continuous time
finite-state machine
discrete time
Hierarchical, heterogeneous model
![Page 3: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/3.jpg)
Actor oriented design
input ports output ports
parameters
Actortokens
‘C’
31
‘L’ ‘A’
tokens
42
‘P’
99 12 ‘\’
state 42
Actors decouple data and control
N
Data
41
FIRE
![Page 4: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/4.jpg)
Actor oriented design
Actors decouple data and control
input ports output ports
parameters
Actortoken
1
tokens
2
‘P’
99 12 ‘\’
state 45
N
Data
445 4142
‘C’‘A’‘L’
![Page 5: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/5.jpg)
Actors in Ptolemy II
Firing is divided into three phases:• prefire() 1 time
– checks whether action can fire or not
• fire() n times– calculates output tokens
• postfire() 0 or 1 times– updates persistent state
![Page 6: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/6.jpg)
Writing a Ptolemy actorint sum = 0, _sum;
prefire() { return N.hasToken();}fire() { _sum = sum; int n = N.getToken(); if (Data.hasTokens(n)) {
_sum = _sum + n; for (int i = 0; i < n; i++) Out2.putToken(Data.getToken()); Out1.putToken(_sum); } else { // what to do with the value of n? }}postfire() { sum = _sum; }
![Page 7: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/7.jpg)
Writing a Ptolemy actorint sum = 0, _sum;
prefire() { return N.hasToken();}fire() { _sum = sum; int n = N.getToken(); if (Data.hasTokens(n)) {
_sum = _sum + n; for (int i = 0; i < n; i++) Out2.putToken(Data.getToken()); Out1.putToken(_sum); } else { // what to do with the value of n? }}postfire() { sum = _sum; }
![Page 8: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/8.jpg)
What is CAL?
CAL is a textual language for writing dataflow actors.
Integer sum := 0;
action N:[n], Data:[d] repeat n ==> Out1:[sum], Out2:[d] repeat n do sum := sum + n;end
The actor just introduced written in CAL:
![Page 9: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/9.jpg)
Motivation for using CAL
• makes writing actors more accessible• reduces amount of code to be written• reduces error probability• allows information extraction for model
analysis
• CAL actors may be reused by other platforms, or new versions of Ptolemy
![Page 10: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/10.jpg)
Design goal for CAL
CAL is intended to be retargeted to a variety of
platforms
• make retargeting as simple as possible– modular compiler design– modular code generation
![Page 11: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/11.jpg)
CAL compilation—the big picture.
CAL
CalCore
CAL(0)
CAL(n)
parsing
CAL(1)
transformation,annotationcode generation
source text
Caltrop AST
targetplatform
Ptolemy II MosesPålsjö/Koala JGrafChartLegOS
Java platforms
C platforms
![Page 12: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/12.jpg)
Generic and specific actor
CalCore
generic code generator
platform specific code generator
• Code generator is easy to retarget
• Actor core can be reused by other platforms
![Page 13: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/13.jpg)
Code generator and target code design
• Design goals1. Make retargeting the code generator as
simple as possible2. Reusability of generated code3. Optimize for speed
• Challenges- specify an interface for generic part of the
actor- matching the generic actor interface to
Ptolemy API
![Page 14: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/14.jpg)
State shadowing• Problem: state changing firing in CAL
vs state-invariant fire() in Ptolemy
genericvariable
interface
Ptolemy specific variable object
State: Shadow State:
fire() { listener.rollbackAll(); …}postfire() { … listener.commitAll();}
change listener
42
assign(45)
45
markAsChanged(this)
![Page 15: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/15.jpg)
State shadowing• Problem: state changing firing in CAL
vs state-invariant fire() in Ptolemy
genericvariable
interface
Ptolemy specific variable object
State: Shadow State:
fire() { listener.rollbackAll(); …}postfire() { … listener.commitAll();}
change listener
42 45
rollbackAll() rollback()
![Page 16: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/16.jpg)
State shadowing• Problem: state changing firing in CAL
vs state-invariant fire() in Ptolemy
genericvariable
interface
Ptolemy specific variable object
State: Shadow State:
fire() { listener.rollbackAll(); …}postfire() { … listener.commitAll();}
change listener
42
assign(47)
47
markAsChanged(this)
![Page 17: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/17.jpg)
State shadowing• Problem: state changing firing in CAL
vs state-invariant fire() in Ptolemy
genericvariable
interface
Ptolemy specific variable object
State: Shadow State:
fire() { listener.rollbackAll(); …}postfire() { … listener.commitAll();}
change listener
42 47
![Page 18: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/18.jpg)
State shadowing• Problem: state changing firing in CAL
vs state-invariant fire() in Ptolemy
genericvariable
interface
Ptolemy specific variable object
State: Shadow State:
fire() { listener.rollbackAll(); …}postfire() { … listener.commitAll();}
change listener
42 47
commitAll()
47
commit()
![Page 19: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/19.jpg)
State shadowing• Problem: state changing firing in CAL
vs state-invariant fire() in Ptolemy
genericvariable
interface
Ptolemy specific variable object
State: Shadow State:
fire() { listener.rollbackAll(); …}postfire() { … listener.commitAll();}
change listener
4247
![Page 20: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/20.jpg)
Achievements• code generation for full-fledged
language- higher-order function closures- procedural closures- set/list/map comprehensions- input port patterns- regular action selectors- …
• reusability of generated code• code generator easy to retarget to
other Java platforms
![Page 21: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/21.jpg)
Achievements
• generated actors run with acceptable speed
• facilitate retargeting to other languages (such as C)– design template for code generators
• Pålsjö/Koala LTH
– reusable infrastructure
![Page 22: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/22.jpg)
Future work
– Implement type checking– Describe the transformations on the
AST in XML– Retarget the code generator to other
platforms (LegOS UCB, Moses ETH?)– Model compilation using CAL actor
• Network + actors schedule• Network + actors + schedule actor
![Page 23: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/23.jpg)
It’s time for a demo
![Page 24: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/24.jpg)
Atomic actors in Ptolemy
• implemented in Java• domain polymorph• ports• parameters• split-phase-firing:
– prefire()– fire()– postfire()
![Page 25: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/25.jpg)
Atomic actors in Ptolemy
• implemented in Java• domain polymorph• ports• parameters• split-phase-firing:
– prefire()– fire()– postfire()
![Page 26: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/26.jpg)
The Ptolemy II GUI
![Page 27: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/27.jpg)
Models in Ptolemy II
• actor based• heterogeneous systems• hierarchical• composite actors treated like
atomic• directors decouple behavior &
control flow
![Page 28: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/28.jpg)
Writing Ptolemy actors in Java..
• ..requires certain knowledge about the Ptolemy II API
• ..results in platform specific classes• ..is error-prone• ..is often redundant• ..makes it hard to extract information
from the actors
Specifying actors in Java is problematic
![Page 29: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/29.jpg)
Writing Ptolemy actors in Java..
• ..requires certain knowledge about the Ptolemy II API
• ..results in platform specific classes• ..is error-prone• ..is often redundant• ..makes it hard to extract information
from the actors
Specifying actors in Java is problematic
![Page 30: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/30.jpg)
A better approach
We should be able to generate actors from a more abstract description.
• Benefits:– makes writing actors more accessible– actors may be retargeted to other
platforms, or new versions of Ptolemy– reduces error probability– reduces amount of code to be written– actors get more readable and analyzable
![Page 31: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/31.jpg)
Can you guess what this does?
actor B () Double Input ==> Double Output:
Integer n := 0; Double sum := 0;
action [a] ==> [sum / n] DO n := n + 1; sum := sum + a; endend
![Page 32: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/32.jpg)
Can you guess what this does?
actor B () Double Input ==> Double Output:
Integer n := 0; Double sum := 0;
action [a] ==> [sum / n] : n := n + 1; sum := sum + a; endend
![Page 33: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/33.jpg)
What about this?actor PrimeSieve () Integer Input ==> Integer Output:
[Integer --> Boolean] filter := lambda (Integer a) --> Boolean : false end;
function divides (Integer a, Integer b) --> Boolean : b mod a = 0 end
action [a] ==> [] guard filter(a) end
action [a] ==> [a] guard not filter(a) var [Integer --> Boolean] f = filter do
filter := lambda(Integer b) --> Boolean: f(b) or divides(a, b) end;
endend
![Page 34: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/34.jpg)
ActorCore vs Ptolemy API
• state management– fire vs firen/postfire– state changing computation vs
state-invariant fire
• input ports– random access to input channels
vs sequential read methods
![Page 35: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/35.jpg)
The runtime environment1. Variable objects & change listener
– Support state shadowing– Provide a generic interface to the Ptolemy
Token and Parameter objects
2. Port wrappers– Emulate random access input ports– Provide a generic interface to the Ptolemy
TypedIOPorts
Factory– Creates wrapping objects– facilitates decoupling between ActorCore
and Ptolemy API
![Page 36: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/36.jpg)
Three implementation details
• Actors at runtime1. How the PtActor passes Ptolemy
objects to the ActorCore via factory2. How CAL scopes are represented in
the ActorCore• The code generator
3. How the code generator uses the visitor pattern to traverse the AST
![Page 37: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/37.jpg)
1. Actors and the Factory
![Page 38: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/38.jpg)
actor DeadlockPrimeSieve () Integer Input ==> Integer Output:
[Integer --> Boolean] filter := lambda (Integer a) --> Boolean :
false end;
action [a] ==> [a] guard not filter(a) var [Integer --> Boolean] f = filter do
filter := lambda(Integer b) --> Boolean:
f(b) or (lambda (Integer a, Integer b)--> Boolean :
b mod a = 0;end)(a, b)
end end
end
2. CAL scopes
![Page 39: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/39.jpg)
2. Structure of the ActorCore
![Page 40: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/40.jpg)
accept(this)
3. The visitor patterne.argTuple.accept(this);// generate some code…e.function.accept(this);// generate more code…
visitApplication(this)
visitor.visitTuple(this);visitor.visitApplication(this);
![Page 41: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/41.jpg)
Problems solved
• matching CAL to Ptolemy– single atomic action vs prefire/firen/postfire
– state changing computation vs state-invariant fire
– CalCore scopes vs Java scopes– random access to channels vs
sequential read methods
![Page 42: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/42.jpg)
Further work
– Implement type checking– Describe the transformations on the
AST in XML– Network + actors schedule– Network + actors + schedule actor – Retarget the code generator to other
platforms (Moses ETH)
![Page 43: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/43.jpg)
continuous time
finite-state machine
discrete time
Hierarchical, heterogeneous model
![Page 44: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/44.jpg)
Generic and specific code generator
![Page 45: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich](https://reader035.vdocuments.net/reader035/viewer/2022062515/56649d195503460f949eec4f/html5/thumbnails/45.jpg)
The CAL compiler