43
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1

Page 2: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

One VM to Rule Them All

Christian Wimmer, Chris Seaton

VM Research Group, Oracle Labs

Page 3: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3

The following is intended to provide some insight into a line of research in

Oracle Labs. It is intended for information purposes only, and may not be

incorporated into any contract. It is not a commitment to deliver any material,

code, or functionality, and should not be relied upon in making purchasing

decisions. The development, release, and timing of any features or functionality

described in connection with any Oracle product or service remains at the sole

discretion of Oracle. Any views expressed in this presentation are my own and

do not necessarily reflect the views of Oracle.

Page 4: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4

One Language to Rule Them All?Let’s ask Google…

Page 5: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5

One Language to Rule Them All?Let’s ask Stack Overflow…

Page 6: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6

“Write Your Own Language”

Prototype a new language

Parser and language work to build

syntax tree (AST), AST Interpreter

Write a “real” VM

In C/C++, still using AST interpreter,

spend a lot of time implementing

runtime system, GC, …

People start using it

Define a bytecode format and

write bytecode interpreter

People complain about performance

Write a JIT compiler

Improve the garbage collector

Performance is still bad

Prototype a new language in Java

Parser and language work to build

syntax tree (AST)

Execute using AST interpreter

People start using it

And it is already fast

Current situation How it should be

Page 7: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7

@Specialization(rewriteOn=ArithmeticException.class)

int add(int l, int r) {return Math.addExact(l, r);

}

@Specializationdouble add(double l, double r) {

return l + r;}

@Specialization(guards = "isString")String doString(Object l, Object r) {

return l.toString() + r.toString();}

Truffle Requirements

L1: decl rax

jz L2

movl rcx, rdx[16+4*rax]

cvtsi2sd xmm1, rcx

addsd xmm0, xmm1

jmp L1

L2:

+

Generality

Ruby, JavaScript,

Python, R, J,

Java, Groovy,

Clojure, Scala ...

function f(a, n) {

var x = 0;

while (n-- > 0) {

x = x + a[n];

}

return x;

}

Simplicity

+

Performance

Page 8: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8

System Structure

Low-footprint VM, also

suitable for embedding

Common API between

language implementation

and optimization system

Language agnostic

dynamic compiler

Your language here!

Integrate with Java

applicationsSubstrate VM

TruffleGraal

Ruby

JavaScript Python

R

Graal VM

Page 9: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9

AST Interpreter

Uninitialized Nodes

Compiled Code

Automatic Partial

Evaluation

Truffle Approach

AST Rewriting

for Type Feedback

AST Interpreter

Rewritten Nodes

Syntax tree nodes are “stable”

Aggressive constant folding, method

inlining, escape analysis

Deoptimize compiled code on tree rewrite

Eliminate dynamic type checks

Eliminate boxing of primitive values

AST Inlining

Page 10: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10

More Details on TruffleAccepted for Onward! 2013, October 26-31 2013, Indianapolis, IN

Page 11: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11

Ruby Prototype: High Performance

Fastest Ruby

implementation …

… for the few

benchmarks that

we looked at

Substrate VM

TruffleGraal

Ruby

Graal VM

Page 12: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12

Ruby Prototype: Low Footprint

Startup time

(“Hello World”)

comparable to MRI

Substrate VM

TruffleGraal

Ruby

Graal VM

Page 13: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13

Ruby Prototype: Completeness

RubySpec

A library of executable assertions that

covers the language, core library and

standard library

This is the defacto Ruby spec

Gives us a quantifiable result for how much

of Ruby we implement correctly

Over 45% of

RubySpec

Page 14: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14

Completeness

Page 15: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15

Completeness: Informally

Charles Nutter: ‘So You Want to Optimize Ruby’ http://blog.headius.com/2012/10/so-you-want-to-optimize-ruby.html

Language Feature Implemented Notes

Fixnum to Bignum promotion ✓

Support for floating point ✓

Closures ✓

Bindings and eval ✓

callcc and Continuation ✓ Very limited support, the same as JRuby

Fibers ✓ Slightly limited support, the same as JRuby

Frame local variables ✓

C extensions

Ruby 1.9 encoding ✓

Garbage collection ✓

Concurrency and parallelism ✓ We currently use a GIL

Tracing and debugging ✓

ObjectSpace ✓

Method invalidation ✓

Constant invalidation ✓

Ruby on Rails

Page 16: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16

Completeness: More formally via RubySpecRunning language tests

0.00%

10.00%

20.00%

30.00%

40.00%

50.00%

60.00%

70.00%

80.00%

90.00%

100.00%

Topaz RubyTruffle JRuby

Page 17: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17

Low Footprint

Page 18: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18

Ahead-of-Time

Compilation

Static Analysis

Substrate VM Execution Model

Substrate VM

Java Application

JDK

Reachable methods,

fields, and classes

Initial Heap

Machine Code

OS

All Java classes from

application, JDK,

and Substrate VM

Application running

without compilation

or class loading

Page 19: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19

Startup PerformanceRunning "Hello World"

Execution time:

Memory footprint:

time -f "%e"

time -f "%M"

13

35

3

68

8

14

0

200

400

600

800

MRI JRuby Truffle onJVM

Truffle onSVM

[msec] Execution Time

5

35

53

9

0

10

20

30

40

50

60

MRI JRuby Truffle onJVM

Truffle onSVM

[MByte] Memory Footprint

Page 20: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20

High Performance

Page 21: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21

Why is Ruby Slow?

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

Page 22: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22

Why is Ruby Slow?

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

Page 23: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23

Improving Performance Using Truffle

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

+

- /

b sqrt *

... 2 a

Page 24: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24

Improving Performance Using Truffle

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

+

- /

b sqrt *

... 2 a

Page 25: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25

Improving Performance Using Truffle

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

+

- /

b sqrt *

... 2 a

Page 26: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26

Improving Performance Using Truffle

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

+

- /

b sqrt *

... 2 a

Page 27: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27

Improving Performance Using Truffle

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

+

- /

b sqrt *

... 2 a

Page 28: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28

Improving Performance Using Truffle

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

+

- /

bsqrt *

... 2 a

+

- /

b *

... 2 a

sqrt

Page 29: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29

Improving Performance Using Truffle

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that the negate method in Float has not changed

calculate negation

execute b

check that the power method in Float has not changed

calculate power

execute a

check that the multiply method in Float has not changed

calculate multiplication

execute c

check that the multiply method in Float has not changed

calculate multiplication

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

execute a

check that the multiply method in Float has not changed

calculate multiplication

check that the division method in Float has not changed

calculate division

execute b

check that b is a Float

check that the negate method in Float has not changed

calculate negation

check the result of that is a Float

execute b

check that b is a Float

check that the power method in Float has not changed

calculate power

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

execute c

check that c is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

check the result of that is a Float

execute a

check that a is a Float

check that the multiply method in Float has not changed

calculate multiplication

check the result of that is a Float

check that the division method in Float has not changed

calculate division

Page 30: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30

Improving Performance Using Graal

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that the negate method in Float has not changed

calculate negation

execute b

check that the power method in Float has not changed

calculate power

execute a

check that the multiply method in Float has not changed

calculate multiplication

execute c

check that the multiply method in Float has not changed

calculate multiplication

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

execute a

check that the multiply method in Float has not changed

calculate multiplication

check that the division method in Float has not changed

calculate division

Page 31: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31

Improving Performance Using Graal

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that the negate method in Float has not changed

calculate negation

execute b

check that the power method in Float has not changed

calculate power

execute a

check that the multiply method in Float has not changed

calculate multiplication

execute c

check that the multiply method in Float has not changed

calculate multiplication

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

execute a

check that the multiply method in Float has not changed

calculate multiplication

check that the division method in Float has not changed

calculate division

class Float

⚑ modified?

module Math

⚑ modified?

Page 32: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32

Improving Performance Using Graal

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that the negate method in Float has not changed

calculate negation

execute b

check that the power method in Float has not changed

calculate power

execute a

check that the multiply method in Float has not changed

calculate multiplication

execute c

check that the multiply method in Float has not changed

calculate multiplication

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

execute a

check that the multiply method in Float has not changed

calculate multiplication

check that the division method in Float has not changed

calculate division

class Float

⚑ modified?

module Math

⚑ modified?

Page 33: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33

Improving Performance Using Graal

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that the negate method in Float has not changed

calculate negation

execute b

check that the power method in Float has not changed

calculate power

execute a

check that the multiply method in Float has not changed

calculate multiplication

execute c

check that the multiply method in Float has not changed

calculate multiplication

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

execute a

check that the multiply method in Float has not changed

calculate multiplication

check that the division method in Float has not changed

calculate division

class Float

⚑ modified?

module Math

⚑ modified?

java object InstalledCode

.invalidate()

Page 34: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34

Improving Performance Using Graal

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

check that the negate method in Float has not changed

calculate negation

execute b

check that the power method in Float has not changed

calculate power

execute a

check that the multiply method in Float has not changed

calculate multiplication

execute c

check that the multiply method in Float has not changed

calculate multiplication

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

execute a

check that the multiply method in Float has not changed

calculate multiplication

check that the division method in Float has not changed

calculate division

class Float

⚑ modified?

module Math

⚑ modified?

java object InstalledCode

.invalidate()

Page 35: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35

Improving Performance Using Graal

unmodified = new Assumption();

unmodified.check();

unmodified.invalidate();

Page 36: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36

Improving Performance Using Graal

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

calculate negation

execute b

calculate power

execute a

calculate multiplication

execute c

calculate multiplication

calculate sqrt

execute a

calculate multiplication

calculate division

execute b

check that the negate method in Float has not changed

calculate negation

execute b

check that the power method in Float has not changed

calculate power

execute a

check that the multiply method in Float has not changed

calculate multiplication

execute c

check that the multiply method in Float has not changed

calculate multiplication

check that Math has not changed

check that the sqrt method in Math has not changed

calculate sqrt

execute a

check that the multiply method in Float has not changed

calculate multiplication

check that the division method in Float has not changed

calculate division

Page 37: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37

Improving Performance

-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a

execute b

calculate negation

execute b

calculate power

execute a

calculate multiplication

execute c

calculate multiplication

calculate sqrt

execute a

calculate multiplication

calculate division

Page 38: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38

Peak Performance

Page 39: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39

Peak Performance

Page 40: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40

Simplicity

One intern working for five months on the Ruby implementation

New to Truffle, Graal and Ruby

Written using Eclipse

Debugged as a normal Java program using the server compiler

Run using Graal for testing and performance numbers

No mention in the implementation of bytecode, classloaders, assembly,

system calls, OSR

One very minor use of Unsafe, one very minor use of reflection

Page 41: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41

Oracle Labs

Laurent Daynès

Michael Haupt

Peter Kessler

Christos Kotselidis

David Leibs

Roland Schatz

Chris Seaton

Doug Simon

Michael Van De Vanter

Christian Wimmer

Christian Wirth

Mario Wolczko

Thomas Würthinger

Laura Hill (Manager)

JKU Linz

Gilles Duboscq

Matthias Grimmer

Christian Häubl

Josef Haider

Christian Humer

Christian Huber

Manuel Rigger

Lukas Stadler

Bernhard Urban

Andreas Wöß

Prof. Hanspeter Mössenböck

Acknowledgments

Oracle Labs Interns

Danilo Ansaloni

Daniele Bonetta

Shams Imam

Stephen Kell

Helena Kotthaus

Gregor Richards

Rifat Shariyar

Codrut Stancu

Wei Zhang

Purdue University

Tomas Kalibera

Floreal Morandat

Petr Maj

Prof. Jan Vitek

University of California, Irvine

University of Dortmund

Page 42: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42

Page 43: 1 Copyright © 2013, Oracle and/or its affiliates. All ...€¦ · Prototype a new language in Java Parser and language work to build syntax tree (AST) Execute using AST interpreter

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43