LLVM Creator utvecklar nytt Mojo-programmeringsspråk

Chris Lattner, grundare och chefsarkitekt för LLVM och skapare av programmeringsspråket Swift, och Tim Davis, tidigare chef för Google AI-projekt som Tensorflow och JAX, introducerade ett nytt Mojo-programmeringsspråk som kombinerar användarvänlighet för FoU och snabb prototyping med lämplighet för högpresterande slutprodukter. Den första uppnås genom användning av den välbekanta syntaxen för Python-språket, och den andra beror på förmågan att kompilera till maskinkod, mekanismer för säker minneshantering och användningen av verktyg för hårdvaruacceleration av beräkningar.

Projektet är fokuserat på användning för utveckling av maskininlärning, men presenteras som ett allmänt språk som utökar kapaciteten hos Python-språket med systemprogrammering och är lämpligt för ett brett spektrum av uppgifter. Språket är till exempel applicerbart på områden som högpresterande beräkningar, databehandling och transformation. En intressant egenskap hos Mojo är möjligheten att ange emoji-symbolen "🔥" som en förlängning för kodfiler (till exempel "helloworld.🔥"), förutom texttillägget ".mojo".

För närvarande är språket under intensiv utveckling och endast onlinegränssnittet erbjuds för testning. Separata sammanställningar för att köras på lokala system utlovas att publiceras senare, efter att ha fått feedback om arbetet i den interaktiva webbmiljön. Källkoden för kompilatorn, JIT och andra utvecklingar relaterade till projektet är planerade att öppnas efter att designen av den interna arkitekturen är klar (utvecklingsmodellen för en fungerande prototyp bakom stängda dörrar liknar det inledande skedet av utvecklingen av LLVM, Clang och Swift). Eftersom Mojos syntax är baserad på Python och typsystemet ligger nära C/C++ finns det planer på att i framtiden utveckla en verktygslåda för att underlätta översättningen av befintliga projekt skrivna i C/C++ och Python till Mojo, samt att utveckla hybridprojekt som kombinerar Python-kod och Mojo.

Projektet är utformat för att involvera hårdvaruresurserna för heterogena system som finns tillgängliga i systemet i beräkningarna. Till exempel kan GPU:er, specialiserade maskininlärningsacceleratorer och vektorbearbetningsinstruktioner (SIMD) användas för att köra Mojo-applikationer och parallellisera beräkningar. Anledningen till att utveckla en separat delmängd av Python-språket, snarare än att gå med i optimeringsarbetet för det befintliga CPython, nämns som ett kompileringsfokus, integration av systemprogrammeringsmöjligheter och användningen av en fundamentalt annorlunda intern arkitektur som tillåter kod att körs på GPU:er och olika hårdvaruacceleratorer. Samtidigt avser utvecklarna av Mojo att hålla sig till kompatibilitet med CPython så mycket som möjligt.

Mojo kan användas både i JIT-tolkningsläge och för kompilering till körbara filer (AOT, i förväg). Kompilatorn har inbyggd modern teknik för automatisk optimering, cachning och distribuerad kompilering. Källtexter på Mojo-språket konverteras till lågnivå-mellankod MLIR (Multi-Level Intermediate Representation), utvecklad av LLVM-projektet och ger ytterligare funktioner för att optimera bearbetningen av en dataflödesgraf. Kompilatorn låter dig använda olika backends som stöder MLIR för att generera maskinkod.

Användningen av ytterligare hårdvarumekanismer för att påskynda beräkningarna gör det möjligt att uppnå prestanda som med intensiva beräkningar överstiger C/C++-applikationer. Till exempel, när man testade en applikation för att generera en Mandelbrot-uppsättning, var den kompilerade Mojo-applikationen, när den kördes i AWS-molnet (r7iz.metal-16xl), 6 gånger snabbare än C++-implementeringen (0.03 sek. mot 0.20 sek. .), samt 35 tusen gånger snabbare än en Python-applikation som använder standard CPython 3.10.9 (0.03 sek vs 1027 sek) och 1500 gånger snabbare med PYPY (0.03 sek mot 46.1 sek).

När man utvärderade prestandan inom området för att lösa maskininlärningsproblem visade sig Modular Inference Engine AI-stacken skriven på Mojo-språket, jämfört med en lösning baserad på TensorFlow-biblioteket, vara 3 gånger snabbare på ett system med en Intel processor vid bearbetning av en språkmodell, 6.4 gånger snabbare vid exekvering av rekommendationsgenereringsmodellen och 2.1 gånger snabbare vid arbete med modeller för bearbetning av visuell information. Vid användning av AMD-processorer var förstärkningen vid användning av Mojo 3.2, 5 och 2.2 gånger, och vid användning av ARM-processorer - 5.3, 7.5 respektive 1.7 gånger. Den PyTorch-baserade lösningen släpade efter Mojo med 1.4, 1.1 och 1.5 gånger på Intel-processorn, 2.1, 1.2 och 1.5 gånger på AMD-processorn och 4, 4.3 och 1.3 gånger på ARM-processorn.

LLVM Creator utvecklar nytt Mojo-programmeringsspråk

Språket stöder statisk typning och minnessäkra funktioner på låg nivå som påminner om Rust-funktioner som referensspårning av livslängd och variabel lånekontroll (lånekontroll). Förutom medlen för säker drift med pekare, ger språket även funktioner för arbete på låg nivå, till exempel är det möjligt att direkt komma åt minnet i osäkert läge med hjälp av pekare, ringa individuella SIMD-instruktioner eller komma åt hårdvarutillägg som t.ex. som TensorCores och AMX.

LLVM Creator utvecklar nytt Mojo-programmeringsspråk

För att förenkla separationen av klassisk och optimerad Python-kod för funktioner med explicita typdefinitioner för alla variabler, föreslås att man använder ett separat nyckelord "fn" istället för "def". På samma sätt för klasser, om du behöver statiskt packa data i minnet vid kompileringstid (som i C), kan du istället för "klass" använda typen "struct". Det är också möjligt att helt enkelt importera moduler i C/C++-språk, till exempel för att importera cos-funktionen från matematikbiblioteket kan du ange "från "math.h" import cos".

Källa: opennet.ru

Lägg en kommentar