Chris Lattner, oludasile ati olori ayaworan ti LLVM ati Eleda ti ede siseto Swift, ati Tim Davis, ori iṣaaju ti awọn iṣẹ akanṣe Google AI gẹgẹbi Tensorflow ati JAX, ṣafihan ede siseto tuntun kan, Mojo, eyiti o ṣajọpọ irọrun ti lilo fun idagbasoke iwadii ati prototyping iyara pẹlu agbara lati ṣe agbekalẹ awọn ọja ipari iṣẹ-giga. Ni igba akọkọ ti waye nipasẹ lilo awọn faramọ sintasi ti awọn Python ede, ati awọn keji nipasẹ awọn agbara lati sakojo sinu ẹrọ koodu, iranti-ailewu ise sise, ati awọn lilo ti hardware isare irinṣẹ.
Ise agbese na wa ni idojukọ lori lilo fun idagbasoke ni aaye ti ẹkọ ẹrọ, ṣugbọn o ṣe afihan bi ede gbogboogbo ti o fa awọn agbara ti Python pẹlu awọn irinṣẹ siseto eto ati pe o dara fun awọn iṣẹ-ṣiṣe ti o pọju. Fun apẹẹrẹ, ede naa wulo si awọn agbegbe bii iširo iṣẹ ṣiṣe giga, ṣiṣe data ati iyipada. Ẹya ti o nifẹ si ti Mojo ni agbara lati pato ohun kikọ emoji "🔥" gẹgẹbi itẹsiwaju fun awọn faili koodu (fun apẹẹrẹ, "helloworld.🔥"), ni afikun si ifaagun ọrọ ".mojo".
Lọwọlọwọ, ede naa wa ni ipele ti idagbasoke aladanla ati pe wiwo ori ayelujara nikan ni a funni fun idanwo. Awọn apejọ ti o yatọ fun ṣiṣe lori awọn eto agbegbe ni a ṣe ileri lati ṣe atẹjade nigbamii, lẹhin gbigba awọn esi lori iṣẹ ti agbegbe oju opo wẹẹbu ibaraenisepo. Koodu orisun fun olupilẹṣẹ, JIT ati awọn idagbasoke miiran ti o ni ibatan si iṣẹ akanṣe naa ni ero lati ṣii lẹhin ti o ti pari faaji inu (apẹẹrẹ fun idagbasoke apẹrẹ iṣẹ kan lẹhin awọn ilẹkun pipade jẹ iranti ti ipele ibẹrẹ ti idagbasoke ti LLVM, Clang ati Swift). Niwọn igba ti Mojo syntax da lori ede Python, ati pe iru eto naa wa nitosi C/C++, ni ọjọ iwaju wọn gbero lati ṣe agbekalẹ awọn irinṣẹ lati ṣe irọrun itumọ awọn iṣẹ akanṣe ti o wa tẹlẹ ti a kọ ni C/C++ ati Python si Mojo, bakanna lati se agbekale arabara ise agbese apapọ Python koodu ati Mojo.
Ise agbese na jẹ apẹrẹ lati kan awọn orisun ohun elo ohun elo ti o wa ti awọn ọna ṣiṣe orisirisi ni ṣiṣe awọn iṣiro. Fun apẹẹrẹ, awọn GPUs, awọn ohun imuyara ikẹkọ ẹrọ amọja, ati awọn adaṣe itọnisọna ero isise (SIMD) le ṣee lo lati ṣiṣe awọn ohun elo Mojo ati ṣe afiwe awọn iṣiro. Awọn idi ti a fun ni idagbasoke ipin lọtọ ti ede Python dipo kikojọpọ iṣẹ iṣapeye CPython ti o wa pẹlu idojukọ lori iṣakojọpọ, isọpọ awọn agbara siseto eto, ati lilo ipilẹ ti o yatọ ipilẹ ti inu ti o fun laaye koodu lati ṣiṣẹ lori awọn GPUs ati ọpọlọpọ hardware accelerators. Sibẹsibẹ, awọn olupilẹṣẹ Mojo pinnu lati wa ni ibamu pẹlu CPython bi o ti ṣee ṣe.
Mojo le ṣee lo mejeeji ni ipo itumọ nipa lilo JIT, ati fun akojọpọ sinu awọn faili ṣiṣe (AOT, niwaju-akoko). Olupilẹṣẹ naa ni awọn imọ-ẹrọ igbalode ti a ṣe sinu fun iṣapeye adaṣe, caching ati akojọpọ pinpin. Awọn ọrọ orisun ni ede Mojo jẹ iyipada si koodu agbedemeji ipele kekere MLIR (Aṣoju agbedemeji Ipele pupọ), ti o dagbasoke nipasẹ iṣẹ akanṣe LLVM ati pese awọn agbara afikun fun mimuṣe sisẹ ti iwọn sisan data. Olupilẹṣẹ gba ọ laaye lati lo ọpọlọpọ awọn ẹhin ẹhin ti o ṣe atilẹyin MLIR lati ṣe agbekalẹ koodu ẹrọ.
Lilo awọn ọna ẹrọ afikun ohun elo lati mu iyara pọ si awọn iṣiro jẹ ki o ṣee ṣe lati ṣaṣeyọri iṣẹ ṣiṣe ti o ga ju awọn ohun elo C / C ++ lakoko awọn iṣiro to lekoko. Fun apẹẹrẹ, nigba idanwo ohun elo kan fun ṣiṣe ipilẹṣẹ Mandelbrot, ohun elo ti a ṣajọpọ ni ede Mojo nigba ti a ṣe ni awọsanma AWS (r7iz.metal-16xl) yipada lati jẹ awọn akoko 6 yiyara ju imuse ni C ++ (0.03 iṣẹju-aaya vs. 0.20 iṣẹju-aaya), ati tun 35 ẹgbẹrun igba yiyara ju ohun elo Python nigba lilo boṣewa CPython 3.10.9 (0.03 iṣẹju-aaya vs. 1027 iṣẹju-aaya) ati awọn akoko 1500 yiyara nigba lilo PYPY (0.03 iṣẹju-aaya vs. 46.1 iṣẹju-aaya). .
Nigbati o ba n ṣe iṣiro iṣẹ ṣiṣe ni aaye ti yanju awọn iṣoro ikẹkọ ẹrọ, AI akopọ Modular Inference Engine, ti a kọ ni ede Mojo, ni akawe si ojutu kan ti o da lori ile-ikawe TensorFlow, ni awọn akoko 3 yiyara nigbati o n ṣiṣẹ awoṣe ede kan lori eto pẹlu ero isise Intel kan, awọn akoko 6.4 yiyara nigba ṣiṣe ipaniyan ti awoṣe iran iṣeduro ati awọn akoko 2.1 yiyara nigba ṣiṣẹ pẹlu awọn awoṣe fun ṣiṣe alaye wiwo. Nigbati o ba lo awọn ilana AMD, awọn anfani nigba lilo Mojo jẹ awọn akoko 3.2, 5 ati 2.2, ati nigba lilo awọn ilana ARM - awọn akoko 5.3, 7.5 ati 1.7, lẹsẹsẹ. Ojutu ti o da lori PyTorch ti wa lẹhin Mojo nipasẹ awọn akoko 1.4, 1.1 ati 1.5 lori awọn CPUs Intel, 2.1, 1.2 ati 1.5 lori awọn CPUs AMD ati awọn akoko 4, 4.3 ati 1.3 lori awọn CPUs ARM.

Ede naa ṣe atilẹyin titẹ aimi ati awọn ẹya iranti-ailewu ti ipele kekere ti o ṣe iranti ti Rust, gẹgẹbi itọka ipasẹ igbesi aye ati oluyẹwo yiya. Ni afikun si awọn ohun elo fun iṣẹ ailewu pẹlu awọn itọka, ede naa tun pese awọn ẹya fun iṣẹ kekere, fun apẹẹrẹ, iraye si taara si iranti ni ipo ailewu nipa lilo iru ijuboluwole, pipe awọn ilana SIMD kọọkan, tabi iwọle si awọn amugbooro ohun elo bii TensorCores ati AMX .

Lati ṣe irọrun iyapa ti Ayebaye ati koodu Python iṣapeye fun awọn iṣẹ pẹlu awọn asọye iru ti o fojuhan fun gbogbo awọn oniyipada, o dabaa lati lo ọrọ-ọrọ lọtọ “fn” dipo “defi”. Bakanna fun awọn kilasi, ti o ba nilo lati gbe data ni iṣiro ni iranti lakoko ikojọpọ (bii ninu C), o le lo iru “struct” dipo “kilasi”. O tun ṣee ṣe lati gbe awọn modulu wọle nirọrun ni awọn ede C / C ++, fun apẹẹrẹ, lati gbe iṣẹ cos wọle lati ile-ikawe math, o le pato “lati “math.h” gbe wọle cos”.
orisun: opennet.ru
