LLVM Creator kehittää uutta Mojo-ohjelmointikieltä

Chris Lattner, LLVM:n perustaja ja pääarkkitehti sekä Swift-ohjelmointikielen luoja, ja Tim Davis, entinen Googlen tekoälyprojektien, kuten Tensorflow ja JAX, johtaja, esittelivät uuden Mojo-ohjelmointikielen, jossa yhdistyvät helppokäyttöisyys T&K-käyttöön ja nopea prototyyppien tekeminen. soveltuvuus korkean suorituskyvyn lopputuotteisiin. Ensimmäinen saavutetaan käyttämällä Python-kielen tuttua syntaksia, ja toinen johtuu kyvystä kääntää konekoodiksi, turvallisen muistinhallinnan mekanismeista ja työkalujen käytöstä laskelmien laitteistokiihdytykseen.

Projekti on keskittynyt koneoppimisen kehittämiseen, mutta esitellään yleiskäyttöisenä kielenä, joka laajentaa Python-kielen ominaisuuksia järjestelmäohjelmoinnilla ja soveltuu monenlaisiin tehtäviin. Kieli soveltuu esimerkiksi korkean suorituskyvyn laskemiseen, tietojenkäsittelyyn ja muuntamiseen. Mielenkiintoinen Mojo-ominaisuus on kyky määrittää emoji-symboli "🔥" kooditiedostojen (esim. "helloworld.🔥") laajennukseksi tekstitunnisteen ".mojo" lisäksi.

Tällä hetkellä kieltä kehitetään intensiivisesti ja vain verkkokäyttöliittymää tarjotaan testattavaksi. Erilliset paikallisissa järjestelmissä ajettavat kokoonpanot luvataan julkaista myöhemmin, saatuaan palautetta interaktiivisen verkkoympäristön toiminnasta. Kääntäjän, JIT:n ja muiden projektiin liittyvien kehityshankkeiden lähdekoodi suunnitellaan avautuvan sisäisen arkkitehtuurin suunnittelun valmistumisen jälkeen (suljettujen ovien takana toimivan prototyypin kehitysmalli muistuttaa LLVM:n, Clangin alkukehitysvaihetta ja Swift). Koska Mojon syntaksi perustuu Pythoniin ja tyyppijärjestelmä on lähellä C/C++:aa, on tulevaisuudessa suunnitelmissa kehittää työkalupakki, joka helpottaa olemassa olevien C/C++- ja Python-kielellä kirjoitettujen projektien kääntämistä Mojolle sekä kehittää hybridiprojektit, jotka yhdistävät Python-koodin ja Mojon.

Hanke on suunniteltu ottamaan laskelmiin mukaan järjestelmässä olevien heterogeenisten järjestelmien laitteistoresurssit. Esimerkiksi GPU:ita, erikoistuneita koneoppimiskiihdyttimiä ja vektorinkäsittelyohjeita (SIMD) voidaan käyttää Mojo-sovellusten ajamiseen ja laskelmien rinnakkaisemiseen. Syynä Python-kielen erillisen osajoukon kehittämiseen sen sijaan, että liittyisi olemassa olevan CPythonin optimointityöhön, mainitaan käännöksen painopiste, järjestelmän ohjelmointiominaisuuksien integrointi ja olennaisesti erilaisen sisäisen arkkitehtuurin käyttö, joka mahdollistaa koodin tekemisen. suoritetaan GPU:illa ja erilaisilla laitteistokiihdyttimillä. Samaan aikaan Mojo-kehittäjät aikovat noudattaa yhteensopivuutta CPythonin kanssa niin paljon kuin mahdollista.

Mojoa voidaan käyttää sekä JIT-tulkintatilassa että kääntämiseen suoritettaviksi tiedostoiksi (AOT, etuajassa). Kääntäjässä on sisäänrakennetut modernit tekniikat automaattista optimointia, välimuistia ja hajautettua kääntämistä varten. Mojo-kieliset lähdetekstit muunnetaan LLVM-projektin kehittämäksi matalan tason keskitason koodiksi MLIR (Multi-Level Intermediate Representation), joka tarjoaa lisäominaisuuksia tietovirtakaavion käsittelyn optimointiin. Kääntäjän avulla voit käyttää erilaisia ​​MLIR:ää tukevia taustaohjelmia konekoodin luomiseen.

Lisälaitteistomekanismien käyttö laskelmien nopeuttamiseksi mahdollistaa suorituskyvyn, joka intensiivisellä laskennalla ylittää C / C ++ -sovellukset. Esimerkiksi testattaessa sovellusta Mandelbrot-joukon luomiseksi, käännetty Mojo-sovellus oli suoritettuna AWS-pilvessä (r7iz.metal-16xl) 6 kertaa nopeampi kuin C ++ -toteutus (0.03 s vs. 0.20 s). .), sekä 35 tuhatta kertaa nopeampi kuin Python-sovellus, joka käyttää CPython 3.10.9:ää (0.03 s vs 1027 s) ja 1500 kertaa nopeampi PYPY:llä (0.03 s vs 46.1 s).

Kun arvioitiin suorituskykyä koneoppimisongelmien ratkaisemisessa, Mojo-kielellä kirjoitettu Modular Inference Engine AI-pino osoittautui TensorFlow-kirjastoon perustuvaan ratkaisuun verrattuna 3 kertaa nopeammaksi Intel-järjestelmässä. prosessori kielimallia käsiteltäessä, 6.4 kertaa nopeampi suositusten luontimallin suorittamisessa ja 2.1 kertaa nopeampi visuaalisen tiedon käsittelyn mallien kanssa. AMD-prosessoreja käytettäessä vahvistus Mojoa käytettäessä oli 3.2-, 5- ja 2.2-kertainen ja ARM-prosessoreja käytettäessä - 5.3-, 7.5- ja 1.7-kertainen. PyTorch-pohjainen ratkaisu jäi Mojosta 1.4-, 1.1- ja 1.5-kertaisesti Intel-suorittimessa, 2.1-, 1.2- ja 1.5-kertainen AMD-suorittimessa ja 4, 4.3- ja 1.3-kertainen ARM-suorittimessa.

LLVM Creator kehittää uutta Mojo-ohjelmointikieltä

Kieli tukee staattista kirjoittamista ja matalan tason muistin turvallisia ominaisuuksia, jotka muistuttavat Rust-ominaisuuksia, kuten viitekäyttöajan seurantaa ja muuttujan lainauksen tarkistusta (lainaustarkistus). Turvallisen osoittimien käytön lisäksi kieli tarjoaa ominaisuuksia matalan tason työskentelyyn, esimerkiksi muistiin pääsee suoraan vaarallisessa tilassa Pointer-tyypin avulla, soittaa yksittäisiä SIMD-ohjeita tai käyttää laitteistolaajennuksia, kuten kuten TensorCores ja AMX.

LLVM Creator kehittää uutta Mojo-ohjelmointikieltä

Klassisen ja optimoidun Python-koodin erottamisen yksinkertaistamiseksi funktioille, joissa on eksplisiittiset tyyppimääritykset kaikille muuttujille, ehdotetaan käytettäväksi erillistä avainsanaa "fn" sanan "def" sijaan. Samoin luokissa, jos sinun on pakattava staattisesti tietoja muistiin käännöshetkellä (kuten C:ssä), voit käyttää "class":n sijaan tyyppiä "struct". On myös mahdollista yksinkertaisesti tuoda moduuleja C / C ++ -kielillä, esimerkiksi tuodaksesi cos-funktion matemaattisesta kirjastosta, voit määrittää "from "math.h" import cos.

Lähde: opennet.ru

Lisää kommentti