Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz
description
Transcript of Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz
![Page 1: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/1.jpg)
1
Ralf Scheidhauer
PS Lab, DFKIMay 18, 1999
Design, Implementierung und Evaluierung einer virtuellen Maschine
für Oz
![Page 2: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/2.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/3.jpg)
3
Related Work
LP, CLP [Warren 77], [Jaffer Lassez 86]
Concurrency [Saraswat 93]
AKL [Janson Haridi 90, Janson 94]
FP [Appel 92]
![Page 4: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/4.jpg)
4
Overview
Language L
Virtual machine
Implementation
Evaluation
![Page 5: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/5.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/6.jpg)
6
Graph Model
Integers
Tuples
Functions
Cells (references)
Constructors
TUPLE
INT/3 TUPLE CELL
INT/5CON
Strict evaluation of expressions
e0 e1 ...
![Page 7: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/7.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/8.jpg)
8
Logic Variables: Creation and Representation
let val x = lvar()
in (4,x,23)
end
TUPLE
INT/4 VAR INT/23
![Page 9: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/9.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/10.jpg)
10
Threads
Creation
spawn(f)
e1
thread1
en
threadn
. . .
f()
threadn+1
Synchronization: logic variables (x+y)
Fairness
store
![Page 11: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/11.jpg)
11
Virtual Machine
![Page 12: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/12.jpg)
12
Model
scheduler
threads
heap
code
...move Y3 X0move G5 X1apply G2 2return...
stac
k X-r
egs
![Page 13: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/13.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/14.jpg)
14
Dynamic Code Specialization
fastApply V3
apply V3 2
specApply V3 2
![Page 15: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/15.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/16.jpg)
16
Synchronization = Suspension + Wakeup
thread
(x+y)
.
.
.
VARx:
VARy:
suspension
. . .
![Page 17: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/17.jpg)
17
Synchronization = Suspension + Wakeup
Wakeup: unify(x,23)
threadREFx:
VARy:
(x+y)
.
.
.
. . .
to the scheduler
INT/23
![Page 18: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/18.jpg)
18
Implementation
![Page 19: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/19.jpg)
19
Emulator vs. Native Code
virtual machinevirtual machine
native codenative codeemulatoremulator
implementation
portable
flexible
fast (?)
![Page 20: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/20.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/21.jpg)
21
Representation of the Graph: Naiv
type
register heap
...
...
INT23
![Page 22: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/22.jpg)
22
Representation of the Graph: Optimized
register
23 INT
PTRtype...
...
...
heap
![Page 23: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/23.jpg)
23
Representation of the Graph: Logic Variables
register heap
23 INT
PTRVAR ...
PTRREF ...
![Page 24: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/24.jpg)
24
REFREF
WAM
Logic Variables: Optimized
register heap
23 INT
REF
REF
...
VAR
PTRtype...
...
...
register
![Page 25: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/25.jpg)
25
Moving More Tags
register heap
23 INT
REF
...
PTRtype
...
TPL
...
...
...
![Page 26: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/26.jpg)
26
Evaluation
![Page 27: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/27.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/28.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/29.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/30.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/31.jpg)
31
Backup Slides for the Discussion
![Page 32: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/32.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/33.jpg)
33
Memory Profile
6%8%
20%
24%
18%
24%functionsobjectsrecordslistsvariablesother
![Page 34: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/34.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/35.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/36.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/37.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/38.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/39.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/40.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/41.jpg)
41
Threads
X
PCLG
task
thread
move Y3 X0move G5 X1apply G2 2...
![Page 42: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/42.jpg)
42
Emulators: Optimization Techniques
Threaded code
Instruction collapsing
Register access
Specialization
Example
move Y5 X3
move Y6 X1 34 11 (SPARC)
![Page 43: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/43.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/44.jpg)
44
Threads
Fairness: status-register
check on every function call (and return)
GC IOPRE ....
![Page 45: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/45.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/46.jpg)
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: Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader031.fdocuments.net/reader031/viewer/2022033105/56815876550346895dc5d55a/html5/thumbnails/47.jpg)
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