![Page 1: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/11.jpg)
11
Virtual Machine
![Page 12: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/18.jpg)
18
Implementation
![Page 19: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/26.jpg)
26
Evaluation
![Page 27: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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: 1 Ralf Scheidhauer PS Lab, DFKI May 18, 1999 Design, Implementierung und Evaluierung einer virtuellen Maschine für Oz](https://reader035.vdocuments.us/reader035/viewer/2022062516/56649e235503460f94b11887/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