De maker van LLVM ontwikkelt een nieuwe programmeertaal Mojo

Chris Lattner, oprichter en hoofdarchitect van LLVM, en bedenker van de programmeertaal Swift, samen met Tim Davis, voormalig hoofd van AI-projecten bij Google, waaronder Tensorflow en JAX, hebben een nieuwe programmeertaal genaamd Mojo gepresenteerd. Deze taal combineert gebruiksgemak voor onderzoeksontwikkeling en snelle prototypering met de geschiktheid voor het maken van hoogpresterende eindproducten. Dit wordt bereikt door het gebruik van de vertrouwde syntaxis van de programmeertaal Python, en de mogelijkheid om te compilen naar machinecode, veilig omgaan met geheugen en het inschakelen van hardwareversnelling voor berekeningen.

Het project richt zich op toepassingen in machine learning, maar wordt gepresenteerd als een algemene programmeertaal die de mogelijkheden van Python uitbreidt met systeemprogrammering en geschikt is voor een breed scala aan taken. De taal kan bijvoorbeeld worden gebruikt voor gebieden zoals hoogperformante computing en gegevensverwerking en -transformatie. Een interessant kenmerk van Mojo is de mogelijkheid om het emoji-symbool 'šŸ”„' als extensie voor codebestanden te gebruiken (bijvoorbeeld 'helloworld.šŸ”„'), naast de tekstuele extensie '.mojo'.

De taal bevindt zich momenteel in een intensieve ontwikkelingsfase en er is alleen een online interface beschikbaar voor testen. Aparte builds voor lokale systemen zullen later worden gepubliceerd, na ontvangst van feedback over de werking van de interactieve webomgeving. De broncodes van de compiler, JIT en andere eraan gerelateerde projecten zullen na de voltooiing van het ontwerp van de interne architectuur worden vrijgegeven (het ontwikkelingsmodel voor de werkende prototype achter gesloten deuren lijkt op de vroege fase van de ontwikkeling van LLVM, Clang en Swift). Aangezien de syntaxis van Mojo is gebaseerd op Python en het typensysteem lijkt op C/C++, zijn er plannen om in de toekomst tools te ontwikkelen die de vertaling van bestaande projecten in C/C++ en Python naar Mojo vereenvoudigen, evenals voor de ontwikkeling van hybride projecten die code in Python en Mojo combineren.

Het project is gericht op het benutten van de bestaande hardwarebronnen van heterogene systemen voor het uitvoeren van berekeningen. Bijvoorbeeld, voor het uitvoeren van applicaties in de Mojo-taal en het paralleliseren van berekeningen kunnen GPU's, gespecialiseerde versnellingsunits voor machine learning en vectorprocessor-instructies (SIMD) worden ingezet. De reden voor het ontwikkelen van een aparte subset van de Python-taal in plaats van het optimaliseren van de bestaande CPython heeft te maken met de focus op compilatie, de integratie van systeemprogrammeringsmogelijkheden en het toepassen van een fundamenteel andere interne architectuur die het mogelijk maakt om code op GPU's en verschillende hardwareversnellers uit te voeren. De ontwikkelaars van Mojo zijn van plan om, waar mogelijk, compatibiliteit met CPython na te streven.

Mojo kan zowel in interpretatiemode met JIT als voor compilatie naar uitvoerbare bestanden (AOT, ahead-of-time) worden gebruikt. De compiler bevat moderne technologieƫn voor automatische optimalisatie, caching en gedistribueerde compilatie. Bronbestanden in de Mojo-taal worden omgezet in laag-niveau tussenliggende code MLIR (Multi-Level Intermediate Representation), ontwikkeld door het LLVM-project, wat extra mogelijkheden biedt voor het optimaliseren van de verwerking van datastromen. De compiler maakt het mogelijk om verschillende backends te gebruiken voor de generatie van machinecode die MLIR ondersteunen.

Het inzetten van extra hardwaremechanismen voor het versnellen van berekeningen maakt het mogelijk om prestaties te bereiken die bij intensieve berekeningen superieur zijn aan applicaties in C/C++. Bijvoorbeeld, bij het testen van een applicatie voor het genereren van Mandelbrot-verzamelingen bleek de 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. versus 0,20 sec.), en 35.000 keer sneller dan de applicatie in Python met de standaard CPython 3.10.9 (0,03 sec. versus 1027 sec.) en 1500 keer sneller dan de applicatie met PYPY (0,03 sec. versus 46,1 sec.).

Bij de beoordeling van de prestaties op het gebied van machine learning, bleek de AI-stack Modular Inference Engine, geschreven in de taal Mojo, in vergelijking met een oplossing op basis van de TensorFlow-bibliotheek op een systeem met een Intel-processor 3 keer sneller te zijn bij de verwerking van taalmodellen, 6,4 keer sneller bij het uitvoeren van aanbevelingsmodellen en 2,1 keer sneller bij het werken met modellen voor visuele informatie. Bij het gebruik van AMD-processors was de winst bij het gebruik van Mojo 3,2, 5 en 2,2 keer, en bij het gebruik van ARM-processors 5,3, 7,5 en 1,7 keer, respectievelijk. De oplossing op basis van PyTorch bleef achter bij Mojo met 1,4, 1,1 en 1,5 keer 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.

De maker van LLVM ontwikkelt een nieuwe programmeertaal Mojo

De taal ondersteunt statische typering en middelen voor veilig low-level geheugenbeheer, vergelijkbaar met de mogelijkheden van de taal Rust, zoals het volgen van de levensduur van verwijzingen en het controleren van het lenen van variabelen (borrow checker). Naast de middelen voor veilig werken met pointers zijn er ook mogelijkheden voor low-level werk, bijvoorbeeld directe toegang tot geheugen in unsafe modus met behulp van het type Pointer, het aanroepen van afzonderlijke SIMD-instructies of toegang tot hardware-uitbreidingen zoals TensorCores en AMX.

De maker van LLVM ontwikkelt een nieuwe programmeertaal Mojo

Om de scheiding tussen klassieke en geoptimaliseerde Python-code voor functies met expliciet gedefinieerde typen voor alle variabelen te vereenvoudigen, wordt voorgesteld om een apart sleutelwoord 'fn' te gebruiken in plaats van 'def'. Evenzo kan voor klassen, indien statische opslag van gegevens in geheugen tijdens compilatie (zoals in C) nodig is, het type 'struct' in plaats van 'class' worden gebruikt. Eenvoudige import van modules in C/C++-talen is ook mogelijk, bijvoorbeeld om de functie cos uit de math-bibliotheek te importeren, kan 'from "math.h" import cos' worden gebruikt.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster