JIT-Compiler für Mathematik

8

Ich suche einen JIT-Compiler oder eine kleine Compiler-Bibliothek, die in mein Programm eingebettet werden kann. Ich indent, um es zu verwenden, um dynamisch generierten Code zu kompilieren, der komplexe Zahlenarithmetik durchführt. Der generierte Code hat eine sehr einfache Struktur: keine Schleifen, keine Bedingungen, aber sie können ziemlich lang sein (ein paar MB, wenn sie von GCC kompiliert werden). Die Leistung des resultierenden Maschinencodes ist wichtig, während mir die Geschwindigkeit der Kompilierung nicht wirklich wichtig ist. Welcher JIT-Compiler ist für meinen Zweck am besten? Danke!

Detaillierte Anforderungen

  • Unterstützung komplexer Arithmetik komplexer Zahlen mit doppelter Genauigkeit
  • Unterstützung der grundlegenden Optimierung
  • Unterstützt viele CPUs (mindestens x86 und x86-64)
  • Verwenden Sie SSE auf unterstützten CPUs
  • Support-Stack oder ein großer Satz von Registern für lokale Variablen
  • ANSI-C- oder C ++ - Schnittstelle
  • Plattformübergreifend (hauptsächlich Linux, Unix)
ssquidd 24.10.2010, 21:38
quelle

3 Antworten

7

Vielleicht möchten Sie sich LLVM ansehen.

    
Matias Valdenegro 24.10.2010, 21:59
quelle
3

Cint ist ein C ++ (ish ), die die Möglichkeit bietet, kompilierten Code und interpretierten Code zu mischen. Es gibt eine Reihe von Optimierungstools für den Interpreter . ROOT erweitert dies noch weiter, indem es die Kompilierung und Verknüpfung zur Laufzeit zur Laufzeit unterstützt (siehe den letzten Abschnitt von Ссылка ), obwohl es anscheinend den System-Compiler verwendet und daher möglicherweise nicht hilft. Der gesamte Code ist Open Source.

Ich benutze regelmäßig alle diese Funktionen als Teil meiner Arbeit.

Ich weiß nicht, ob es die SIMD-Anweisungen aktiv nutzt, aber es scheint alle anderen Anforderungen zu erfüllen.

Wie ich sehe, verwenden Sie derzeit die Compile-to-Dynamic-Bibliothek unter "Link on the fly" -Methode. Sie könnten jedoch TCC in Erwägung ziehen Ich glaube nicht, dass es viel Optimierung tut und vermuten, dass es SIMD nicht unterstützt.

    
dmckee 24.10.2010 22:21
quelle
0

Klingt wie Sie on the fly kompilieren können, wollen und dann dynamisch laden die kompilierte Bibliothek (.dll oder .so). Dies bietet Ihnen die beste Leistung mit einer ANSI-C- oder C ++ - Schnittstelle. Also vergiss JITing und erwäge, einen C / C ++ - Compiler für die Kompilierung zu erstellen.

Dies setzt natürlich voraus, dass ein Compiler an dem Punkt installiert werden kann, an dem der dynamisch generierte Code tatsächlich erzeugt wird.

    
Michael Goldshteyn 24.10.2010 21:44
quelle

Tags und Links