DeepMind Open Source S6, eine Bibliothek mit einer JIT-Compiler-Implementierung für CPython

DeepMind, ein Unternehmen, das für seine Entwicklungen im Bereich der künstlichen Intelligenz bekannt ist, hat den Quellcode des S6-Projekts geöffnet, das einen JIT-Compiler für die Python-Sprache entwickelt hat. Das Projekt ist interessant, weil es als Erweiterungsbibliothek konzipiert ist, die sich in Standard-CPython integrieren lässt, vollständige Kompatibilität mit CPython gewährleistet und keine Änderung des Interpretercodes erfordert. Das Projekt befindet sich seit 2019 in der Entwicklung, wurde aber leider eingestellt und wird nicht mehr weiterentwickelt. Da die erstellten Entwicklungen zur Verbesserung von Python nützlich sein können, wurde beschlossen, den Code als Open Source zu veröffentlichen. Der JIT-Compiler-Code ist in C++ geschrieben und basiert auf CPython 3.7. und ist Open Source unter der Apache 2.0-Lizenz.

Hinsichtlich der Aufgaben, die es lösen kann, ist S6 für Python mit der V8-Engine für JavaScript vergleichbar. Die Bibliothek ersetzt den vorhandenen Bytecode-Interpreter-Handler ceval.c durch eine eigene Implementierung, die die JIT-Kompilierung verwendet, um die Ausführung zu beschleunigen. S6 prüft, ob die aktuelle Funktion bereits kompiliert ist und führt in diesem Fall den kompilierten Code aus. Wenn nicht, führt er die Funktion im Bytecode-Interpretationsmodus aus, ähnlich dem CPython-Interpreter. Bei der Interpretation wird die Anzahl der ausgeführten Anweisungen und Aufrufe gezählt, die mit der verarbeiteten Funktion verbunden sind. Nach Erreichen eines bestimmten Meilensteins wird ein Kompilierungsprozess eingeleitet, um häufig ausgeführten Code zu beschleunigen. Die Kompilierung erfolgt in eine Strongjit-Zwischendarstellung, die nach der Optimierung mithilfe der Asmjit-Bibliothek in Maschinenanweisungen des Zielsystems umgewandelt wird.

Abhängig von der Art der Arbeitslast zeigt S6 unter optimalen Bedingungen eine bis zu 9.5-fache Steigerung der Testausführungsgeschwindigkeit im Vergleich zu normalem CPython. Bei der Ausführung von 100 Iterationen der Richards-Testsuite wird eine 7-fache Beschleunigung beobachtet, und bei der Ausführung des Raytrace-Tests, der eine große Menge mathematischer Berechnungen erfordert, wird eine 3- bis 4.5-fache Beschleunigung beobachtet.

Zu den Aufgaben, die mit S6 schwer zu optimieren sind, gehören Projekte, die die C-API verwenden, wie z. B. NumPy, sowie Vorgänge, die mit der Notwendigkeit verbunden sind, die Typen einer großen Anzahl von Werten zu überprüfen. Aufgrund der Verwendung der S6-eigenen, nicht optimierten Implementierung des Python-Interpreters ist auch bei Einzelaufrufen ressourcenintensiver Funktionen eine geringe Leistung zu beobachten (die Entwicklung hat noch nicht das Stadium der Optimierung des Interpretationsmodus erreicht). Beispielsweise kommt es beim Unpack Sequence-Test, der große Mengen von Arrays/Tupeln entpackt, bei einem einzelnen Aufruf zu einer Verlangsamung um das bis zu Fünffache, und bei einem zyklischen Aufruf beträgt die Leistung von CPython 5.

Source: opennet.ru

Kommentar hinzufügen