Umdali we-LLVM uthuthukisa ulimi olusha lokuhlela i-Mojo

UChris Lattner, umsunguli kanye nomakhi omkhulu we-LLVM nomsunguli wolimi lwezinhlelo ze-Swift, kanye no-Tim Davis, owayeyinhloko yamaphrojekthi we-Google AI afana ne-Tensorflow ne-JAX, wethula ulimi olusha lokuhlela, i-Mojo, oluhlanganisa ukusebenziseka kalula ekuthuthukiseni ucwaningo kanye i-prototyping esheshayo enamandla okwenza imikhiqizo yokugcina esebenza kahle kakhulu. Eyokuqala ifinyelelwa ngokusebenzisa i-syntax evamile yolimi lwePython, kanti eyesibili itholakala ngokusebenzisa ikhono lokuhlanganisa ikhodi yomshini, izindlela eziphephile kwimemori, kanye nokusetshenziswa kwamathuluzi okusheshisa ihadiwe.

Le phrojekthi igxile ekusetshenziselwe ukuthuthukiswa emkhakheni wokufunda komshini, kodwa yethulwa njengolimi lwenhloso evamile olunweba amandla ePython ngamathuluzi okuhlela amasistimu futhi ifanele imisebenzi eminingi. Isibonelo, ulimi lusebenza ezindaweni ezifana nekhompyutha esebenza kahle kakhulu, ukucubungula idatha kanye noshintsho. Isici esithakazelisayo se-Mojo yikhono lokucacisa uhlamvu lwe-emoji "🔥" njengesandiso samafayela ekhodi (ngokwesibonelo, "helloworld.🔥"), ngaphezu kwesandiso sombhalo ".mojo".

Njengamanje, ulimi lusesigabeni sokuthuthuka okujulile futhi isixhumi esibonakalayo esiku-inthanethi kuphela esinikezwa ukuhlolwa. Imihlangano ehlukene yokusebenza kumasistimu wendawo ithenjiswa ukuthi izoshicilelwa kamuva, ngemva kokuthola impendulo mayelana nokusebenza kwendawo yewebhu esebenzisanayo. Ikhodi yomthombo ye-comiler, i-JIT kanye nezinye intuthuko ehlobene nephrojekthi ihlelelwe ukuvulwa ngemuva kokuqedwa kwezakhiwo zangaphakathi (imodeli yokuthuthukisa i-prototype esebenzayo ngemuva kweminyango evaliwe isikhumbuza isigaba sokuqala sokuthuthukiswa kwe-LLVM, Clang kanye Swift). Njengoba i-syntax ye-Mojo isekelwe olimini lwePython, futhi uhlelo lohlobo luseduze ne-C/C++, esikhathini esizayo bahlela ukuthuthukisa amathuluzi okwenza kube lula ukuhunyushwa kwamaphrojekthi akhona abhalwe ku-C/C++ kanye ne-Python kuya ku-Mojo, kanye ukuthuthukisa amaphrojekthi ayi-hybrid ahlanganisa ikhodi yePython neMojo.

Iphrojekthi yakhelwe ukubandakanya izinsiza zehadiwe ezitholakalayo zamasistimu ahlukahlukene ekwenzeni izibalo. Isibonelo, ama-GPU, izisheshisi zokufunda zomshini eziyisipesheli, namavekhtha okufundisa okucubungula (i-SIMD) angasetshenziswa ukuze aqalise izinhlelo zokusebenza ze-Mojo futhi ahambisane nezibalo. Izizathu ezinikeziwe zokuthuthukisa i-subset ehlukile yolimi lwePython esikhundleni sokujoyina umsebenzi okhona wokuthuthukisa i-CPython zihlanganisa ukugxila ekuhlanganiseni, ukuhlanganiswa kwamakhono okuhlela uhlelo, kanye nokusetshenziswa kwezakhiwo zangaphakathi ezihluke ngokuyisisekelo ezivumela ikhodi ukuthi isebenze kuma-GPU kanye nezinhlobonhlobo ezihlukahlukene. ama-accelerator e-hardware. Kodwa-ke, abathuthukisi be-Mojo bahlose ukuhlala behambisana ne-CPython ngangokunokwenzeka.

I-Mojo ingasetshenziswa kokubili kumodi yokuhumusha kusetshenziswa i-JIT, kanye nasekuhlanganiseni kube amafayela asebenzisekayo (AOT, kusengaphambilini kwesikhathi). I-comiler inobuchwepheshe besimanje obakhelwe ngaphakathi bokwenza kahle okuzenzakalelayo, ukugcinwa kwesikhashana kanye nokuhlanganiswa okusatshalaliswe. Imibhalo ewumthombo ngolimi lwesi-Mojo iguqulelwa ekubeni yikhodi emaphakathi yezinga eliphansi i-MLIR (Ukumela Okuphakathi Kwamazinga Ahlukene), okuthuthukiswe iphrojekthi ye-LLVM nokuhlinzeka ngamakhono engeziwe okuthuthukisa ukucutshungulwa kwegrafu yokugeleza kwedatha. I-comiler ikuvumela ukuthi usebenzise ama-backend ahlukahlukene asekela i-MLIR ukuze ukhiqize ikhodi yomshini.

Ukusebenzisa izindlela zezingxenyekazi zekhompuyutha ezengeziwe ukusheshisa izibalo kwenza kube nokwenzeka ukuzuza ukusebenza okuphakeme kunezinhlelo zokusebenza ze-C/C++ phakathi nokubala okukhulu. Isibonelo, uma kuhlolwa uhlelo lokusebenza lokukhiqiza isethi ye-Mandelbrot, uhlelo lokusebenza oluhlanganisiwe ngolimi lwe-Mojo ngenkathi lusetshenziswa efwini le-AWS (r7iz.metal-16xl) luvele lushesha izikhathi ezingu-6 kunokusetshenziswa ku-C++ (isekhondi elingu-0.03 vs. . 0.20 isekhondi), kanye nezikhathi eziyizinkulungwane ezingu-35 ngokushesha kunohlelo lwePython uma usebenzisa i-CPython 3.10.9 evamile (0.03 sec. vs. 1027 sec.) kanye nezikhathi ezingu-1500 ngokushesha uma usebenzisa i-PYPY (0.03 sec. vs. 46.1 sec.) .

Lapho kuhlolwa ukusebenza emkhakheni wokuxazulula izinkinga zokufunda komshini, i-AI+stack Modular Inference Engine, ebhalwe ngolimi lwesiMojo, uma iqhathaniswa nesixazululo esisekelwe kulabhulali ye-TensorFlow, yayishesha izikhathi ezingu-3 lapho icubungula imodeli yolimi ohlelweni iphrosesa ye-Intel, eshesha izikhathi ezingu-6.4 lapho icubungula ukwenziwa kwemodeli yokukhiqiza izincomo kanye nezikhathi ezisheshayo ezingu-2.1 lapho isebenza namamodeli wokucubungula ulwazi olubukwayo. Uma usebenzisa ama-AMD processors, izinzuzo lapho usebenzisa i-Mojo zaziyizikhathi ezingu-3.2, 5 nezingu-2.2, futhi uma usebenzisa ama-ARM processors - izikhathi ezingu-5.3, 7.5 nezingu-1.7, ngokulandelana. Isixazululo esisekelwe ku-PyTorch sisale ngemuva kwe-Mojo ngo-1.4, 1.1 kanye nezikhathi ezingu-1.5 kuma-Intel CPUs, izikhathi ezingu-2.1, 1.2 nezingu-1.5 kuma-AMD CPU kanye nezikhathi ezingu-4, 4.3 nezingu-1.3 kuma-ARM CPU.

Umdali we-LLVM uthuthukisa ulimi olusha lokuhlela i-Mojo

Ulimi lusekela ukuthayipha okumile kanye nezici eziphephile zenkumbulo ezisezingeni eliphansi okusikhumbuza i-Rust, njengokulandela umkhondo wempilo yonke kanye nesihloli sokuboleka. Ngokungeziwe ezinsizeni zomsebenzi ophephile onezikhombi, ulimi luphinde lunikeze izici zomsebenzi osezingeni eliphansi, isibonelo, ukufinyelela okuqondile kumemori ngemodi engaphephile usebenzisa uhlobo lwe-Pointer, ukushayela imiyalelo ye-SIMD ngayinye, noma ukufinyelela izandiso zehadiwe ezifana ne-TensorCores ne-AMX. .

Umdali we-LLVM uthuthukisa ulimi olusha lokuhlela i-Mojo

Ukwenza kube lula ukuhlukaniswa kwekhodi yePython yakudala neyenziwe kahle yemisebenzi enezincazelo zohlobo olucacile zazo zonke izinto eziguquguqukayo, kuhlongozwa ukuthi kusetshenziswe igama elingukhiye elihlukile elithi “fn” esikhundleni sokuthi “def”. Ngokufanayo emakilasini, uma udinga ukupakisha idatha ngokwezibalo kumemori ngesikhathi sokuhlanganiswa (njengaku-C), ungasebenzisa uhlobo "lwesakhiwo" esikhundleni sokuthi "ikilasi". Kungenzeka futhi ukumane ungenise amamojula ngezilimi ze-C/C++, isibonelo, ukungenisa umsebenzi we-cos kumtapo wezincwadi wezibalo, ungacacisa “kusuka ku-“math.h” import cos”.

Source: opennet.ru

Engeza amazwana