LLVM Creator utvikler nytt Mojo-programmeringsspråk

Chris Lattner, grunnlegger og sjefsarkitekt av LLVM og skaper av programmeringsspråket Swift, og Tim Davis, tidligere leder for Google AI-prosjekter som Tensorflow og JAX, introduserte et nytt Mojo-programmeringsspråk som kombinerer brukervennlighet for FoU og rask prototyping med egnethet for sluttprodukter med høy ytelse. Den første oppnås ved bruk av den kjente syntaksen til Python-språket, og den andre er på grunn av evnen til å kompilere til maskinkode, mekanismer for sikker minnehåndtering og bruk av verktøy for maskinvareakselerasjon av beregninger.

Prosjektet er fokusert på bruk for utvikling av maskinlæring, men presenteres som et allmennbruksspråk som utvider mulighetene til Python-språket med systemprogrammering og egner seg for et bredt spekter av oppgaver. For eksempel er språket anvendelig for områder som høyytelses databehandling, databehandling og transformasjon. En interessant funksjon ved Mojo er muligheten til å spesifisere emoji-symbolet "🔥" som en utvidelse for kodefiler (for eksempel "helloworld.🔥"), i tillegg til tekstutvidelsen ".mojo".

Foreløpig er språket under intensiv utvikling og kun det elektroniske grensesnittet tilbys for testing. Separate sammenstillinger som skal kjøres på lokale systemer, loves å bli publisert senere, etter å ha mottatt tilbakemelding på arbeidet med det interaktive nettmiljøet. Kildekoden for kompilatoren, JIT og andre utviklinger relatert til prosjektet er planlagt åpnet etter at utformingen av den interne arkitekturen er fullført (utviklingsmodellen til en fungerende prototype bak lukkede dører ligner den innledende utviklingsfasen av LLVM, Clang og Swift). Siden Mojos syntaks er basert på Python og typesystemet er nær C/C++, er det planer om i fremtiden å utvikle et verktøysett for å lette oversettelsen av eksisterende prosjekter skrevet i C/C++ og Python til Mojo, samt å utvikle hybridprosjekter som kombinerer Python-kode og Mojo.

Prosjektet er designet for å involvere maskinvareressursene til heterogene systemer tilgjengelig i systemet i beregningene. For eksempel kan GPUer, spesialiserte maskinlæringsakseleratorer og vektorbehandlingsinstruksjoner (SIMD-er) brukes til å kjøre Mojo-applikasjoner og parallellisere beregninger. Årsaken til å utvikle et eget undersett av Python-språket, i stedet for å bli med i optimaliseringsarbeidet til den eksisterende CPython, er nevnt som et kompileringsfokus, integrasjon av systemprogrammeringsevner og bruken av en fundamentalt forskjellig intern arkitektur som lar kode utført på GPUer og forskjellige maskinvareakseleratorer. Samtidig har utviklerne av Mojo til hensikt å holde seg til kompatibilitet med CPython så mye som mulig.

Mojo kan brukes både i JIT-tolkningsmodus og for kompilering til kjørbare filer (AOT, på forhånd). Kompilatoren har innebygd moderne teknologi for automatisk optimalisering, caching og distribuert kompilering. Kildetekster på Mojo-språket konverteres til lav-nivå mellomkode MLIR (Multi-Level Intermediate Representation), utviklet av LLVM-prosjektet og gir tilleggsfunksjoner for å optimalisere behandlingen av en dataflytgraf. Kompilatoren lar deg bruke ulike backends som støtter MLIR for å generere maskinkode.

Bruken av ekstra maskinvaremekanismer for å fremskynde beregninger gjør det mulig å oppnå ytelse som, med intensive beregninger, overgår C/C++-applikasjoner. For eksempel, når du tester en applikasjon for å generere et Mandelbrot-sett, var den kompilerte Mojo-applikasjonen, når den ble kjørt i AWS-skyen (r7iz.metal-16xl), 6 ganger raskere enn C++-implementeringen (0.03 sek. vs. 0.20 sek. .), samt 35 tusen ganger raskere enn en Python-applikasjon som bruker CPython 3.10.9 (0.03 sek vs 1027 sek) og 1500 ganger raskere med PYPY (0.03 sek vs 46.1 sek).

Ved evaluering av ytelsen innen løsning av maskinlæringsproblemer viste Modular Inference Engine AI-stabelen skrevet på Mojo-språket, sammenlignet med en løsning basert på TensorFlow-biblioteket, å være 3 ganger raskere på et system med en Intel prosessor ved behandling av en språkmodell, 6.4 ganger raskere ved utførelse av anbefalingsgenereringsmodellen og 2.1 ganger raskere ved arbeid med modeller for prosessering av visuell informasjon. Ved bruk av AMD-prosessorer var gevinsten ved bruk av Mojo 3.2, 5 og 2.2 ganger, og ved bruk av ARM-prosessorer - henholdsvis 5.3, 7.5 og 1.7 ganger. Den PyTorch-baserte løsningen lå bak Mojo med 1.4, 1.1 og 1.5 ganger på Intel CPU, 2.1, 1.2 og 1.5 ganger på AMD CPU og 4, 4.3 og 1.3 ganger på ARM CPU.

LLVM Creator utvikler nytt Mojo-programmeringsspråk

Språket støtter statisk skriving og minnesikre funksjoner på lavt nivå som minner om Rust-funksjoner som referanselevetidssporing og variabel lånekontroll (lånekontroll). I tillegg til midlene for sikker drift med pekere, gir språket også funksjoner for arbeid på lavt nivå, for eksempel er det mulig å få direkte tilgang til minnet i usikker modus ved å bruke Pointer-typen, ringe individuelle SIMD-instruksjoner eller få tilgang til maskinvareutvidelser som f.eks. som TensorCores og AMX.

LLVM Creator utvikler nytt Mojo-programmeringsspråk

For å forenkle separasjonen av klassisk og optimalisert Python-kode for funksjoner med eksplisitte typedefinisjoner for alle variabler, foreslås det å bruke et eget nøkkelord "fn" i stedet for "def". Tilsvarende for klasser, hvis du trenger å pakke data statisk i minnet på kompileringstidspunktet (som i C), i stedet for "class" kan du bruke typen "struct". Det er også mulig å ganske enkelt importere moduler i C / C ++ språk, for eksempel for å importere cos-funksjonen fra matematikkbiblioteket, kan du spesifisere "fra "math.h" import cos".

Kilde: opennet.ru

Legg til en kommentar