47
1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

Embed Size (px)

Citation preview

Page 1: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

1

Ralf Scheidhauer

PS Lab, DFKIMay 18, 1999

Design, Implementierung und Evaluierung einer virtuellen Maschine

für Oz

Page 2: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

2

Oz

Developed at DFKI since 1991

DFKI Oz 1.0 (1995), DFKI Oz 2.0 (1998)

Mozart 1.0 (1999)

180 000 lines of C++

140 000 lines of Oz

65 000 lines documentation

Since 1996 collaboration with SICS and UCL

Application strength system:

multi agents (DFKI, SICS), computer-bus scheduling (Daimler),

gate scheduling (Singapore), NL (SFB), comp. biology (LMU),...

Page 3: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

3

Related Work

LP, CLP [Warren 77], [Jaffer Lassez 86]

Concurrency [Saraswat 93]

AKL [Janson Haridi 90, Janson 94]

FP [Appel 92]

Page 4: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

4

Overview

Language L

Virtual machine

Implementation

Evaluation

Page 5: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

5

The Language L

Core language of Oz

Presentation as extension of a sub language of SML

Logic variables

Threads

Synchronization

Dynamic type system

Extensions via predefined functions

lvar() logic variable

unify(x,y) unification

spawn(f) thread creation

Page 6: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

6

Graph Model

Integers

Tuples

Functions

Cells (references)

Constructors

TUPLE

INT/3 TUPLE CELL

INT/5CON

Strict evaluation of expressions

e0 e1 ...

Page 7: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

7

Why Logic Variables?

Programming techniques: backpatching, difference lists, ...

Cyclic data structures

Tail recursive definition of many functions (append, map, ...)

Synchronization of threads

Search

Page 8: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

8

Logic Variables: Creation and Representation

let val x = lvar()

in (4,x,23)

end

TUPLE

INT/4 VAR INT/23

Page 9: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

9

Logic Variables: Unification

TUPLE

unify( , )

TUPLE

INT/3 VAR INT/2 INT/3 INT/5 VAR

TUPLE TUPLE

INT/3 INT/2 INT/3 INT/5

Page 10: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

10

Threads

Creation

spawn(f)

e1

thread1

en

threadn

. . .

f()

threadn+1

Synchronization: logic variables (x+y)

Fairness

store

Page 11: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

11

Virtual Machine

Page 12: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

12

Model

scheduler

threads

heap

code

...move Y3 X0move G5 X1apply G2 2return...

stac

k X-r

egs

Page 13: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

13

V-Addressing

Address toplevel variables via V-registers

Loader builds data on the heap

code contains direct references into heap

Example

fun f(l,u) = map(fn(x)=>h(x)+g(x)+u, l)

h and g in V-register reduced memory consumption

Page 14: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

14

Dynamic Code Specialization

fastApply V3

apply V3 2

specApply V3 2

Page 15: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

15

Unification in the Machine Model

TUPLE

unify( , )

TUPLE

INT/3 VAR INT/2 INT/3 INT/5 VAR

TUPLE TUPLE

INT/3 REF INT/2 INT/3 INT/5 REF

Page 16: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

16

Synchronization = Suspension + Wakeup

thread

(x+y)

.

.

.

VARx:

VARy:

suspension

. . .

Page 17: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

17

Synchronization = Suspension + Wakeup

Wakeup: unify(x,23)

threadREFx:

VARy:

(x+y)

.

.

.

. . .

to the scheduler

INT/23

Page 18: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

18

Implementation

Page 19: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

19

Emulator vs. Native Code

virtual machinevirtual machine

native codenative codeemulatoremulator

implementation

portable

flexible

fast (?)

Page 20: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

20

Threads

X registers: once per machine, not per thread

Save live X registers upon preemption/suspension:

pessimistic guess per function

Exact determination during GC by code interpretation

Page 21: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

21

Representation of the Graph: Naiv

type

register heap

...

...

INT23

Page 22: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

22

Representation of the Graph: Optimized

register

23 INT

PTRtype...

...

...

heap

Page 23: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

23

Representation of the Graph: Logic Variables

register heap

23 INT

PTRVAR ...

PTRREF ...

Page 24: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

24

REFREF

WAM

Logic Variables: Optimized

register heap

23 INT

REF

REF

...

VAR

PTRtype...

...

...

register

Page 25: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

25

Moving More Tags

register heap

23 INT

REF

...

PTRtype

...

TPL

...

...

...

Page 26: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

26

Evaluation

Page 27: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

27

Comparison with Emulators

Mozart is one of the fastest emulators

Competitive with OCAML and Java

Significantly faster than Moscow ML

Twice as fast as Sicstus Prolog and Erlang

Page 28: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

28

Comparison with Native Code Systems

Few memory accesses (i.e. arithmetics)

Mozart is easily one order of magnitude slower

Memory intensive (symbolic computation)

Difference only approx. factor 2-3

Mozart in single cases faster than native ML or C++

Page 29: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

29

Threads

Threads in Mozart are very light weight

Leading position both for creation and communication

Up to nearly 2 orders of magnitude faster than Java (creation)

Page 30: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

30

Summary

Extended sub language of SML by logic variables and threads

Machine model

V - registers

Dynamic code specialization

Synchronization

Implementation

Efficient implementation of threads

Tagging scheme

Evaluation

Mozart is one of the fastest emulators

Compares well with native code systems on its target applications

Mozart has very light weight threads

Page 31: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

31

Backup Slides for the Discussion

Page 32: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

32

Logic Variables vs. Functions

Runtime

fibonacci takeushi

speedup 1.18 1.45

Memory (large scale applications)

Use approx. 18 % of heap memory

Approx. twice as much as objects

Approx. as much as records

Page 33: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

33

Memory Profile

6%8%

20%

24%

18%

24%functionsobjectsrecordslistsvariablesother

Page 34: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

34

Mandelbrot (Floats)

0 1 2 3

C++

ACL

SML

OCAML(N)

JDK

OCAML(E)

Sicstus

Mozart 1.00

2.65

1/1.11

1/1.58

1/8.77

1/11.23

1.37

1/39.24

Page 35: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

35

Quicksort with Lists

0 2 4 6

C++

ACL

SML

OCAML(N)

JDK

OCAML(E)

Sicstus

Mozart 1.00

2.43

1.57

5.19

1/2.59

1/3.69

1/2.99

1/3.46

Page 36: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

36

Quicksort with Arrays

0 0.5 1 1.5

C++

ACL

SML

OCAML(N)

JDK

OCAML(E)

Mozart 1.00

1.25

1/1.48

1/4.01

1/7.92

1/1.52

1/20.86

Page 37: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

37

Naiv Reverse

0 5 10 15

C++

ACL

SML

OCAML(N)

JDK

OCAML(E)

Sicstus

Mozart (F)

Mozart (LV) 1.00

1.81

1.59

11.82

1.04

1/1.60

2.05

1.70

1.51

Page 38: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

38

Threads: Creation

1.16

49.86

2.61

1.94

1.00

0 20 40 60

SML

JDK

OCAML(E)

Erlang

Mozart

Page 39: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

39

Threads: fib(20)

0 200 400 600 800

SML

JDK

OCAML(E)

Erlang

Mozart 1.0

1.09

4.73

1/1.14

708.06

Page 40: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

40

Tagging Scheme of Mozart

4 bit tag, but only 2 bit loss for address space (=1GB):

align structures on word boundaries

Lists, tuples: no need to unmask before type test

REF - tag

no unmask before test necessary

no unmask before deref

Page 41: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

41

Threads

X

PCLG

task

thread

move Y3 X0move G5 X1apply G2 2...

Page 42: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

42

Emulators: Optimization Techniques

Threaded code

Instruction collapsing

Register access

Specialization

Example

move Y5 X3

move Y6 X1 34 11 (SPARC)

Page 43: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

43

Address Modes (Registers)

name liveness notation usage

Xthread Xi temp. values, parameters

local fct-body Li local variables

global function Gi free variables

virtual program Vi constants

Page 44: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

44

Threads

Fairness: status-register

check on every function call (and return)

GC IOPRE ....

Page 45: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

45

L

e ::= x variable

| n integer

| (e1,...,en) tuple

| fn (x1,...,xn) => e function

| e0(e1,...,en) application

| let val x = e in e end variable declaration

| let con x in e end constructor declaration

| case e of p1 => e1 | ... | pn=>en pattern matching

lvar : () -> logic variable

unify : -> () unification

spawn : (() -> ) -> () thread creation

Operators

Page 46: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

46

Tagged Xi = X[*(PC+1)]; 2 0 (2)DEREF(Xi); 2 0if (isInt(getTag(Xi))) { 1+2 0 Tagged Xk = X[*(PC+2)]; 2 2 DEREF(Xk); 2 0 if (isInt(getTag(Xk))) { 1+2 0 int aux = intValue(Xi)+intValue(Xk); 1+1+1 2 XPC(3) = oz_int(aux); ovflw+shifttag+store 3+2+2 0 (2) DISPATCH(4); 3 3 } ---------------} 277(11) no derefs 23 no type tests 17 overflow 6

add Xi Xk Xn

Page 47: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz

47

Java: JIT vs. Emulator

speedup

quicksort (array) 18.8

fib (int) 14.2

fib (float) 4.9

queens 6.1

nrev 2.0

quicksort (list) 2.3

fib (thread) 1.1

mandelbrot 5.4

deriv (virtual) 1.9