Chris Lattner, damezrîner û serekê mîmarê LLVM û afirînerê zimanê bernamenûsê yê Swift, û Tim Davis, serokê berê yê projeyên Google AI-ê yên wekî Tensorflow û JAX, zimanek bernamenûsê yê nû, Mojo, destnîşan kirin, ku hêsan karanîna ji bo pêşkeftina lêkolînê û prototîpkirina bilez bi potansiyela formulekirina hilberên dawîn ên performansa bilind. Ya yekem bi karanîna hevoksaziya naskirî ya zimanê Python, û ya duyemîn jî bi şiyana berhevkirina koda makîneyê, mekanîzmayên ewledar ên bîranînê, û karanîna amûrên bilezkirina hardware tê bidestxistin.
Proje li ser karanîna ji bo pêşkeftinê di warê fêrbûna makîneyê de ye, lê wekî zimanek gelemperî tête pêşkêş kirin ku kapasîteyên Python bi amûrên bernamesaziya pergalê re dirêj dike û ji bo cûrbecûr karan maqûl e. Mînakî, ziman ji bo qadên wekî hesabkirina performansa bilind, hilberandina daneyan û veguherînê tê sepandin. Taybetmendiyek balkêş a Mojo ev e ku karektera emoji "🔥" wekî pêvekek ji bo pelên kodê diyar bike (mînak, "helloworld.🔥"), ji bilî pêveka nivîsê ".mojo".
Heya nuha, ziman di qonaxa pêşkeftina zirav de ye û tenê pêwendiya serhêl ji bo ceribandinê tê pêşkêş kirin. Meclîsên veqetandî yên ji bo xebitandina pergalên herêmî têne soz kirin ku paşê bêne weşandin, piştî wergirtina bertekên li ser xebata hawîrdora tevna înteraktîf. Koda çavkaniyê ji bo berhevkar, JIT û pêşkeftinên din ên têkildarî projeyê tê plan kirin ku piştî ku mîmariya hundurîn qediya were vekirin (modela ji bo pêşxistina prototîpa xebatê ya li pişt deriyên girtî qonaxa destpêkê ya pêşkeftina LLVM, Clang û bi bîr tîne. Swift). Ji ber ku hevoksaziya Mojo li ser bingeha zimanê Python-ê ye, û pergala tîpê nêzî C/C++ ye, di pêşerojê de ew plan dikin ku amûran pêşve bibin da ku wergera projeyên heyî yên ku bi C/C++ û Python ji Mojo re hatine nivîsandin hêsan bikin, û her weha ji bo pêşvebirina projeyên hybrid ku koda Python û Mojo bihevre dikin.
Proje ji bo tevlêkirina çavkaniyên hardware yên heyî yên pergalên heterojen di pêkanîna hesaban de hatî çêkirin. Mînakî, GPU, bilezkerên fêrbûna makîneya pispor, û vektorên rêwerzên pêvajoyê (SIMD) dikarin werin bikar anîn da ku sepanên Mojo bimeşînin û hesabên paralel bikin. Sedemên ku ji bo pêşvebirina binkeyek cihêreng a zimanê Python ji bilî tevlêbûna xebata xweşbînkirina CPython-ê ya heyî, balê dikişîne ser berhevkirin, yekkirina kapasîteyên bernamesaziya pergalê, û karanîna mîmariyek navxweyî ya bingehîn a cihêreng ku dihêle kod li ser GPU û cûrbecûr bixebite. accelerators hardware. Lêbelê, pêşdebirên Mojo armanc dikin ku bi qasî ku gengaz be bi CPython re hevaheng bimînin.
Mojo dikare hem di moda şîrovekirinê de bi karanîna JIT-ê, hem jî ji bo berhevkirina pelên darvekirî (AOT, pêş-dem) were bikar anîn. Berhevkar xwedan teknolojiyên nûjen ên ji bo xweşbînkirina otomatîkî, cachkirin û berhevkirina belavkirî ye. Nivîsarên çavkaniyê yên bi zimanê Mojo têne veguheztin koda navîn-asta nizm MLIR (Nûnerê Navbera Pir-Asta), ku ji hêla projeya LLVM ve hatî pêşve xistin û kapasîteyên din peyda dike ji bo xweşbînkirina grafika herikîna daneyê. Berhevkar destûrê dide te ku hûn piştgirên cihêreng ên ku MLIR piştgirî dikin bikar bînin da ku koda makîneyê biafirînin.
Bikaranîna mekanîzmayên hardware yên zêde ji bo bilezkirina hesaban dihêle ku meriv di dema hesabên zirav de performansa ku ji serîlêdanên C/C++ bilindtir e bigihîje. Mînakî, dema ceribandina serîlêdanek ji bo hilberîna koma Mandelbrot, serîlêdana berhevkirî ya bi zimanê Mojo dema ku di ewrê AWS-ê de (r7iz.metal-16xl) hate darve kirin, derket holê ku 6 qat ji pêkanîna di C++ (0.03 sek. li hember 0.20 saniye, û her weha 35 hezar car zûtir ji serîlêdana Python gava ku CPython 3.10.9 standard bikar tîne (0.03 saniye ber 1027 saniye) û 1500 car zûtir dema ku PYPY bikar tîne (0.03 saniye beramber 46.1 saniye). .
Dema ku performansa di warê çareserkirina pirsgirêkên fêrbûna makîneyê de dinirxîne, Motora Enfermana Modular a AI-stack, ku bi zimanê Mojo hatî nivîsandin, li gorî çareseriyek li ser bingeha pirtûkxaneya TensorFlow, dema ku modelek zimanî li ser pergalek bi hilberandin 3 carî zûtir bû. pêvajoyek Intel, 6.4 carî zûtir dema ku pêkanîna modela hilberîna pêşnûmeyê hildiweşîne û 2.1 carî zûtir dema ku bi modelan re dixebitin ji bo hilberandina agahdariya dîtbar. Dema ku pêvajoyên AMD-ê bikar tînin, dema ku Mojo bikar tînin 3.2, 5 û 2.2 car, û dema ku pêvajoyên ARM-ê bikar tînin - bi rêzê 5.3, 7.5 û 1.7 qat bûn. Çareseriya bingeha PyTorch-ê li ser CPU-yên Intel-ê 1.4, 1.1 û 1.5 carî, li CPU-yên AMD-ê 2.1, 1.2 û 1.5 carî û li ser CPU-yên ARM-ê 4, 4.3 û 1.3 carî li paş Mojo-yê XNUMX, XNUMX û XNUMX carî paşde ma.

Ziman tîpkirina statîk û taybetmendiyên kêm-ewle yên bîranînê yên ku Rust tîne bîra xwe, wekî şopandina jiyana referansê û kontrolkirina deyn piştgirî dike. Ji bilî tesîsên ji bo xebata ewledar a bi nîşankeran re, ziman ji bo xebata nizm jî taybetmendiyan peyda dike, mînakî, rasterast gihîştina bîranînê di moda neewle de bi karanîna tîpa Pointer, gazîkirina rêwerzên SIMD yên kesane, an gihîştina pêvekên hardware yên wekî TensorCores û AMX. .

Ji bo hêsankirina veqetandina koda Python a klasîk û xweşbînkirî ya ji bo fonksiyonên bi pênaseyên cûrbecûr yên eşkere ji bo hemî guhêrbaran, tê pêşniyar kirin ku li şûna "def" peyva sereke "fn" cuda were bikar anîn. Bi heman awayî ji bo dersan, heke hûn hewce ne ku di dema berhevkirinê de daneyan di bîranînê de bi statîkî pak bikin (wek C), hûn dikarin li şûna "class" celebê "struct" bikar bînin. Di heman demê de gengaz e ku meriv bi tenê modulên bi zimanên C/C++ îtxal bike, mînakî, ji bo ku fonksiyona cos-ê ji pirtûkxaneya matematîkê derxîne, hûn dikarin "ji "math.h" import cos diyar bikin.
Source: opennet.ru
