DeepMind open source S6, een bibliotheek met een JIT-compiler-implementatie voor CPython

DeepMind, bekend van haar ontwikkelingen op het gebied van kunstmatige intelligentie, heeft de broncode geopend van het S6-project, dat een JIT-compiler voor de taal Python ontwikkelde. Het project is interessant omdat het is ontworpen als een uitbreidingsbibliotheek die kan worden geïntegreerd met standaard CPython, waardoor volledige compatibiliteit met CPython wordt gegarandeerd en geen wijziging van de tolkcode vereist is. Het project is sinds 2019 in ontwikkeling, maar is helaas stopgezet en ontwikkelt zich niet meer. Omdat de ontstane ontwikkelingen nuttig kunnen zijn voor het verbeteren van Python, is besloten de code open source te maken. De JIT-compilercode is geschreven in C++ en is gebaseerd op CPython 3.7. en is open source onder de Apache 2.0-licentie.

Wat betreft de taken die het kan oplossen, is S6 voor Python vergelijkbaar met de V8-engine voor JavaScript. De bibliotheek vervangt de bestaande bytecode-interpreter-handler ceval.c door een eigen implementatie die JIT-compilatie gebruikt om de uitvoering te versnellen. S6 controleert of de huidige functie al is gecompileerd en voert, als dat het geval is, de gecompileerde code uit. Als dat niet het geval is, voert hij de functie uit in de bytecode-interpretatiemodus, vergelijkbaar met de CPython-interpreter. Tijdens de interpretatie wordt het aantal uitgevoerde instructies en oproepen geteld die verband houden met de functie die wordt verwerkt. Na het bereiken van een bepaalde mijlpaal wordt een compilatieproces gestart om vaak uitgevoerde code te versnellen. Er wordt gecompileerd tot een tussenliggende strongjit-representatie, die na optimalisatie wordt omgezet in machine-instructies van het doelsysteem met behulp van de asmjit-bibliotheek.

Afhankelijk van de aard van de werklast laat S6 onder optimale omstandigheden een toename zien in de testuitvoeringssnelheid tot wel 9.5 keer vergeleken met reguliere CPython. Bij het uitvoeren van 100 iteraties van de Richards-testsuite wordt een versnelling van 7x waargenomen, en bij het uitvoeren van de Raytrace-test, die een groot aantal wiskundige berekeningen omvat, wordt een versnelling van 3-4.5x waargenomen.

Tot de taken die moeilijk te optimaliseren zijn met S6 behoren projecten die de C API gebruiken, zoals NumPy, evenals bewerkingen die verband houden met de noodzaak om de typen van een groot aantal waarden te controleren. Lage prestaties worden ook waargenomen voor afzonderlijke aanroepen van resource-intensieve functies als gevolg van het gebruik van S6's eigen niet-geoptimaliseerde implementatie van de Python-interpreter (de ontwikkeling heeft nog niet het stadium bereikt van het optimaliseren van de interpretatiemodus). In de Unpack Sequence-test, die grote sets arrays/tuples uitpakt, is er bijvoorbeeld met een enkele aanroep een vertraging van maximaal 5 keer, en bij een cyclische aanroep is de prestatie 0.97 van CPython.

Bron: opennet.ru

Voeg een reactie