The Essence of Meta-Tracing JIT Compilers

Scriptie/masterproef: Master's Thesis

Uittreksel

JIT compilatie is een successvolle manier om dynamische programmeertalen uit te voeren, aangezien het de negatieve impact op runtime performance, die eigen is aan deze talen, verzacht. Tracing JIT compilers zijn een alternatief voor de vaker gebruikte method-based JIT compilers. In tracing JIT compilatie identificeert de VM vaak uitgevoerde, ’hot’, control-flow paden at runtime. Eens deze gevonden zijn, registreert de VM alle instructies die deel uitmaken van dit pad in een trace totdat executie terugspringt naar de eerste executie van dit pad. De trace wordt dan gecompileerd en volgende iteraties van het pad voeren de geoptimiseerde trace uit in plaats van de originele code.
Ondanks het voordeel die tracing JIT compilers bieden, wordt de extra com- plexiteit die nodig is om deze compilers te ontwikkelen vaak beschouwd als een zware hindernis. De techniek van meta-tracing biedt een oplossing voor dit dilemma. Language interpreters worden ontwikkeld bovenop een gemeen- schappelijke tracing JIT compiler. Door deze compiler de executie van de inter- preter te laten tracen, terwijl die een user-programma uitvoert, kunnen language implementers acceptabele performantie niveaus bereiken met een minimum aan overlast.
Tot op heden werd er weining aandacht besteed aan de formele basis van (meta-)tracing compilatie. In deze thesis ontwikkelen we een meta-tracing compiler vanaf nul en specifie ̈ren we een set formele semantieken die de ex- ecutie van deze compiler beschrijven.
We breiden ons framework uit met een aantal state-of-the-art features die vaak deel uitmaken van andere (meta-)tracing compilers, zoals loop hotness detection, waarbij een loop enkel getraced wordt als een heuristiek bepaald heeft dat deze loop voldoende ’hot’ is, en guard tracing, waarbij we de negatieve performance hit die wordt opgelopen bij een trace side-exit proberen te verla- gen. We onderzoeken ook het concept van trace merging. Door traces samen te voegen wanneer hun onderliggende control-flow samenvloeit, kunnen we ver- mijden om alle mogelijke paden doorheen de control-flow van een programma te moeten tracen. Dit verbetert de space-efficiency en vermijdt een deel van de runtime overhead die eigen is aan tracing. Trace merging werd nog niet vaak gebruikt in huidige tracing compilers.
Datum Prijs29 jun 2015
TaalEnglish
Toekennende instantie
  • Vrije Universiteit Brussel
BegeleiderJens Nicolay (Advisor), Stefan Marr (Advisor), Joeri De Koster (Advisor), Coen De Roover (Promotor) & Theo D'Hondt (Promotor)

Citeer dit

'