+ All Categories
Home > Documents > A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley...

A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley...

Date post: 18-Dec-2015
Category:
Upload: wilfrid-potter
View: 217 times
Download: 0 times
Share this document with a friend
45
A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich
Transcript
Page 1: A code generator for the CAL actor language Lars Wernli Supervisor: Joern Janneck, UC Berkeley Professor: Lothar Thiele, ETH Zuerich.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

The CAL compiler


Recommended