LLVM Creator ontwikkelt nieuwe Mojo-programmeertaal

Chris Lattner, oprichter en hoofdarchitect van LLVM en maker van de programmeertaal Swift, en Tim Davis, voormalig hoofd van Google AI-projecten zoals Tensorflow en JAX, introduceerden een nieuwe programmeertaal, Mojo, die gebruiksgemak voor onderzoeksontwikkeling combineert met rapid prototyping met het potentieel om hoogwaardige eindproducten te formuleren. De eerste wordt bereikt door het gebruik van de bekende syntaxis van de Python-taal, en de tweede door de mogelijkheid om te compileren in machinecode, geheugenveilige mechanismen en het gebruik van hardwareversnellingshulpmiddelen.

Het project is gericht op gebruik voor ontwikkeling op het gebied van machinaal leren, maar wordt gepresenteerd als een taal voor algemene doeleinden die de mogelijkheden van Python uitbreidt met systeemprogrammeertools en geschikt is voor een breed scala aan taken. De taal is bijvoorbeeld toepasbaar op gebieden als high-performance computing, gegevensverwerking en transformatie. Een interessant kenmerk van Mojo is de mogelijkheid om het emoji-teken "🔥" op te geven als extensie voor codebestanden (bijvoorbeeld "helloworld.🔥"), naast de tekstextensie ".mojo".

Momenteel bevindt de taal zich in de fase van intensieve ontwikkeling en wordt alleen de online interface aangeboden om te testen. Er wordt beloofd dat afzonderlijke assemblages voor gebruik op lokale systemen later zullen worden gepubliceerd, na ontvangst van feedback over de werking van de interactieve webomgeving. Het is de bedoeling dat de broncode voor de compiler, JIT en andere ontwikkelingen met betrekking tot het project wordt geopend nadat de interne architectuur is voltooid (het model voor het ontwikkelen van een werkend prototype achter gesloten deuren doet denken aan de beginfase van de ontwikkeling van LLVM, Clang en Snel). Omdat de Mojo-syntaxis gebaseerd is op de Python-taal en het typesysteem dicht bij C/C++ ligt, zijn ze van plan om in de toekomst tools te ontwikkelen om de vertaling van bestaande projecten geschreven in C/C++ en Python naar Mojo te vereenvoudigen, evenals om hybride projecten te ontwikkelen die Python-code en Mojo combineren.

Het project is ontworpen om de beschikbare hardwarebronnen van heterogene systemen te betrekken bij het uitvoeren van berekeningen. GPU's, gespecialiseerde machine learning-versnellers en processorinstructievectoren (SIMD) kunnen bijvoorbeeld worden gebruikt om Mojo-applicaties uit te voeren en berekeningen te parallelliseren. De redenen die worden gegeven om een ​​aparte subset van de Python-taal te ontwikkelen in plaats van zich aan te sluiten bij het bestaande CPython-optimalisatiewerk zijn onder meer een focus op compilatie, integratie van systeemprogrammeringsmogelijkheden en het gebruik van een fundamenteel andere interne architectuur die het mogelijk maakt code te draaien op GPU's en verschillende hardwareversnellers. De Mojo-ontwikkelaars zijn echter van plan zoveel mogelijk compatibel te blijven met CPython.

Mojo kan zowel in de interpretatiemodus met behulp van JIT worden gebruikt als voor compilatie in uitvoerbare bestanden (AOT, vooraf). De compiler beschikt over ingebouwde moderne technologieën voor automatische optimalisatie, caching en gedistribueerde compilatie. Bronteksten in de Mojo-taal worden omgezet in tussenliggende code MLIR (Multi-Level Intermediate Representation) op laag niveau, ontwikkeld door het LLVM-project en biedt extra mogelijkheden voor het optimaliseren van de verwerking van de gegevensstroomgrafiek. Met de compiler kunt u verschillende backends gebruiken die MLIR ondersteunen om machinecode te genereren.

Het gebruik van aanvullende hardwaremechanismen om berekeningen te versnellen maakt het mogelijk om tijdens intensieve berekeningen prestaties te bereiken die superieur zijn aan C/C++-applicaties. Bij het testen van een applicatie voor het genereren van de Mandelbrot-set bleek bijvoorbeeld een gecompileerde applicatie in de Mojo-taal, uitgevoerd in de AWS-cloud (r7iz.metal-16xl), 6 keer sneller te zijn dan de implementatie in C++ (0.03 sec. vs. 0.20 sec.), en ook 35 duizend keer sneller dan een Python-applicatie bij gebruik van standaard CPython 3.10.9 (0.03 sec. vs. 1027 sec.) en 1500 keer sneller bij gebruik van PYPY (0.03 sec. vs. 46.1 sec.) .

Bij het beoordelen van de prestaties op het gebied van het oplossen van machine learning-problemen was de AI-stack Modular Inference Engine, geschreven in de Mojo-taal, vergeleken met een oplossing gebaseerd op de TensorFlow-bibliotheek, 3 keer sneller bij het verwerken van een taalmodel op een systeem met een Intel-processor, 6.4 keer sneller bij het verwerken van de uitvoering van het model voor het genereren van aanbevelingen en 2.1 keer sneller bij het werken met modellen voor het verwerken van visuele informatie. Bij gebruik van AMD-processors waren de winsten bij het gebruik van Mojo respectievelijk 3.2, 5 en 2.2 keer, en bij gebruik van ARM-processors - respectievelijk 5.3, 7.5 en 1.7 keer. De op PyTorch gebaseerde oplossing bleef 1.4, 1.1 en 1.5 keer achter op Mojo op Intel CPU's, 2.1, 1.2 en 1.5 keer op AMD CPU's en 4, 4.3 en 1.3 keer op ARM CPU's.

LLVM Creator ontwikkelt nieuwe Mojo-programmeertaal

De taal ondersteunt statisch typen en geheugenveilige functies op laag niveau die doen denken aan Rust, zoals het bijhouden van referentielevensduur en leencontrole. Naast faciliteiten voor veilig werken met pointers biedt de taal ook functies voor werken op laag niveau, bijvoorbeeld directe toegang tot het geheugen in de onveilige modus met behulp van het Pointer-type, het oproepen van individuele SIMD-instructies of toegang tot hardware-uitbreidingen zoals TensorCores en AMX .

LLVM Creator ontwikkelt nieuwe Mojo-programmeertaal

Om de scheiding tussen klassieke en geoptimaliseerde Python-code voor functies met expliciete typedefinities voor alle variabelen te vereenvoudigen, wordt voorgesteld om een ​​afzonderlijk trefwoord “fn” te gebruiken in plaats van “def”. Op dezelfde manier kunt u voor klassen, als u gegevens statisch in het geheugen moet inpakken tijdens het compileren (zoals in C), het type "struct" gebruiken in plaats van "class". Het is ook mogelijk om eenvoudig modules in C/C++-talen te importeren. Om bijvoorbeeld de cos-functie uit de wiskundebibliotheek te importeren, kunt u opgeven “uit “math.h” import cos”.

Bron: opennet.ru

Voeg een reactie