Το LLVM Creator αναπτύσσει νέα γλώσσα προγραμματισμού Mojo

Ο Chris Lattner, ιδρυτής και επικεφαλής αρχιτέκτονας της LLVM και δημιουργός της γλώσσας προγραμματισμού Swift, και ο Tim Davis, πρώην επικεφαλής έργων Google AI, όπως το Tensorflow και το JAX, παρουσίασαν μια νέα γλώσσα προγραμματισμού Mojo που συνδυάζει ευκολία στη χρήση για Ε&Α και γρήγορη δημιουργία πρωτοτύπων με καταλληλότητα για τελικά προϊόντα υψηλής απόδοσης. Το πρώτο επιτυγχάνεται με τη χρήση της γνώριμης σύνταξης της γλώσσας Python και το δεύτερο οφείλεται στη δυνατότητα μεταγλώττισης σε κώδικα μηχανής, σε μηχανισμούς για ασφαλή διαχείριση μνήμης και στη χρήση εργαλείων για επιτάχυνση υπολογισμών μέσω υλικού.

Το έργο επικεντρώνεται στη χρήση για ανάπτυξη μηχανικής μάθησης, αλλά παρουσιάζεται ως μια γλώσσα γενικής χρήσης που επεκτείνει τις δυνατότητες της γλώσσας Python με προγραμματισμό συστημάτων και είναι κατάλληλη για ένα ευρύ φάσμα εργασιών. Για παράδειγμα, η γλώσσα είναι εφαρμόσιμη σε τομείς όπως υπολογιστές υψηλής απόδοσης, επεξεργασία δεδομένων και μετασχηματισμός. Ένα ενδιαφέρον χαρακτηριστικό του Mojo είναι η δυνατότητα να προσδιορίζει το σύμβολο emoji "🔥" ως επέκταση για αρχεία κώδικα (για παράδειγμα, "helloworld.🔥"), εκτός από την επέκταση κειμένου ".mojo".

Επί του παρόντος, η γλώσσα βρίσκεται υπό εντατική ανάπτυξη και μόνο η διαδικτυακή διεπαφή προσφέρεται για δοκιμή. Ξεχωριστές συγκροτήσεις που θα εκτελούνται σε τοπικά συστήματα υπόσχονται ότι θα δημοσιευτούν αργότερα, αφού λάβουν σχόλια σχετικά με τη δουλειά του διαδραστικού περιβάλλοντος ιστού. Ο πηγαίος κώδικας για τον μεταγλωττιστή, JIT και άλλες εξελίξεις που σχετίζονται με το έργο σχεδιάζεται να ανοίξει μετά την ολοκλήρωση του σχεδιασμού της εσωτερικής αρχιτεκτονικής (το μοντέλο ανάπτυξης ενός λειτουργικού πρωτοτύπου πίσω από κλειστές πόρτες μοιάζει με το αρχικό στάδιο ανάπτυξης του LLVM, Clang και Σουίφτ). Δεδομένου ότι η σύνταξη του Mojo βασίζεται στην Python και το σύστημα τύπων είναι κοντά στο C/C++, υπάρχουν σχέδια στο μέλλον να αναπτυχθεί μια εργαλειοθήκη για τη διευκόλυνση της μετάφρασης υπαρχόντων έργων γραμμένων σε C/C++ και Python σε Mojo, καθώς και να αναπτυχθεί υβριδικά έργα που συνδυάζουν κώδικα Python και Mojo.

Το έργο έχει σχεδιαστεί για να περιλαμβάνει στους υπολογισμούς τους πόρους υλικού ετερογενών συστημάτων που είναι διαθέσιμα στο σύστημα. Για παράδειγμα, οι GPU, οι εξειδικευμένοι επιταχυντές μηχανικής μάθησης και οι διανυσματικές οδηγίες επεξεργασίας (SIMD) μπορούν να χρησιμοποιηθούν για την εκτέλεση εφαρμογών Mojo και τον παραλληλισμό υπολογισμών. Ο λόγος για την ανάπτυξη ενός ξεχωριστού υποσυνόλου της γλώσσας Python, αντί να ενταχθεί στο έργο βελτιστοποίησης του υπάρχοντος CPython, αναφέρεται ως εστίαση μεταγλώττισης, ενσωμάτωση δυνατοτήτων προγραμματισμού συστήματος και χρήση μιας θεμελιωδώς διαφορετικής εσωτερικής αρχιτεκτονικής που επιτρέπει στον κώδικα να εκτελούνται σε GPU και διάφορους επιταχυντές υλικού. Ταυτόχρονα, οι προγραμματιστές του Mojo σκοπεύουν να τηρήσουν όσο το δυνατόν περισσότερο τη συμβατότητα με το CPython.

Το Mojo μπορεί να χρησιμοποιηθεί τόσο σε λειτουργία ερμηνείας JIT όσο και για μεταγλώττιση σε εκτελέσιμα αρχεία (AOT, εκ των προτέρων). Ο μεταγλωττιστής έχει ενσωματωμένες σύγχρονες τεχνολογίες για αυτόματη βελτιστοποίηση, προσωρινή αποθήκευση και κατανεμημένη μεταγλώττιση. Τα κείμενα πηγής στη γλώσσα Mojo μετατρέπονται σε ενδιάμεσο κώδικα χαμηλού επιπέδου MLIR (Multi-Level Intermediate Representation), που αναπτύχθηκε από το έργο LLVM και παρέχει πρόσθετες δυνατότητες για τη βελτιστοποίηση της επεξεργασίας ενός γραφήματος ροής δεδομένων. Ο μεταγλωττιστής σάς επιτρέπει να χρησιμοποιείτε διάφορα backend που υποστηρίζουν MLIR για τη δημιουργία κώδικα μηχανής.

Η χρήση πρόσθετων μηχανισμών υλικού για την επιτάχυνση των υπολογισμών καθιστά δυνατή την επίτευξη απόδοσης που, με εντατικούς υπολογισμούς, υπερβαίνει τις εφαρμογές C / C ++. Για παράδειγμα, κατά τη δοκιμή μιας εφαρμογής για τη δημιουργία ενός συνόλου Mandelbrot, η μεταγλωττισμένη εφαρμογή Mojo, όταν εκτελούνταν στο νέφος AWS (r7iz.metal-16xl), ήταν 6 φορές ταχύτερη από την υλοποίηση C ++ (0.03 δευτ. έναντι 0.20 δευτ. .), καθώς και 35 χιλιάδες φορές πιο γρήγορα από μια εφαρμογή Python που χρησιμοποιεί το απόθεμα CPython 3.10.9 (0.03 sec έναντι 1027 sec) και 1500 φορές πιο γρήγορα χρησιμοποιώντας το PYPY (0.03 sec έναντι 46.1 sec).

Κατά την αξιολόγηση της απόδοσης στον τομέα της επίλυσης προβλημάτων μηχανικής μάθησης, η στοίβα Modular Inference Engine AI γραμμένη στη γλώσσα Mojo, σε σύγκριση με μια λύση που βασίζεται στη βιβλιοθήκη TensorFlow, αποδείχθηκε ότι ήταν 3 φορές πιο γρήγορη σε ένα σύστημα με Intel επεξεργαστή κατά την επεξεργασία ενός μοντέλου γλώσσας, 6.4 φορές ταχύτερο κατά την εκτέλεση του μοντέλου δημιουργίας συστάσεων και 2.1 φορές ταχύτερο κατά την εργασία με μοντέλα για την επεξεργασία οπτικών πληροφοριών. Κατά τη χρήση επεξεργαστών AMD, το κέρδος κατά τη χρήση του Mojo ήταν 3.2, 5 και 2.2 φορές και κατά τη χρήση επεξεργαστών ARM - 5.3, 7.5 και 1.7 φορές, αντίστοιχα. Η λύση που βασίζεται στο PyTorch υστερούσε από το Mojo κατά 1.4, 1.1 και 1.5 φορές στην CPU της Intel, 2.1, 1.2 και 1.5 φορές στην CPU της AMD και 4, 4.3 και 1.3 φορές στην CPU της ARM.

Το LLVM Creator αναπτύσσει νέα γλώσσα προγραμματισμού Mojo

Η γλώσσα υποστηρίζει στατική πληκτρολόγηση και λειτουργίες χαμηλού επιπέδου που είναι ασφαλείς για μνήμη που θυμίζουν χαρακτηριστικά Rust, όπως η παρακολούθηση διάρκειας ζωής αναφοράς και ο έλεγχος μεταβλητού δανεισμού (δανεικός έλεγχος). Εκτός από τα μέσα για ασφαλή λειτουργία με δείκτες, η γλώσσα παρέχει επίσης δυνατότητες για εργασία χαμηλού επιπέδου, για παράδειγμα, είναι δυνατή η άμεση πρόσβαση στη μνήμη σε μη ασφαλή λειτουργία χρησιμοποιώντας τον τύπο δείκτη, η κλήση μεμονωμένων οδηγιών SIMD ή η πρόσβαση σε επεκτάσεις υλικού όπως π. ως TensorCores και AMX.

Το LLVM Creator αναπτύσσει νέα γλώσσα προγραμματισμού Mojo

Για να απλοποιηθεί ο διαχωρισμός του κλασικού και του βελτιστοποιημένου κώδικα Python για συναρτήσεις με ρητούς ορισμούς τύπων για όλες τις μεταβλητές, προτείνεται να χρησιμοποιηθεί μια ξεχωριστή λέξη-κλειδί "fn" αντί για "def". Ομοίως για τις κλάσεις, εάν χρειάζεται να πακετάρετε δεδομένα στη μνήμη κατά τον χρόνο μεταγλώττισης (όπως στο C), αντί για "class" μπορείτε να χρησιμοποιήσετε τον τύπο "struct". Είναι επίσης δυνατή η απλή εισαγωγή μονάδων σε γλώσσες C / C ++, για παράδειγμα, για να εισαγάγετε τη συνάρτηση cos από τη βιβλιοθήκη μαθηματικών, μπορείτε να καθορίσετε "από το "math.h" import cos".

Πηγή: opennet.ru

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