LLVM Creator udvikler nyt Mojo-programmeringssprog

Chris Lattner, grundlægger og chefarkitekt af LLVM og skaberen af ​​Swift-programmeringssproget, og Tim Davis, tidligere leder af Google AI-projekter såsom Tensorflow og JAX, introducerede et nyt Mojo-programmeringssprog, der kombinerer brugervenlighed til R&D og hurtig prototyping med egnethed til højtydende slutprodukter. Den første opnås ved brug af den velkendte syntaks i Python-sproget, og den anden skyldes evnen til at kompilere til maskinkode, mekanismer til sikker hukommelseshåndtering og brugen af ​​værktøjer til hardwareacceleration af beregninger.

Projektet er fokuseret på brug til udvikling af maskinlæring, men præsenteres som et alment sprog, der udvider Python-sprogets muligheder med systemprogrammering og er velegnet til en bred vifte af opgaver. For eksempel er sproget anvendeligt til områder som højtydende computing, databehandling og transformation. Et interessant træk ved Mojo er muligheden for at angive emoji-symbolet "🔥" som en udvidelse til kodefiler (for eksempel "helloworld.🔥"), foruden tekstudvidelsen ".mojo".

I øjeblikket er sproget under intensiv udvikling, og kun online-grænsefladen tilbydes til test. Separate samlinger til at køre på lokale systemer loves at blive offentliggjort senere efter at have modtaget feedback om arbejdet i det interaktive webmiljø. Kildekoden til compileren, JIT og andre udviklinger relateret til projektet er planlagt til at blive åbnet efter designet af den interne arkitektur er afsluttet (udviklingsmodellen af ​​en fungerende prototype bag lukkede døre ligner den indledende fase af udviklingen af ​​LLVM, Clang og Swift). Da Mojos syntaks er baseret på Python og typesystemet er tæt på C/C++, er der planer om i fremtiden at udvikle et værktøjssæt til at lette oversættelsen af ​​eksisterende projekter skrevet i C/C++ og Python til Mojo, samt at udvikle hybride projekter, der kombinerer Python-kode og Mojo.

Projektet er designet til at inddrage hardwareressourcerne fra heterogene systemer, der er tilgængelige i systemet, i beregningerne. For eksempel kan GPU'er, specialiserede maskinlæringsacceleratorer og vektorbehandlingsinstruktioner (SIMD'er) bruges til at køre Mojo-applikationer og parallelisere beregninger. Årsagen til at udvikle en separat delmængde af Python-sproget, frem for at slutte sig til optimeringsarbejdet af den eksisterende CPython, nævnes som et kompileringsfokus, integration af systemprogrammeringsfunktioner og brugen af ​​en fundamentalt anderledes intern arkitektur, der tillader kode at være udføres på GPU'er og diverse hardwareacceleratorer. Samtidig har udviklerne af Mojo til hensigt at overholde kompatibilitet med CPython så meget som muligt.

Mojo kan bruges både i JIT-fortolkningstilstand og til kompilering til eksekverbare filer (AOT, forud for tid). Compileren har indbygget moderne teknologier til automatisk optimering, caching og distribueret kompilering. Kildetekster på Mojo-sproget konverteres til lav-niveau mellemkode MLIR (Multi-Level Intermediate Representation), udviklet af LLVM-projektet og giver yderligere funktioner til optimering af behandlingen af ​​en dataflowgraf. Compileren giver dig mulighed for at bruge forskellige backends, der understøtter MLIR, til at generere maskinkode.

Brugen af ​​yderligere hardwaremekanismer til at fremskynde beregningerne gør det muligt at opnå en ydeevne, der med intensive beregninger overstiger C/C++-applikationer. For eksempel, når man testede en applikation til at generere et Mandelbrot-sæt, var den kompilerede Mojo-applikation, når den blev udført i AWS-skyen (r7iz.metal-16xl), 6 gange hurtigere end C++-implementeringen (0.03 sek. vs. 0.20 sek. .), samt 35 tusind gange hurtigere end en Python-applikation, der bruger standard CPython 3.10.9 (0.03 sek vs 1027 sek) og 1500 gange hurtigere ved at bruge PYPY (0.03 sek vs 46.1 sek).

Ved evaluering af ydeevnen inden for løsning af maskinlæringsproblemer viste Modular Inference Engine AI-stakken skrevet på Mojo-sproget, sammenlignet med en løsning baseret på TensorFlow-biblioteket, sig at være 3 gange hurtigere på et system med en Intel processor ved behandling af en sprogmodel, 6.4 gange hurtigere ved udførelse af anbefalingsgenereringsmodellen og 2.1 gange hurtigere ved arbejde med modeller til behandling af visuel information. Ved brug af AMD-processorer var forstærkningen ved brug af Mojo 3.2, 5 og 2.2 gange, og ved brug af ARM-processorer - henholdsvis 5.3, 7.5 og 1.7 gange. Den PyTorch-baserede løsning haltede efter Mojo med 1.4, 1.1 og 1.5 gange på Intel CPU, 2.1, 1.2 og 1.5 gange på AMD CPU og 4, 4.3 og 1.3 gange på ARM CPU.

LLVM Creator udvikler nyt Mojo-programmeringssprog

Sproget understøtter statisk skrivning og hukommelsessikre funktioner på lavt niveau, der minder om Rust-funktioner, såsom sporing af referencelevetid og variabel lånekontrol (lånekontrol). Ud over midlerne til sikker betjening med pointere giver sproget også funktioner til arbejde på lavt niveau, for eksempel er det muligt at få direkte adgang til hukommelsen i usikker tilstand ved hjælp af Pointer-typen, ringe til individuelle SIMD-instruktioner eller få adgang til hardwareudvidelser som f.eks. som TensorCores og AMX.

LLVM Creator udvikler nyt Mojo-programmeringssprog

For at forenkle adskillelsen af ​​klassisk og optimeret Python-kode for funktioner med eksplicitte typedefinitioner for alle variable, foreslås det at bruge et separat nøgleord "fn" i stedet for "def". Tilsvarende for klasser, hvis du skal statisk pakke data i hukommelsen på kompileringstidspunktet (som i C), kan du i stedet for "class" bruge typen "struct". Det er også muligt blot at importere moduler i C/C++ sprog, for for eksempel at importere cos-funktionen fra matematikbiblioteket, kan du angive "fra "math.h" import cos".

Kilde: opennet.ru

Tilføj en kommentar