Kriss Latners, LLVM dibinÄtÄjs un galvenais arhitekts un Swift programmÄÅ”anas valodas radÄ«tÄjs, un Tims Deiviss, bijuÅ”ais Google AI projektu, piemÄram, Tensorflow un JAX vadÄ«tÄjs, ieviesa jaunu programmÄÅ”anas valodu Mojo, kas apvieno lietoÅ”anas vienkÄrŔību pÄtniecÄ«bas attÄ«stÄ«bai un Ätra prototipu izstrÄde ar iespÄju izstrÄdÄt augstas veiktspÄjas galaproduktus. Pirmais tiek panÄkts, izmantojot pazÄ«stamo Python valodas sintaksi, bet otrais, izmantojot spÄju kompilÄt maŔīnkodÄ, atmiÅu droÅ”iem mehÄnismiem un aparatÅ«ras paÄtrinÄÅ”anas rÄ«ku izmantoÅ”anu.
Projekts ir vÄrsts uz izmantoÅ”anu attÄ«stÄ«bai maŔīnmÄcÄ«bas jomÄ, bet tiek pasniegts kÄ vispÄrÄja lietojuma valoda, kas paplaÅ”ina Python iespÄjas ar sistÄmu programmÄÅ”anas rÄ«kiem un ir piemÄrota plaÅ”am uzdevumu klÄstam. PiemÄram, valoda ir piemÄrojama tÄdÄs jomÄs kÄ augstas veiktspÄjas skaitļoÅ”ana, datu apstrÄde un transformÄcija. Interesanta Mojo funkcija ir iespÄja papildus teksta paplaÅ”inÄjumam ".mojo" norÄdÄ«t emocijzÄ«mes rakstzÄ«mi "š„" kÄ koda failu paplaÅ”inÄjumu (piemÄram, "helloworld.š„").
Å obrÄ«d valoda ir intensÄ«vas izstrÄdes stadijÄ un testÄÅ”anai tiek piedÄvÄts tikai tieÅ”saistes interfeiss. AtseviŔķus komplektus darbinÄÅ”anai lokÄlajÄs sistÄmÄs sola publicÄt vÄlÄk, saÅemot atsauksmes par interaktÄ«vÄs tÄ«mekļa vides darbÄ«bu. Kompilatora, JIT un citu ar projektu saistÄ«to izstrÄžu pirmkodu plÄnots atvÄrt pÄc iekÅ”ÄjÄs arhitektÅ«ras pabeigÅ”anas (darba prototipa izstrÄdes modelis aiz slÄgtÄm durvÄ«m atgÄdina LLVM, Clang un Swift). TÄ kÄ Mojo sintakse ir balstÄ«ta uz Python valodu, un tipu sistÄma ir tuva C/C++, tad nÄkotnÄ plÄnots izstrÄdÄt rÄ«kus, lai vienkÄrÅ”otu esoÅ”o C/C++ un Python valodÄ rakstÄ«to projektu tulkoÅ”anu uz Mojo, kÄ arÄ« izstrÄdÄt hibrÄ«dus projektus, apvienojot Python kodu un Mojo.
Projekts izstrÄdÄts, lai aprÄÄ·inu veikÅ”anÄ iesaistÄ«tu heterogÄno sistÄmu pieejamos aparatÅ«ras resursus. PiemÄram, GPU, specializÄtus maŔīnmÄcÄ«Å”anÄs paÄtrinÄtÄjus un procesora instrukciju vektorus (SIMD) var izmantot, lai palaistu Mojo lietojumprogrammas un paralÄli veiktu aprÄÄ·inus. Iemesli, kÄdÄļ tika izstrÄdÄta atseviŔķa Python valodas apakÅ”kopa, nevis pievienoÅ”anÄs esoÅ”ajam CPython optimizÄcijas darbam, ietver koncentrÄÅ”anos uz kompilÄciju, sistÄmas programmÄÅ”anas iespÄju integrÄciju un principiÄli atŔķirÄ«gas iekÅ”ÄjÄs arhitektÅ«ras izmantoÅ”anu, kas ļauj kodam darboties ar GPU un dažÄdiem. aparatÅ«ras paÄtrinÄtÄji. TomÄr Mojo izstrÄdÄtÄji plÄno palikt saderÄ«gi ar CPython, cik vien iespÄjams.
Mojo var izmantot gan interpretÄcijas režīmÄ, izmantojot JIT, gan apkopoÅ”anai izpildÄmos failos (AOT, pirms laika). KompilatorÄ ir iebÅ«vÄtas modernas tehnoloÄ£ijas automÄtiskai optimizÄcijai, keÅ”atmiÅai un izplatÄ«tai kompilÄcijai. Avotteksti Mojo valodÄ tiek pÄrveidoti zema lÄ«meÅa starpkodÄ MLIR (Multi-Level Intermediate Representation), kas izstrÄdÄts LLVM projektÄ un nodroÅ”ina papildu iespÄjas datu plÅ«smas grafika apstrÄdes optimizÄÅ”anai. Kompilators ļauj izmantot dažÄdas aizmugursistÄmas, kas atbalsta MLIR, lai Ä£enerÄtu maŔīnas kodu.
Izmantojot papildu aparatÅ«ras mehÄnismus, lai paÄtrinÄtu aprÄÄ·inus, intensÄ«vu aprÄÄ·inu laikÄ ir iespÄjams sasniegt veiktspÄju, kas ir labÄka par C/C++ lietojumprogrammÄm. PiemÄram, testÄjot lietojumprogrammu Mandelbrota kopas Ä£enerÄÅ”anai, kompilÄta lietojumprogramma Mojo valodÄ, kad tÄ tika izpildÄ«ta AWS mÄkonÄ« (r7iz.metal-16xl), izrÄdÄ«jÄs 6 reizes ÄtrÄka nekÄ C++ ievieÅ”ana (0.03 sek. pretstatÄ). . 0.20 sek.), kÄ arÄ« 35 3.10.9 reižu ÄtrÄk nekÄ Python lietojumprogramma, izmantojot standarta CPython 0.03 (1027 sek. pret 1500 sek.) un 0.03 reižu ÄtrÄk, ja tiek izmantota PYPY (46.1 sek. pret XNUMX sek.) .
NovÄrtÄjot veiktspÄju maŔīnmÄcÄ«Å”anÄs problÄmu risinÄÅ”anas jomÄ, AI steck Modular Inference Engine, kas rakstÄ«ts Mojo valodÄ, salÄ«dzinot ar risinÄjumu, kura pamatÄ ir TensorFlow bibliotÄka, bija 3 reizes ÄtrÄks, apstrÄdÄjot valodas modeli sistÄmÄ ar Intel procesors, 6.4 reizes ÄtrÄk, apstrÄdÄjot ieteikumu Ä£enerÄÅ”anas modeļa izpildi, un 2.1 reizi ÄtrÄk, strÄdÄjot ar modeļiem vizuÄlÄs informÄcijas apstrÄdei. Izmantojot AMD procesorus, ieguvumi, izmantojot Mojo, bija 3.2, 5 un 2.2 reizes, bet, izmantojot ARM procesorus - attiecÄ«gi 5.3, 7.5 un 1.7 reizes. Uz PyTorch balstÄ«tais risinÄjums atpalika no Mojo 1.4, 1.1 un 1.5 reizes Intel CPU, 2.1, 1.2 un 1.5 reizes AMD centrÄlajos procesoros un 4, 4.3 un 1.3 reizes ARM procesoros.
Valoda atbalsta statisko rakstÄ«Å”anu un zema lÄ«meÅa atmiÅai droÅ”as funkcijas, kas atgÄdina Rust, piemÄram, atsauces kalpoÅ”anas laika izsekoÅ”anu un aizÅemÅ”anÄs pÄrbaudÄ«tÄju. Papildus iespÄjÄm droÅ”am darbam ar rÄdÄ«tÄjiem, valoda nodroÅ”ina arÄ« funkcijas zema lÄ«meÅa darbam, piemÄram, tieÅ”a piekļuve atmiÅai nedroÅ”Ä režīmÄ, izmantojot Pointer tipu, atseviŔķu SIMD instrukciju izsaukÅ”ana vai piekļuve aparatÅ«ras paplaÅ”inÄjumiem, piemÄram, TensorCores un AMX. .
Lai vienkÄrÅ”otu klasiskÄ un optimizÄtÄ Python koda atdalÄ«Å”anu funkcijÄm ar precÄ«zÄm tipu definÄ«cijÄm visiem mainÄ«gajiem, tiek ierosinÄts izmantot atseviŔķu atslÄgvÄrdu āfnā, nevis ādefā. LÄ«dzÄ«gi klasÄm, ja jums ir nepiecieÅ”ams statiski iesaiÅot datus atmiÅÄ kompilÄcijas laikÄ (kÄ C), varat izmantot veidu āstructā, nevis āclassā. Ir iespÄjams arÄ« vienkÄrÅ”i importÄt moduļus C/C++ valodÄs, piemÄram, lai importÄtu funkciju cos no matemÄtikas bibliotÄkas, var norÄdÄ«t āno āmath.hā import cosā.
Avots: opennet.ru