DeepMind hat den Code von S6, einer Bibliothek zur Implementierung eines JIT-Compilers für CPython, veröffentlicht

Das Unternehmen DeepMind, bekannt für seine Entwicklungen im Bereich der künstlichen Intelligenz, hat die Quelltexte des Projekts S6 veröffentlicht, das einen JIT-Compiler für die Programmiersprache Python weiterentwickelt hat. Das Projekt ist interessant, da es als Erweiterungsbibliothek gestaltet ist, die sich nahtlos mit dem Standard-CPython integrieren lässt und volle Kompatibilität gewährleistet, ohne dass Änderungen am Code des Interpreters notwendig sind. Das Projekt wurde seit 2019 entwickelt, wurde jedoch leider eingestellt und wird nicht weiterentwickelt. Da die erstellten Entwicklungen für die Verbesserung von Python nützlich sein könnten, wurde beschlossen, die Quelltexte zu veröffentlichen. Der JIT-Compiler ist in C++ geschrieben, basiert auf CPython 3.7 und wird unter der Apache 2.0-Lizenz veröffentlicht.

S6 für Python wird mit dem V8-Engine für JavaScript verglichen. Die Bibliothek ersetzt den bestehenden Bytecode-Interpreter-handler ceval.c durch eine eigene Implementierung, die JIT-Kompilierung verwendet, um die Ausführung zu beschleunigen. S6 prüft, ob die aktuelle Funktion bereits kompiliert wurde, und falls ja, wird der kompilierte Code ausgeführt. Andernfalls wird die Funktion im Bytecode-Interpretationsmodus ausgeführt, ähnlich dem CPython-Interpreter. Während der Interpretation wird die Anzahl der ausgeführten Anweisungen und Zugriffe, die mit der bearbeiteten Funktion verbunden sind, gezählt. Nach Erreichen eines bestimmten Schwellenwerts wird der Kompilierungsprozess für häufig ausgeführten Code angestoßen. Die Kompilierung erfolgt in eine Zwischenrepräsentation namens strongjit, die nach der Optimierung in Maschinenanweisungen der Zielsysteme mithilfe der Bibliothek asmjit umgewandelt wird.

Je nach Art der Last zeigt S6 unter optimalen Bedingungen eine bis zu 9,5-fache Geschwindigkeitssteigerung bei den Testläufen im Vergleich zu herkömmlichem CPython. Bei der Ausführung von 100 Iterationen des Testsets Richards wird eine Beschleunigung um das 7-Fache beobachtet, während bei dem Test "Raytrace", der eine große Anzahl mathematischer Berechnungen beinhaltet, eine Steigerung um 3 bis 4,5-mal festgestellt wird.

Zu den Aufgaben, die sich schlecht durch S6 optimieren lassen, gehören Projekte, die die C-API verwenden, wie NumPy, sowie Operationen, die eine Typprüfung einer großen Anzahl von Werten erfordern. Eine niedrige Leistung tritt auch bei einzelnen Aufrufen ressourcenintensiver Funktionen auf, da S6 eine eigene nicht optimierte Implementierung des Python-Interpreters verwendet (die Entwicklung hat die Phase der Optimierung des Interpretationsmodus nicht erreicht). Beispielsweise wird im Test "Unpack Sequence", der das Entpacken großer Mengen von Arrays/Tupeln durchführt, bei einem einzelnen Aufruf eine Verlangsamung um das 5-Fache beobachtet, während die Leistung bei wiederholten Aufrufen 0,97 von CPython beträgt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster