LLVM Creator arendab uut Mojo programmeerimiskeelt

LLVM-i asutaja ja peaarhitekt ning Swifti programmeerimiskeele looja Chris Lattner ning Google AI projektide (nt Tensorflow ja JAX) endine juht Tim Davis avalikustasid uue programmeerimiskeele Mojo, mis ühendab kasutusmugavuse teadusarenduseks ja kiire prototüüpimise ning sobivuse suure jõudlusega lõpptoodeteks. Esimene saavutatakse Pythoni keele tuttava süntaksi kasutamisega ja teine ​​on tingitud masinkoodiks kompileerimise võimalusest, turvalise mäluhalduse mehhanismidest ja arvutuste riistvaralise kiirendamise tööriistade kasutamisest.

Projekt on keskendunud kasutamisele masinõppe arendamiseks, kuid seda esitletakse üldotstarbelise keelena, mis laiendab Pythoni keele võimalusi süsteemide programmeerimisega ja sobib paljude ülesannete täitmiseks. Näiteks on see keel rakendatav sellistes valdkondades nagu suure jõudlusega andmetöötlus, andmetöötlus ja teisendus. Mojo huvitav omadus on võimalus lisaks tekstilaiendile ".mojo" määrata koodifailide laiendiks emotikonide sümbol "🔥" (näiteks "helloworld.🔥").

Praegu on keelel intensiivne arendus ja testimiseks pakutakse ainult veebiliidest. Eraldi lokaalsetes süsteemides töötavaid kooste lubatakse avaldada hiljem, pärast interaktiivse veebikeskkonna töö kohta tagasiside saamist. Kompilaatori, JIT ja muude projektiga seotud arenduste lähtekood on plaanis avada pärast sisearhitektuuri projekteerimise valmimist (töötava prototüübi arendusmudel kinniste uste taga meenutab LLVM-i, Clangi ja Swifti arenduse algfaasi). Kuna Mojo süntaks põhineb Pythonil ja tüübisüsteem on C/C++-lähedane, on tulevikus plaanis välja töötada tööriistakomplekt, mis hõlbustaks olemasolevate C/C++ ja Pythonis kirjutatud projektide tõlkimist Mojosse, samuti arendada hübriidprojekte, mis kombineerivad Pythonis ja Mojos koodi.

Projekti eesmärk on kaasata arvutustesse süsteemis olemasolevate heterogeensete süsteemide riistvararessursse. Näiteks saab Mojo rakenduste käitamiseks ja arvutuste paralleelseks muutmiseks kasutada GPU-sid, spetsiaalseid masinõppekiirendeid ja vektortöötlusjuhiseid (SIMD). Põhjuseks Pythoni keele eraldi alamhulga väljatöötamiseks, selle asemel, et liituda olemasoleva CPythoni optimeerimistööga, tuuakse välja kompileerimise fookus, süsteemi programmeerimisvõimaluste integreerimine ja põhimõtteliselt erineva sisearhitektuuri kasutamine, mis võimaldab koodi käivitada GPU-del ja erinevatel riistvarakiirenditel. Samal ajal kavatsevad Mojo arendajad võimalikult palju kinni pidada ühilduvusest CPythoniga.

Mojo-d saab kasutada nii JIT-tõlgendusrežiimis kui ka täitmisfailideks (AOT, enne tähtaega) kompileerimiseks. Kompilaatoril on sisseehitatud kaasaegsed tehnoloogiad automaatseks optimeerimiseks, vahemällu salvestamiseks ja hajutatud kompileerimiseks. Mojo keeles olevad lähtetekstid teisendatakse madala taseme keskmiseks koodiks MLIR (Multi-Level Intermediate Representation), mille on välja töötanud LLVM projekt ja mis pakub lisavõimalusi andmevoo graafiku töötlemise optimeerimiseks. Kompilaator võimaldab masinkoodi genereerimiseks kasutada erinevaid MLIR-i toetavaid taustaprogramme.

Täiendavate riistvaramehhanismide kasutamine arvutuste kiirendamiseks võimaldab saavutada jõudlust, mis intensiivsete arvutustega ületab C / C ++ rakendusi. Näiteks Mandelbroti komplekti genereerimiseks mõeldud rakenduse testimisel osutus AWS-i pilves kompileeritud Mojo rakendus (r7iz.metal-16xl) 6 korda kiiremaks kui C ++ teostus (0.03 s vs. 0.20 s) ja ka 35 tuhat korda kiirem kui Pythoni rakendus, kasutades standardset CP-d 3.10.9 P.YP0.03 korda (v.1027 P.YP.s1500 korda). 0.03 sek).

Masinõppe jõudluse hindamisel oli Mojo keeles kirjutatud Modular Inference Engine AI virn võrreldes TensorFlow-põhise lahendusega 3 korda kiirem Inteli protsessoriga süsteemis keelemudeli töötlemisel, 6.4 korda kiirem soovitusmudeli täitmisel ja 2.1 korda kiirem visuaalse teabe töötlemise mudelitega töötamisel. AMD protsessorite kasutamisel oli võimendus Mojo kasutamisel 3.2, 5 ja 2.2 korda ning ARM protsessorite kasutamisel vastavalt 5.3, 7.5 ja 1.7 korda. PyTorchil põhinev lahendus jäi Mojost maha 1.4, 1.1 ja 1.5 korda Inteli protsessoril, 2.1, 1.2 ja 1.5 korda AMD protsessoril ning 4, 4.3 ja 1.3 korda ARM CPU puhul.

LLVM Creator arendab uut Mojo programmeerimiskeelt

Keel toetab staatilist tippimist ja madala mälutasemega funktsioone, mis meenutavad Rusti funktsioone, nagu võrdluse eluea jälgimine ja muutujate laenamine (laenamise kontrollija). Lisaks osutitega ohutu töötamise vahenditele pakub keel ka funktsioone madala tasemega tööks, näiteks on võimalik otse juurdepääsuks ebaturvalises režiimis mällu, kasutades Pointer tüüpi, helistada üksikutele SIMD juhistele või pääseda juurde riistvaralaiendustele nagu TensorCores ja AMX.

LLVM Creator arendab uut Mojo programmeerimiskeelt

Klassikalise ja optimeeritud Pythoni koodi eraldamise lihtsustamiseks kõigi muutujate jaoks selgesõnalise tüübimääratlusega funktsioonide jaoks on tehtud ettepanek kasutada "def" asemel eraldi märksõna "fn". Samamoodi klasside puhul, kui teil on vaja kompileerimise ajal andmeid mällu staatiliselt pakkida (nagu C-s), võite "class" asemel kasutada tüüpi "struct". Mooduleid on võimalik ka lihtsalt importida C / C ++ keeltes, näiteks cos funktsiooni importimiseks matemaatika teegist saab määrata "from "math.h" import cos.

Allikas: opennet.ru

Lisa kommentaar