Presentation is loading. Please wait.

Presentation is loading. Please wait.

5 th Biennial Ptolemy Miniconference Berkeley, CA, May 9, 2003 Java Code Generation Steve Neuendorffer UC Berkeley.

Similar presentations


Presentation on theme: "5 th Biennial Ptolemy Miniconference Berkeley, CA, May 9, 2003 Java Code Generation Steve Neuendorffer UC Berkeley."— Presentation transcript:

1 5 th Biennial Ptolemy Miniconference Berkeley, CA, May 9, 2003 Java Code Generation Steve Neuendorffer UC Berkeley

2 Neuendorffer/UC Berkeley/Ptolemy Miniconference 2 Outline Motivation Code generation architecture Component Specialization –Parameter –Type –Connection –Domain Token Unboxing and Obfuscation

3 Neuendorffer/UC Berkeley/Ptolemy Miniconference 3 Design Pressures Increasing Complexity Market Customization Safety Requirements Design Reuse is Key!

4 Neuendorffer/UC Berkeley/Ptolemy Miniconference 4 Motivation System modeling using high-level components enables rapid prototyping System implementation becomes the bottleneck

5 Neuendorffer/UC Berkeley/Ptolemy Miniconference 5 Motivation Generation of hardware and software architectures for embedded systems RS-232 Localization Computer 802.11b Caltech vehicles

6 Neuendorffer/UC Berkeley/Ptolemy Miniconference 6 Ptolemy Classic Stars Galaxy CGC Stars (+ scheduling, etc.) Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } C code CG-VHDL Stars inside <= a AND b; x <= inside; y <= inside OR (not a); entity foo is port(a, b: in std_logic; x, y: out std_logic); end foo; VHDL Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } inside <= a AND b; x <= inside; y <= inside OR (not a); inside <= a AND b; x <= inside; y <= inside OR (not a);

7 Neuendorffer/UC Berkeley/Ptolemy Miniconference 7 Ptolemy II Java Actors Model (+ scheduling, etc.) Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Fire { x=x+1 send(x) } Java code Lda x add 1 Sta x Lda x add 1 Sta x Lda x add 1 Sta x JHDL Actor Specializer Lda x add 1 Sta x Lda x add 1 Sta x Lda x add 1 Sta x C code

8 Neuendorffer/UC Berkeley/Ptolemy Miniconference 8 Component Specification public interface Executable { public boolean prefire() throws IllegalActionException; public void initialize() throws IllegalActionException; public void fire() throws IllegalActionException; … } Java Code Finite State Machines Functional Expressions Special Purpose Languages Hierarchical Model actor Switch [T] () Integer Select, multi T Input ==> T Output : action Select: [i], Input: [a] at i ==> [a] end end

9 Neuendorffer/UC Berkeley/Ptolemy Miniconference 9 Parameter Specialization ? ? Here the scale factor has not been determined yet, because it depends on the parameter x. Specialize (Specified in Java code)

10 Neuendorffer/UC Berkeley/Ptolemy Miniconference 10 Implicit vs. Explicit information Implicit SpecializationExplicit Specialization ? Specialize Specialize factor = 2

11 Neuendorffer/UC Berkeley/Ptolemy Miniconference 11 Parameter Specialization Implicit Parameter Specialization relies on model analysis to determine parameter values that set and cannot change. Dynamic parameters: Parameters accessible through a user interface. Parameters that can be set in the FSM transitions. Parameters with values depending on unbound variables All other parameters can be specialized using implicit context.

12 Neuendorffer/UC Berkeley/Ptolemy Miniconference 12 Type Specialization ? output > input output > factor Implicit analysis simply uses the standard type inference mechanism. Currently assume that even when parameter values change, types do not.

13 Neuendorffer/UC Berkeley/Ptolemy Miniconference 13 Aggregation Parameter and Type specialization can be performed on individual actors. Domain and Connection specialization occur as part of aggregation. initialize { … } fire { … } Java code

14 Neuendorffer/UC Berkeley/Ptolemy Miniconference 14 Connection Specialization public void fire() { if (input.hasToken(0)) { Token in = input.get(0); Token factorToken = factor.getToken(); Token result = in.multiply(factorToken); output.send(0, result); } Scale.java receiver1receiver2 Connection specialization ties actors directly to the channels they are connected to. Connections are assumed not to change.

15 Neuendorffer/UC Berkeley/Ptolemy Miniconference 15 Connection Specialization public void fire() { if (receiver1.hasToken()) { Token in = receiver1.get(); Token factorToken = factor.getToken(); Token result = in.multiply(factorToken); receiver2.put(result); } receiver1receiver2 Connection specialization ties actors directly to the channels they are connected to. Connections are assumed not to change.

16 Neuendorffer/UC Berkeley/Ptolemy Miniconference 16 Domain Specialization receiver1receiver2 Connection specialization ties actors directly to the channels they are connected to. Domains are assumed not to change. public void fire() { if (receiver1.hasToken()) { Token in = receiver1.get(); Token factorToken = factor.getToken(); Token result = in.multiply(factorToken); receiver2.put(result); }

17 Neuendorffer/UC Berkeley/Ptolemy Miniconference 17 Domain Specialization public void fire() { if (true) { Token in = receiver1._array[index1++]; index1 = index1 %1; Token factorToken = factor.getToken(); Token result = in.multiply(factorToken); receiver2._array[index2++] = result; index2 = index2 % 1; } receiver1receiver2 Connection specialization ties actors directly to the channels they are connected to. Domains are assumed not to change.

18 Neuendorffer/UC Berkeley/Ptolemy Miniconference 18 Token Unboxing After specialization, memory use is a significant performance bottleneck. Token Unboxing removes allocation of token objects by replacing each token with its constituent fields. public void fire() { int in = receiver1._array[index1]; boolean inIsNull = receiver1._arrayIsNull[index1]; index1 = index1++ % 1; int factorToken = factor; boolean factorTokenIsNull = false; int result = in*factorToken; boolean resultIsNull = inIsNull && factorTokenIsNull; receiver2._array[index2++] = result; receiver2._arrayIsNull[index2++] = resultIsNull; index2 = index2++ % 1; }

19 Neuendorffer/UC Berkeley/Ptolemy Miniconference 19 Obfuscation Java.class files contain a large number of strings String literals Class names Method signatures Field signatures Exception messages Obfuscation renames these strings to shorter ones, where possible. Reduces bytecode side.

20 Neuendorffer/UC Berkeley/Ptolemy Miniconference 20 Why does this all work? Ptolemy actor specifications are highly polymorphic and reusable. However, we commonly use them only in monomorphic contexts. –Constant, exactly analyzable types. –Connections, domains don’t change. –Parameter values change only in known patterns.

21 Neuendorffer/UC Berkeley/Ptolemy Miniconference 21 Why does this all work? We’ve eliminated a large amount of synchronization overhead. –Workspace.getReadAccess() –Workspace.doneReading() We’ve eliminated object allocation, which reduces load on the garbage collector. Generated code is entirely self contained. Functionality is important, interfaces are not.

22 Neuendorffer/UC Berkeley/Ptolemy Miniconference 22 Capabilities Applications –Control algorithm for Caltech vehicles. –Rijndael encryption algorithm. –HTVQ Video compression. Supported –Expression actor –FSM actor –Modal models –SDF and Giotto domains Not supported –Record types –Transparent hierarchy

23 Neuendorffer/UC Berkeley/Ptolemy Miniconference 23 How to use Command-line interface >> copernicus model.xml Code is generated in: $ PTII/ptolemy/copernicus/java/cg/model/ Vergil User interface view -> Code Generator Allows easier changing of parameters.

24 Neuendorffer/UC Berkeley/Ptolemy Miniconference 24 Conclusion Java code generation is at the point where it might be useful for speeding up the simulation of some models. Current work: Embedded Java platform Integration with hardware synthesis Guided refinement


Download ppt "5 th Biennial Ptolemy Miniconference Berkeley, CA, May 9, 2003 Java Code Generation Steve Neuendorffer UC Berkeley."

Similar presentations


Ads by Google