Crëwr LLVM yn Datblygu Iaith Rhaglennu Mojo Newydd

Cyflwynodd Chris Lattner, sylfaenydd a phrif bensaer LLVM a chrëwr yr iaith raglennu Swift, a Tim Davis, cyn bennaeth prosiectau AI Google fel Tensorflow a JAX, iaith raglennu Mojo newydd sy'n cyfuno rhwyddineb defnydd ar gyfer ymchwil a datblygu a phrototeipio cyflym â addasrwydd ar gyfer cynhyrchion terfynol perfformiad uchel. Cyflawnir y cyntaf trwy ddefnyddio cystrawen gyfarwydd yr iaith Python, ac mae'r ail oherwydd y gallu i lunio cod peiriant, mecanweithiau ar gyfer rheoli cof yn ddiogel, a'r defnydd o offer ar gyfer cyflymu caledwedd cyfrifiadau.

Mae'r prosiect yn canolbwyntio ar ddefnydd ar gyfer datblygu dysgu peirianyddol, ond fe'i cyflwynir fel iaith gyffredinol sy'n ymestyn galluoedd yr iaith Python gyda rhaglennu systemau ac sy'n addas ar gyfer ystod eang o dasgau. Er enghraifft, mae'r iaith yn berthnasol i feysydd fel cyfrifiadura perfformiad uchel, prosesu data a thrawsnewid. Nodwedd ddiddorol o Mojo yw'r gallu i nodi'r symbol emoji "🔥" fel estyniad ar gyfer ffeiliau cod (er enghraifft, "helloworld.🔥"), yn ogystal â'r estyniad testun ".mojo".

Ar hyn o bryd, mae'r iaith yn cael ei datblygu'n ddwys a dim ond y rhyngwyneb ar-lein sy'n cael ei gynnig i'w brofi. Mae gwasanaethau ar wahân i redeg ar systemau lleol yn cael eu addo i gael eu cyhoeddi yn ddiweddarach, ar ôl derbyn adborth ar waith yr amgylchedd gwe rhyngweithiol. Bwriedir agor y cod ffynhonnell ar gyfer y casglwr, JIT a datblygiadau eraill sy'n gysylltiedig â'r prosiect ar ôl i ddyluniad y bensaernïaeth fewnol gael ei chwblhau (mae model datblygu prototeip gweithio y tu ôl i ddrysau caeedig yn debyg i gam datblygu cychwynnol LLVM, Clang a Swift). Gan fod cystrawen Mojo yn seiliedig ar Python a bod y system teip yn agos at C/C++, mae cynlluniau yn y dyfodol i ddatblygu pecyn cymorth i hwyluso cyfieithu prosiectau presennol sydd wedi'u hysgrifennu yn C/C++ a Python i Mojo, yn ogystal â datblygu prosiectau hybrid sy'n cyfuno cod Python a Mojo.

Mae'r prosiect wedi'i gynllunio i gynnwys adnoddau caledwedd systemau heterogenaidd sydd ar gael yn y system yn y cyfrifiadau. Er enghraifft, gellir defnyddio GPUs, cyflymwyr dysgu peiriannau arbenigol, a chyfarwyddiadau prosesu fector (SIMDs) i redeg cymwysiadau Mojo a chyfateb cyfrifiannau. Mae'r rheswm dros ddatblygu is-set ar wahân o'r iaith Python, yn hytrach nag ymuno â gwaith optimeiddio'r CPython presennol, yn cael ei nodi fel ffocws crynhoi, integreiddio galluoedd rhaglennu system, a'r defnydd o bensaernïaeth fewnol sylfaenol wahanol sy'n caniatáu i god fod. gweithredu ar GPUs a chyflymwyr caledwedd amrywiol. Ar yr un pryd, mae datblygwyr Mojo yn bwriadu cadw at gydnawsedd â CPython gymaint ag y bo modd.

Gellir defnyddio Mojo yn y modd dehongli JIT ac ar gyfer crynhoi yn ffeiliau gweithredadwy (AOT, o flaen llaw). Mae'r casglwr wedi ymgorffori technolegau modern ar gyfer optimeiddio awtomatig, caching a chasglu dosbarthedig. Trosir testunau ffynhonnell yn yr iaith Mojo yn god canolradd lefel isel MLIR (Cynrychiolaeth Ganolradd Aml-Lefel), a ddatblygwyd gan y prosiect LLVM ac sy'n darparu nodweddion ychwanegol ar gyfer optimeiddio prosesu graff llif data. Mae'r casglwr yn caniatáu ichi ddefnyddio ôl-daliadau amrywiol sy'n cefnogi MLIR i gynhyrchu cod peiriant.

Mae'r defnydd o fecanweithiau caledwedd ychwanegol i gyflymu cyfrifiadau yn ei gwneud hi'n bosibl cyflawni perfformiad sydd, gyda chyfrifiadau dwys, yn fwy na chymwysiadau C / C ++. Er enghraifft, wrth brofi cymhwysiad i gynhyrchu set Mandelbrot, roedd y cymhwysiad Mojo a luniwyd, pan gafodd ei weithredu yn y cwmwl AWS (r7iz.metal-16xl), 6 gwaith yn gyflymach na gweithrediad C ++ (0.03 eiliad vs. 0.20 eiliad .), yn ogystal â 35 mil gwaith yn gyflymach na chymhwysiad Python gan ddefnyddio stoc CPython 3.10.9 (0.03 sec vs 1027 sec) a 1500 gwaith yn gyflymach gan ddefnyddio PYPY (0.03 eiliad vs 46.1 eiliad).

Wrth werthuso'r perfformiad ym maes datrys problemau dysgu peiriannau, trodd y pentwr Modiwlaidd Inference Engine AI a ysgrifennwyd yn yr iaith Mojo, o'i gymharu â datrysiad yn seiliedig ar lyfrgell TensorFlow, i fod 3 gwaith yn gyflymach ar system gyda Intel prosesydd wrth brosesu model iaith, 6.4 gwaith yn gyflymach wrth weithredu'r model cynhyrchu argymhelliad a 2.1 gwaith yn gyflymach wrth weithio gyda modelau ar gyfer prosesu gwybodaeth weledol. Wrth ddefnyddio proseswyr AMD, y cynnydd wrth ddefnyddio Mojo oedd amseroedd 3.2, 5 a 2.2, ac wrth ddefnyddio proseswyr ARM - 5.3, 7.5 a 1.7 gwaith, yn y drefn honno. Roedd yr ateb seiliedig ar PyTorch yn llusgo y tu ôl i Mojo 1.4, 1.1 a 1.5 gwaith ar y CPU Intel, amseroedd 2.1, 1.2 a 1.5 ar y CPU AMD ac amseroedd 4, 4.3 a 1.3 ar y CPU ARM.

Crëwr LLVM yn Datblygu Iaith Rhaglennu Mojo Newydd

Mae'r iaith yn cefnogi teipio statig a nodweddion cof-diogel lefel isel sy'n atgoffa rhywun o nodweddion Rust fel olrhain oes cyfeirio a gwiriwr benthyca amrywiol (gwiriwr benthyca). Yn ogystal â'r modd o weithredu'n ddiogel gydag awgrymiadau, mae'r iaith hefyd yn darparu nodweddion ar gyfer gwaith lefel isel, er enghraifft, mae'n bosibl cyrchu cof yn uniongyrchol mewn modd anniogel gan ddefnyddio'r math Pointer, ffoniwch gyfarwyddiadau SIMD unigol, neu gyrchu estyniadau caledwedd o'r fath. fel TensorCores ac AMX.

Crëwr LLVM yn Datblygu Iaith Rhaglennu Mojo Newydd

Er mwyn symleiddio'r broses o wahanu cod Python clasurol ac wedi'i optimeiddio ar gyfer swyddogaethau â diffiniadau math penodol ar gyfer pob newidyn, cynigir defnyddio allweddair ar wahân "fn" yn lle "def". Yn yr un modd ar gyfer dosbarthiadau, os oes angen i chi bacio data yn statig yn y cof ar amser llunio (fel yn C), yn lle "dosbarth" gallwch ddefnyddio'r math "struct". Mae hefyd yn bosibl mewnforio modiwlau mewn ieithoedd C / C ++ yn syml, er enghraifft, i fewnforio'r swyddogaeth cos o'r llyfrgell mathemateg, gallwch nodi "o "math.h" mewnforio cos".

Ffynhonnell: opennet.ru

Ychwanegu sylw