Hipe version 0 Kostis Sagonas Uppsala University Structure of this talk



Descargar 11,43 Kb.
Fecha de conversión23.06.2017
Tamaño11,43 Kb.

HiPE version 1.0

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” Johansson
  • Mikael Pettersson
  • Richard Carlsson
  • Kostis 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

Old HiPE Architecture

  • HiPE Compiler
  • JAM Emulator
  • Code area
  • JAM Dissassembler
  • HiPE Loader
  • JAM
  • Bytecode
  • Other Data
  • Native Code
  • Symbolic JAM
  • Icode
  • RTL
  • SPARC

Speedup of HiPE (0.92) over other Erlang implementations

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 Pettersson
    • Richard Carlsson
    • Kostis 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

New HiPE Architecture

  • Erlang Run-Time System
  • HiPE Compiler
  • BEAM Emulator
  • Code area
  • BEAM Dissassembler
  • HiPE Loader
  • BEAM
  • Bytecode
  • Other Data
  • Native Code
  • Symbolic BEAM
  • Icode
  • RTL
  • SPARC
  • X86
  • A HiPE-enabled Erlang/OTP system

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: hipe-bugs@csd.uu.se

HiPE: Invoking the compiler (HiPE hacker)

  • Sends bug fixes and compiler improvements to: hipe@csd.uu.se

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-existent
    • Hint: Use HiPE once your application is debugged!
  • Floating point arithmetic slower than in BEAM
  • Exception information often slightly differs between BEAM and HiPE
  • Fixed size (i.e., non-resizable) constant pool

HiPE version 1.0: Performance Expectations

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:
  • 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 R8
  • 2. Install by typing:
  • ./configure --enable-unified-heap
  • ./make
  • Warnings:
  • 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
  • User-defined parametric datatypes (a la ML)
  • Structured module system for Erlang


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal