LLVM Creator razvija novi programski jezik Mojo

Chris Lattner, osnivač i glavni arhitekt LLVM-a i kreator programskog jezika Swift, i Tim Davis, bivši voditelj Googleovih AI projekata kao što su Tensorflow i JAX, predstavili su novi programski jezik Mojo koji kombinira jednostavnost korištenja za istraživanje i razvoj i brzu izradu prototipova s prikladnost za krajnje proizvode visokih performansi. Prvo se postiže korištenjem poznate sintakse jezika Python, a drugo mogućnošću prevođenja u strojni kod, mehanizmima za sigurno upravljanje memorijom i korištenjem alata za hardversko ubrzanje izračuna.

Projekt je usmjeren na korištenje za razvoj strojnog učenja, ali je predstavljen kao jezik opće namjene koji proširuje mogućnosti jezika Python sa sistemskim programiranjem i prikladan je za širok raspon zadataka. Na primjer, jezik je primjenjiv na područja kao što su računalstvo visokih performansi, obrada i transformacija podataka. Zanimljiva značajka Mojoa je mogućnost određivanja emoji simbola "🔥" kao ekstenzije za kodne datoteke (na primjer, "helloworld.🔥"), uz tekstualnu ekstenziju ".mojo".

Trenutno je jezik u intenzivnom razvoju i samo je online sučelje ponuđeno za testiranje. Zasebni sklopovi za rad na lokalnim sustavima obećani su da će biti objavljeni kasnije, nakon što dobiju povratne informacije o radu interaktivnog web okruženja. Izvorni kod za kompajler, JIT i druge razvoje povezane s projektom planira se otvoriti nakon što se završi dizajn interne arhitekture (razvojni model radnog prototipa iza zatvorenih vrata nalikuje početnoj fazi razvoja LLVM, Clang i Swift). Budući da se Mojo sintaksa temelji na Pythonu, a sustav tipova je blizak C/C++, u budućnosti se planira razviti alat za olakšavanje prevođenja postojećih projekata napisanih u C/C++ i Pythonu u Mojo, kao i za razvoj hibridni projekti koji kombiniraju Python kod i Mojo.

Projekt je osmišljen tako da u izračune uključi hardverske resurse heterogenih sustava dostupnih u sustavu. Na primjer, GPU-ovi, specijalizirani akceleratori strojnog učenja i instrukcije za vektorsku obradu (SIMD-ovi) mogu se koristiti za pokretanje Mojo aplikacija i paraleliziranje izračuna. Razlog za razvoj zasebnog podskupa jezika Python, umjesto pridruživanja optimizacijskom radu postojećeg CPythona, navodi se kao fokus na kompilaciju, integraciju mogućnosti programiranja sustava i korištenje fundamentalno različite interne arhitekture koja omogućuje da se kod izvršavaju se na GPU-ovima i raznim hardverskim akceleratorima. Istodobno, programeri Mojoa namjeravaju se što više pridržavati kompatibilnosti s CPythonom.

Mojo se može koristiti iu načinu JIT interpretacije i za kompilaciju u izvršne datoteke (AOT, unaprijed). Kompajler ima ugrađene moderne tehnologije za automatsku optimizaciju, predmemoriju i distribuiranu kompilaciju. Izvorni tekstovi u jeziku Mojo pretvaraju se u srednji kod niske razine MLIR (Multi-Level Intermediate Representation), koji je razvio LLVM projekt i pruža dodatne značajke za optimizaciju obrade grafa protoka podataka. Kompajler vam omogućuje korištenje različitih pozadina koje podržavaju MLIR za generiranje strojnog koda.

Korištenje dodatnih hardverskih mehanizama za ubrzavanje izračuna omogućuje postizanje performansi koje, uz intenzivne proračune, premašuju C / C ++ aplikacije. Na primjer, prilikom testiranja aplikacije za generiranje Mandelbrot skupa, kompajlirana Mojo aplikacija, kada je izvršena u AWS oblaku (r7iz.metal-16xl), bila je 6 puta brža od C ++ implementacije (0.03 s u odnosu na 0.20 s .), kao i 35 tisuća puta brži od Python aplikacije koja koristi standardni CPython 3.10.9 (0.03 s u odnosu na 1027 s) i 1500 puta brži upotrebom PYPY (0.03 s u odnosu na 46.1 s).

Prilikom ocjenjivanja performansi u području rješavanja problema strojnog učenja, Modular Inference Engine AI stack napisan u jeziku Mojo, u usporedbi s rješenjem temeljenim na biblioteci TensorFlow, pokazao se 3 puta bržim na sustavu s Intelom procesora pri obradi jezičnog modela, 6.4 puta brže pri izvođenju modela generiranja preporuka i 2.1 puta brže pri radu s modelima za obradu vizualnih informacija. Pri korištenju AMD procesora dobitak pri korištenju Mojo bio je 3.2, 5 i 2.2 puta, a pri korištenju ARM procesora - 5.3, 7.5 odnosno 1.7 puta. Rješenje temeljeno na PyTorchu zaostajalo je za Mojom 1.4, 1.1 i 1.5 puta na Intel CPU-u, 2.1, 1.2 i 1.5 puta na AMD CPU-u i 4, 4.3 i 1.3 puta na ARM CPU-u.

LLVM Creator razvija novi programski jezik Mojo

Jezik podržava statičko tipkanje i značajke niske razine za sigurnost memorije koje podsjećaju na Rustove značajke kao što su praćenje životnog vijeka reference i provjera posuđivanja varijabli (borrow checker). Uz sredstva za siguran rad s pokazivačima, jezik također nudi značajke za rad na niskoj razini, na primjer, moguće je izravno pristupiti memoriji u nesigurnom načinu rada koristeći vrstu pokazivača, pozvati pojedinačne SIMD upute ili pristupiti hardverskim proširenjima kao što su kao TensorCores i AMX.

LLVM Creator razvija novi programski jezik Mojo

Kako bi se pojednostavilo odvajanje klasičnog i optimiziranog Python koda za funkcije s eksplicitnim definicijama tipa za sve varijable, predlaže se korištenje zasebne ključne riječi "fn" umjesto "def". Slično za klase, ako trebate statički upakirati podatke u memoriju tijekom kompilacije (kao u C-u), umjesto "class" možete koristiti tip "struct". Također je moguće jednostavno uvesti module u C / C ++ jezicima, na primjer, za uvoz funkcije cos iz matematičke biblioteke, možete navesti "iz "math.h" import cos".

Izvor: opennet.ru

Dodajte komentar