Skaberen af LLVM udvikler et nyt programmeringssprog, Mojo

Chris Lattner, grundlægger og hovedarkitekt af LLVM, samt skaberen af programmeringssproget Swift, og Tim Davis, tidligere leder af AI-projekter hos Google som Tensorflow og JAX, præsenterede det nye programmeringssprog Mojo, der kombinerer brugervenlighed til forskningsudvikling og hurtig prototypeudvikling med egnethed til at skabe højtydende slutprodukter. Dette opnås ved at udnytte den velkendte syntaks fra Python, mens det andet opnås gennem muligheder for kompilering til maskinkode, mekanismer for sikker hukommelseshåndtering og aktivering af hardwareacceleration for beregninger.

Projektet er fokuseret på udvikling af maskinlæring, men præsenteres som et generelt formålssprog, der udvider Python-sprogkapaciteterne med systemprogrammering og er passende til en bred vifte af opgaver. Sproget er for eksempel anvendeligt inden for områder som højtydende computing, datahåndtering og -transformering. En interessant funktion ved Mojo er muligheden for at angive emoji-tegnet "🔥" som filudvidelse for koden, for eksempel "helloworld.🔥", udover den tekstlige udvidelse ".mojo".

I øjeblikket er sproget under intensiv udvikling og tilbydes kun gennem en online grænseflade til testning. Adskilte builds til kørsel på lokale systemer forventes offentliggjort senere, efter at der er indhentet feedback på det interaktive webmiljø. Kildekoden til compileren, JIT og andre relaterede projektarbejder planlægges at blive åbnet efter designet af den interne arkitektur er afsluttet (udviklingsmodellen af den arbejdende prototype bag lukkede døre minder om den tidlige fase af udviklingen af LLVM, Clang og Swift). Da Mojo's syntaks er baseret på Python, og typesystemet er tæt på C/C++, planlægges det i fremtiden at udvikle værktøjer til at forenkle overgangen til Mojo fra eksisterende projekter skrevet i C/C++ og Python, samt til udvikling af hybride projekter, der kombinerer kode skrevet i Python og Mojo.

Projektet er designet til at udnytte de eksisterende hardware-ressourcer i heterogene systemer til udførelse af beregninger. For eksempel kan GPU'er, specialiserede acceleratorer til maskinlæring og vektorprocessor-instruktioner (SIMD) anvendes til at køre applikationer skrevet i Mojo og til parallelisering af beregninger. En af årsagerne til udviklingen af et særskilt underensemble af Python-sproget, frem for at optimere det eksisterende CPython, nævnes at være fokus på kompilering, integration af systemprogrammeringsmuligheder samt anvendelse af en fundamentalt anderledes intern arkitektur, der muliggør kørsel af kode på GPU'er og forskellige hardwareacceleratorer. Samtidig har udviklerne af Mojo til hensigt at fastholde kompatibilitet med CPython, så vidt muligt.

Mojo kan anvendes både i fortolkningsmodus med JIT samt til kompilering til eksekverbare filer (AOT, ahead-of-time). Kompilatoren indeholder moderne teknologier til automatisk optimering, caching og distribueret kompilering. Kildekoder i Mojo-sproget konverteres til lavniveau mellem-kode MLIR (Multi-Level Intermediate Representation), som udvikles af LLVM-projektet og giver yderligere muligheder for optimering af behandlingen af datastreams. Kompilatoren tillader brug af forskellige backend-systemer, der understøtter MLIR, til at generere maskinkode.

Brugen af ekstra hardware-mekanismer til at accelerere beregninger gør det muligt at opnå ydeevne, der ved intensive beregninger overgår applikationer skrevet i C/C++. For eksempel viste et testprogram til generering af et Mandelbrot-sæt, at en kompilering af applikationen skrevet i Mojo, når det blev kørt i AWS (r7iz.metal-16xl), var seks gange hurtigere end implementeringen i C++ (0,03 sek. mod 0,20 sek.), samt 35.000 gange hurtigere end applikationen i Python med standard CPython 3.10.9 (0,03 sek. mod 1027 sek.) og 1500 gange hurtigere end ved brug af PYPY (0,03 sek. mod 46,1 sek.).

Ved vurderingen af ydeevne inden for maskinlæringsopgaver viste AI-stakken Modular Inference Engine, skrevet i Mojo, sig at være tre gange hurtigere end løsningen baseret på TensorFlow på et system med Intel-processor ved behandling af sprogmodellen, 6,4 gange hurtigere ved udførelse af anbefalingsmodellen og 2,1 gange hurtigere ved arbejde med modeller til behandling af visuel information. Ved brug af AMD-processorer var gevinsten ved brug af Mojo henholdsvis 3,2, 5 og 2,2 gange, mens den på ARM-processorer var 5,3, 7,5 og 1,7 gange. PyTorch-løsningen var 1,4, 1,1 og 1,5 gange langsommere end Mojo på Intel CPU'er, 2,1, 1,2 og 1,5 gange langsommere på AMD CPU'er, og 4, 4,3 og 1,3 gange langsommere på ARM CPU'er.

Skaberen af LLVM udvikler et nyt programmeringssprog, Mojo

Sproget understøtter statisk typisering og værktøjer til sikker lavniveau-håndtering af hukommelse, der minder om funktioner i sproget Rust, såsom livstidsovervågning af referencer og kontrol af variabellån (borrow checker). Udover værktøjer til sikker håndtering af pointere er der også muligheder for lavniveau-manipulation, såsom direkte adgang til hukommelse i unsafe tilstand ved hjælp af typen Pointer, udførelse af separate SIMD-instruktioner eller adgang til hardwareudvidelser som TensorCores og AMX.

Skaberen af LLVM udvikler et nyt programmeringssprog, Mojo

For at forenkle adskillelsen af klassisk og optimeret Python-kode for funktioner med tydelig typeangivelse for alle variabler foreslås det at bruge et separat nøgleord "fn" i stedet for "def". Tilsvarende kan der, ved behov for statisk pakning af data i hukommelsen under kompilering (som i C), anvendes typen "struct" i stedet for "class". Der er også mulighed for simpel import af moduler på C/C++-sprog, for eksempel for at importere funktionen cos fra math-biblioteket kan man angive "from 'math.h' import cos".

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster