DeepMind S6 open source, una libreria con un'implementazione del compilatore JIT per CPython

DeepMind, nota per i suoi sviluppi nel campo dell'intelligenza artificiale, ha aperto il codice sorgente del progetto S6, che ha sviluppato un compilatore JIT per il linguaggio Python. Il progetto è interessante perché è pensato come una libreria di estensione che si integra con lo standard CPython, garantendo la piena compatibilità con CPython e non richiedendo modifiche al codice dell'interprete. Il progetto è in sviluppo dal 2019, ma purtroppo è stato interrotto e non è più in sviluppo. Poiché gli sviluppi realizzati potrebbero essere utili per migliorare Python, si è deciso di rendere open source il codice. Il codice del compilatore JIT è scritto in C++ e si basa su CPython 3.7. ed è open source con licenza Apache 2.0.

In termini di compiti che può risolvere, S6 per Python è paragonabile al motore V8 per JavaScript. La libreria sostituisce il gestore dell'interprete bytecode esistente ceval.c con la propria implementazione che utilizza la compilazione JIT per accelerare l'esecuzione. S6 controlla se la funzione corrente è già compilata e, in tal caso, esegue il codice compilato e, in caso contrario, esegue la funzione in modalità di interpretazione bytecode, simile all'interprete CPython. Durante l'interpretazione viene conteggiato il numero di istruzioni e chiamate eseguite associate alla funzione in elaborazione. Dopo aver raggiunto un determinato traguardo, viene avviato un processo di compilazione per accelerare il codice eseguito di frequente. La compilazione viene eseguita in una rappresentazione intermedia strongjit che, dopo l'ottimizzazione, viene convertita in istruzioni macchina del sistema di destinazione utilizzando la libreria asmjit.

A seconda della natura del carico di lavoro, S6 in condizioni ottimali dimostra un aumento della velocità di esecuzione dei test fino a 9.5 volte rispetto al normale CPython. Quando si eseguono 100 iterazioni della suite di test Richards, si osserva un aumento di velocità di 7 volte e quando si esegue il test Raytrace, che prevede una grande quantità di calcoli matematici, si osserva un aumento di velocità di 3-4.5 volte.

Tra i compiti difficili da ottimizzare con S6 ci sono i progetti che utilizzano l'API C, come NumPy, così come le operazioni legate alla necessità di verificare i tipi di un gran numero di valori. Si osservano prestazioni basse anche per singole chiamate di funzioni ad alta intensità di risorse a causa dell'uso dell'implementazione non ottimizzata dell'interprete Python propria di S6 (lo sviluppo non ha raggiunto la fase di ottimizzazione della modalità di interpretazione). Ad esempio, nel test Unpack Sequence, che decomprime grandi set di array/tuple, con una singola chiamata si verifica un rallentamento fino a 5 volte, e con una chiamata ciclica la prestazione è 0.97 da CPython.

Fonte: opennet.ru

Aggiungi un commento