DeepMind open source S6, μια βιβλιοθήκη με εφαρμογή μεταγλωττιστή JIT για CPython

Η DeepMind, γνωστή για τις εξελίξεις της στον τομέα της τεχνητής νοημοσύνης, άνοιξε τον πηγαίο κώδικα του έργου S6, το οποίο ανέπτυξε έναν μεταγλωττιστή JIT για τη γλώσσα Python. Το έργο είναι ενδιαφέρον επειδή έχει σχεδιαστεί ως βιβλιοθήκη επέκτασης που ενσωματώνεται με το τυπικό CPython, διασφαλίζοντας πλήρη συμβατότητα με το CPython και δεν απαιτεί τροποποίηση του κώδικα διερμηνέα. Το έργο αναπτύσσεται από το 2019, αλλά δυστυχώς διακόπηκε και δεν αναπτύσσεται πλέον. Δεδομένου ότι οι εξελίξεις που δημιουργήθηκαν μπορεί να είναι χρήσιμες για τη βελτίωση της Python, αποφασίστηκε ο κώδικας ανοιχτού κώδικα. Ο κώδικας μεταγλωττιστή JIT είναι γραμμένος σε C++ και βασίζεται στο CPython 3.7. και είναι ανοιχτού κώδικα με την άδεια Apache 2.0.

Όσον αφορά τις εργασίες που μπορεί να λύσει, το S6 για Python συγκρίνεται με τον κινητήρα V8 για JavaScript. Η βιβλιοθήκη αντικαθιστά τον υπάρχοντα χειριστή διερμηνέα bytecode ceval.c με τη δική της υλοποίηση που χρησιμοποιεί τη μεταγλώττιση JIT για να επιταχύνει την εκτέλεση. Το S6 ελέγχει εάν η τρέχουσα συνάρτηση έχει ήδη μεταγλωττιστεί και, εάν ναι, εκτελεί τον μεταγλωττισμένο κώδικα και, αν όχι, εκτελεί τη συνάρτηση σε λειτουργία ερμηνείας bytecode, παρόμοια με τον διερμηνέα CPython. Κατά την ερμηνεία, υπολογίζεται ο αριθμός των εκτελεσμένων εντολών και κλήσεων που σχετίζονται με τη λειτουργία που υποβάλλεται σε επεξεργασία. Αφού φτάσετε σε ένα ορόσημο, ξεκινά μια διαδικασία μεταγλώττισης για να επιταχυνθεί ο συχνά εκτελούμενος κώδικας. Η μεταγλώττιση πραγματοποιείται σε μια ενδιάμεση αναπαράσταση strongjit, η οποία, μετά τη βελτιστοποίηση, μετατρέπεται σε οδηγίες μηχανής του συστήματος στόχου χρησιμοποιώντας τη βιβλιοθήκη asmjit.

Ανάλογα με τη φύση του φόρτου εργασίας, το S6 υπό βέλτιστες συνθήκες παρουσιάζει αύξηση στην ταχύτητα εκτέλεσης της δοκιμής έως και 9.5 φορές σε σύγκριση με το κανονικό CPython. Κατά την εκτέλεση 100 επαναλήψεων της σειράς δοκιμών Richards, παρατηρείται επιτάχυνση 7x και κατά την εκτέλεση της δοκιμής Raytrace, η οποία περιλαμβάνει μεγάλο αριθμό μαθηματικών υπολογισμών, παρατηρείται επιτάχυνση 3-4.5x.

Μεταξύ των εργασιών που είναι δύσκολο να βελτιστοποιηθούν χρησιμοποιώντας το S6 είναι έργα που χρησιμοποιούν το C API, όπως το NumPy, καθώς και λειτουργίες που σχετίζονται με την ανάγκη ελέγχου των τύπων ενός μεγάλου αριθμού τιμών. Χαμηλή απόδοση παρατηρείται επίσης για μεμονωμένες κλήσεις συναρτήσεων έντασης πόρων λόγω της χρήσης της μη βελτιστοποιημένης εφαρμογής του διερμηνέα Python του S6 (η ανάπτυξη δεν έχει φτάσει στο στάδιο της βελτιστοποίησης της λειτουργίας ερμηνείας). Για παράδειγμα, στο τεστ Unpack Sequence, το οποίο αποσυσκευάζει μεγάλα σύνολα πινάκων/πλειάδων, με μία κλήση υπάρχει επιβράδυνση έως και 5 φορές και με μια κυκλική κλήση η απόδοση είναι 0.97 από το CPython.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο