2010-10-29 11 views
7

Ich habe mich gefragt, ob jemand Erfahrungen mit dem llvm/tools - lli Interpreter/JIT-Compiler gemacht hat (vgl. http://llvm.org/docs/GettingStarted.html#tools). Ich bin an allen Informationen interessiert, die Sie bereitstellen können (Geschwindigkeit, Komplexität, Implementierungen usw.).llvm/tools: lli REPL im Vergleich zu LuaJIT

Danke.

UPDATE:

Okay, wie wäre Bitcode Ausführung luajit VM Ausführung verglichen werden, dass LLI fungiert als Dolmetscher angenommen? Wie sieht es aus, wenn lli als Jit-Compiler fungiert (gleicher Vergleich)?

HINWEIS: ich nur gefragt, ob jemand Erfahrung hat/ist bereit, einige Zeit übrig zu teilen.

+1

Sie werden eine spezifischere Frage als diese fragen. – jer

+0

Entschuldigung. Ich habe die Frage aktualisiert. Danke für das Aufzeigen. – are

+0

@Neopallium, können Sie diese Frage beantworten? (Er ist der Autor von http://code.google.com/p/llvm-lua/) – osgx

Antwort

5

luajit ein Tracing JIT ist, was bedeutet, kann es sich besser Suite, die durch die Ausführungsumgebung übergebenen Daten neu optimiert, jedoch ist LLVM eine statische JIT, und somit wird die einmalige Best-Case-Maschine nur erzeugen Code für die entsprechende Quelle, die es führt, kann es die Leistung in engen Schleifen oder schlecht Zweig misspredictions verlieren.

Die tatsächliche LuaJIT VM ist auch hoch optimiert, Threaded, Maschine spezifische Montage, wo LLVM C++ für Portabilität (und andere Gründe) verwendet, so dass dies offensichtlich LuaJIT einen großen Vorteil bietet. LLVM hat auch einen wesentlich höheren Aufwand als luajit, rein, weil luajit entworfen wurde, viel weniger leistungsfähige Systeme (wie die von ARM-CPUs angetrieben) zu arbeiten.

Der LuaJIT-Bytecode wurde auch speziell für LuaJIT entwickelt, wo LLVMs Bitcode wesentlich generischer ist und dadurch LuaJITs schneller ausgeführt werden. Luajit Bytecode ist auch gut für die Codierung Optimierungshinweise entworfen usw. zur Verwendung durch den JIT und der Tracer.

ignorieren die Tatsache, dass dies zwei verschiedene Arten von JITs sind, der gesamte Vergleich läuft auf LLVM konzentriert sich auf eine generische JIT/Compiler-Backend ist LuaJIT konzentriert sich auf die Ausführung von Lua so schnell wie möglich auf die bestmögliche Weise, es gewinnt dadurch, dass es nicht durch die Allgemeinheit eingeschränkt wird.