RISC-V-Emulation bis an die Grenzen treiben

Pushing the limits of RISC-V emulation

RISC-V-Emulation bis an die Grenzen treiben

In diesem Beitrag untersucht der Autor, wie nah ein RISC-V-Programm auf einer Nicht-RISC-V-Maschine an Bare-Metal-Performance kommen kann. Der Schlüssel ist ein Ahead-of-Time-Recompiler, der generierte Basisblöcke über Tail Calls verbindet und Clangs preserve_none-Aufrufkonvention nutzt, um heißen Gastzustand in Host-Registern zu halten. OpenVM, eine RISC-V-VM von Axiom, erzeugt neben der Ausführung auch einen prägnanten kryptografischen Beweis. Während die Beweiserstellung parallelisiert werden kann, bleibt die Ausführung sequenziell und wird zum Engpass. Der Artikel zeigt, wie von einem einfachen Interpreter über Predecoding, Computed Gotos und Tail-Call-Threading bis hin zu einem AOT-Übersetzer und schließlich zur Generierung von C-Code, der von Clang optimiert wird, die Overheads schrittweise reduziert werden.

Der schnellste Weg, ein Programm auszuführen, besteht darin, ihm aus dem Weg zu gehen und die Hardware es direkt ausführen zu lassen.
  1. oso2k

    Die coolste Interpreter-Technik, die ich je gesehen habe, war eine, die die Anweisungsrümpfe in statischen Funktionen ablegte, deren Körper die "Compiler"-Hauptschleife per memcpy in geradlinigen Code kopierte, der dann aus dem Speicher ausgeführt wurde – ein Poor Man's JIT. Alle Anweisungsfunktionen hatten dieselben Argumente und GCC erzeugte positionsunabhängigen Code mit derselben vorhersehbaren Register-Aufrufkonvention. Zugegeben, verdammt fragil, aber großartige Kompiliergeschwindigkeit bei geringem Laufzeit-Overhead. Damit konnte interpretierter Code mit 1/5 der Geschwindigkeit von kompiliertem Code laufen, verglichen mit 1/10 der Geschwindigkeit bei typischen, hochoptimierten Computed-Goto-Loop-Interpretern. Ich kann keinen Link finden, aber falls sich jemand daran erinnert oder so einen JIT-Interpreter geschrieben hat, bitte posten.

  2. beholdo

    Am Ende ist es keine Emulation, sondern statische Rekompilierung (was wohl cooler ist).

Mehr von diesem Tag

2026-08-06