Upload
jasmin-harris
View
222
Download
1
Tags:
Embed Size (px)
Citation preview
HiPEHiPEversion 1.0version 1.0
Kostis SagonasUppsala University
Structure of this talk
1. Recent past
2. Present
3. Near future
Part 1: Recent Past
Historical introduction
During the last few years, the following people:
Erik “Happi” JohanssonMikael PetterssonRichard CarlssonKostis Sagonas
have been having fun developing and maintaining the HiPE system...
HiPE: High Performance Erlang
A “just-in-time” native code compiler for Erlang
– Allows flexible, user-controlled compilation of Erlang programs to native machine code
– Fine-grained: Compilation unit is a single function
• HiPE 0.92 released as open-source in March 2000 (see also www.csd.uu.se/projects/hipe)– Released version was JAM-based (Erlang R4)– Available only for SPARC machines
HiPE: Technical Details
• Both virtual machine code and native code can happily co-exist in the runtime system
• HiPE optimizes calls to functions which execute in the same mode
• Preserves tail-calls• The generated native code is quite efficient
– HiPE significantly outperforms all other Erlang implementations
– has similar performance to e.g. Concurrent SML/NJ
Erlang Run-Time System HiPE Compiler
JAMEmulator
Code area
JAMDissassembler
HiPELoader
JAM
Bytecode
OtherData
NativeCode
SymbolicJAM
Icode
RTL
SPARC
The HiPE system
Old HiPE Architecture
Speedup of HiPE (0.92) over other Erlang implementations
0
5
10
15
20
25
fib huff length nrev qsort smith tak decode
Sp
ee
du
p o
ve
r J
AM
HiPE
Etos
JAM
BEAM
Success of HiPE: Let’s take a quick poll...
Who has used HiPE ?
My educated guess: A few…
Who is using HiPE instead of using Erlang/OTP ?
Most probable answer: None!
Part 2: Present
HiPE version 1.0: The current HiPE team
At Uppsala University:Erik “Happi” Johansson
Mikael PetterssonRichard CarlssonKostis Sagonas
+Jesper Wilhelmsson
Recent addition from the Erlang/OTP team:Bjorn Gustavsson
HiPE version 1.0: Main Features of Interest
• HiPE is fully and tightly integrated within Open Source Erlang/OTP Release 8
• Handles the full Erlang language
• Back-ends for:– SPARC – x86-based machines running Linux or Solaris
• Usually very reasonable compilation times
• Acceptable sizes of object code
Erlang Run-Time System HiPE Compiler
BEAMEmulator
Code area
BEAMDissassembler
HiPELoader
BEAM
Bytecode
OtherData
NativeCode
SymbolicBEAM
Icode
RTL
SPARC X86
A HiPE-enabled Erlang/OTP system
New HiPE Architecture
HiPE version 1.0: Installation Guide
1. Get Open Source Erlang/OTP R8
2. If on SPARC or x86, instead of typing: ./configure ./make type: ./configure --enable-hipe ./make
HiPE: Invoking the compiler (novice user)
• Instead of typing: 1> c(Module, Options). types: 1> c(Module, [native|Options]).
• Alternatively, instead of typing: erlc … File types: erlc +native … File
HiPE: Invoking the compiler (seasoned user)
• Instead of typing: 1> c(Module, Options). types: 1> c(Module, [native,{hipe,
[’O3’,...]}|Options]).
• Learns about the full set of HiPE compiler options by typing:
1> hipe:help().
HiPE: Invoking the compiler (expert user)
• Selectively and dynamically compiles individual Erlang functions using:
1> c(M). … 42> hipe:c({M,F,A},
HiPE_Opts).
• Reports bugs to: [email protected]
HiPE: Invoking the compiler (HiPE hacker)
Sends bug fixes and compiler improvements to: [email protected]
HiPE version 1.0: Currently known limitations
• Native code will not be unloaded once loaded into the system (slight memory leak)
• Tracing and debugging support is non-existentHint: Use HiPE once your application is debugged!
• Floating point arithmetic slower than in BEAM• Exception information often slightly differs between
BEAM and HiPE • in particular, no tracelist is provided
• Fixed size (i.e., non-resizable) constant pool
HiPE version 1.0: Performance Expectations
0
2
4
6
8BEAM
HiPE/SPARC
HiPE/x86
HiPE version 1.0: Useful Hints
To get the most out of HiPE:
• Compile all time-critical parts of your Erlang application into native code– Separate hot from cold code
(perhaps by placing them into different modules)
• Avoid easily avoidable mode-switches
Part 3: Near Future
HiPE: Current Work
• Optimization of inter-process communication and efficient memory management for concurrent processes
• Formal specification of the Core Erlang language and its full integration within HiPE and Erlang/OTP
• New inliner for the BEAM compiler
• Experimental extensions of the Erlang language
Alternative Memory Architectures for Erlang
• Erlang/OTP has a process-centric view of memory management:
each process allocates each own memory area
Process 1
heap
stack
Process 2
heap
stack
Process n
heap
stack
...
...Global
ETS
Table
Interprocess communication is quite expensive
Alternative Memory Architectures for Erlang
• We (mainly Jesper Wilhelmsson) have designed and implemented an Erlang/OTP system where:– the heap is shared between all processes– but each process allocates its own stack
Process 1
stack
Process 2
stack
Process n
stack... Global
ETS
Table
Interprocess communication does not involve copying of messages
Global Heap
Unified Heap Architecture: Installation Guide
1. Get Erlang/OTP R82. Install by typing: ./configure --enable-unified-heap ./makeWarnings:
– Highly experimental at this point!– Does not work with HiPE
Request:Send us your favourite concurrent Erlang
application
Core Erlang:Formal Specification and Use in OSE
• A small and relatively clean subset of Erlang– Syntactic sugar is removed– Resembles other “core” FP languages
• An appropriate medium to:– base the compiler’s front-end (already part of R8)– apply high-level transformations such as:
• inlining (currently under development)• deforestation (prototype; results so far inconclusive)
– base work of static analysis or verification
A formal definition of Core Erlang is currently available as a tech report (Richard Carlsson et al)
Core Erlang Inliner: User’s Manual
• Instead of typing: 1> c(Module, Options). type: 1> c(Module, [inline|Options]).
Extensions of the Erlang language
• Parameterized Erlang modules– Design laid out; issue is efficient
implementation– Current work by Richard Carlsson & Mikael
Pettersson
• User-defined parametric datatypes (a la ML)
• Structured module system for Erlang