DeepMind veröffentlichte den Quellcode für S6, einen JIT-Compiler für Python

S6-Tiefengeist

S6 ist eine eigenständige JIT-Compilerbibliothek für CPython

tiefsinn, bekannt für seine Entwicklungen im Bereich der künstlichen Intelligenz, gab dies kürzlich bekannt hat die Entscheidung getroffen, den Quellcode des S6-Projekts freizugeben, das er aus einem JIT-Compiler für die Sprache Python entwickelt hat.

Das Projekt ist interessant da ist als Erweiterungsbibliothek konzipiert die mit Standard-CPython integriert werden kann, die bietet volle CPython-Kompatibilität und erfordert keine Modifikation des Interpretercodes. Das Projekt befindet sich seit 2019 in der Entwicklung, wurde aber leider zurückgefahren und befindet sich nicht mehr in der Entwicklung.

S6 war ein Projekt, das 2019 innerhalb von DeepMind gestartet wurde, um CPython mit Just-in-Time ("JIT")-Kompilierung zu beschleunigen. Diese Funktionen würden als normale Python-Bibliothek bereitgestellt und es wären keine Änderungen am CPython-Interpreter erforderlich. S6 sollte für Python das tun, was V8 für Javascript getan hat (der Name ist eine Hommage an V8). Die Arbeit basierte auf CPython Version 3.7. Je nach Arbeitslast konnten wir in gängigen Benchmarks bis zu 9.5-fache Beschleunigungen feststellen.

Der Hauptgrund, warum entschieden wurde, den Quellcode zu veröffentlichen, einer davon und wie bereits erwähnt, war, dass das Projekt keine Unterstützung mehr hatte, ein weiterer Hauptgrund wurde angegeben, dass basierend auf den erstellten Entwicklungen diese immer noch nützlich sein können, um Python zu verbessern .

Wir haben die Arbeit an S6 intern eingestellt. Daher wurde dieses Repository archiviert und wir akzeptieren keine Pull-Anfragen oder Probleme. Wir haben Open Source erstellt und unten eine Designübersicht bereitgestellt, um Gespräche innerhalb der Python-Community anzuregen und zukünftige Arbeiten zur Verbesserung von Python anzuregen.

In Bezug auf die Bedienung von S6 sollten wir das erwähnen S6 für Python ist mit der V8-Engine für JavaScript vergleichbar in Bezug auf die Aufgaben, die es löst. Die Bibliothek ersetzt den vorhandenen Bytecode-Interpreter-Treiber ceval.c durch ihre eigene Implementierung, die die JIT-Kompilierung verwendet, um die Ausführung zu beschleunigen.

S6 prüft, ob die aktuelle Funktion bereits kompiliert wurde und wenn ja, führt es den kompilierten Code aus, und wenn nicht, führt es die Funktion in einem Bytecode-Interpretationsmodus ähnlich dem CPython-Interpreter aus. Die Interpretation zählt die Anzahl der ausgeführten Anweisungen und Aufrufe, die der verarbeiteten Funktion zugeordnet sind.

Nach Erreichen eines bestimmten Meilensteins wird der Build-Prozess gestartet, um den Code zu beschleunigen die häufig läuft. Die Kompilierung erfolgt auf der Strongjit-Zwischendarstellung, die nach der Optimierung mithilfe der Asmjit-Bibliothek in Maschinenanweisungen des Zielsystems konvertiert wird.

Abhängig von der Art der Last zeigt S6 unter optimalen Bedingungen eine bis zu 9,5-fache Steigerung der Testausführungsgeschwindigkeit im Vergleich zu regulärem CPython.

Wenn 100 Iterationen ausgeführt werden aus der Richards-Testsuite, es gibt eine Beschleunigung von 7 mal, und beim Ausführen des Raytrace-Tests, der viel Mathematik enthält, ist er 3- bis 4,5-mal schneller.

Aufgaben, die schwer zu optimieren sind mit S6 sind die Projekte, die die C-API verwenden, wie NumPy, sowie Operationen im Zusammenhang mit der Notwendigkeit, die Typen einer großen Anzahl von Werten zu überprüfen.

Eine schlechte Leistung wird auch für einzelne Funktionsaufrufe gesehen die aufgrund der Verwendung der nicht optimierten Implementierung des S6-Python-Interpreters viele Ressourcen verbrauchen (die Entwicklung hat noch nicht das Stadium der Optimierung des Interpretermodus erreicht).

Beispielsweise zeigt beim Unpack Sequence-Test, der große Mengen von Arrays/Tupeln entpackt, ein einzelner Aufruf eine bis zu 5-fache Verlangsamung, und ein zyklischer Aufruf ergibt 0,97 von CPython.

Schließlich für diejenigen, die mehr darüber wissen möchten, sollten Sie wissen, dass der JIT-Compiler-Code in C++ geschrieben ist und derzeit auf CPython 3.7 basiert, zusätzlich dazu, dass der Quellcode bereits unter der Apache-2.0-Lizenz offen ist und konsultiert werden kann über den Link unten.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.