Cruthaiche LLVM a’ leasachadh cànan prògramadh Mojo ùr

Thug Chris Lattner, stèidheadair agus prìomh ailtire LLVM agus neach-cruthachaidh cànan prògramadh Swift, agus Tim Davis, a bha na cheannard air pròiseactan AI Google leithid Tensorflow agus JAX, cànan prògramadh Mojo ùr a-steach a tha a’ cothlamadh furasta a chleachdadh airson R&D agus prototyping luath le freagarrachd airson toraidhean deireannach àrd-choileanadh. Tha a 'chiad fhear air a choileanadh tro bhith a' cleachdadh co-chòrdadh eòlach cànan Python, agus tha an dàrna fear mar thoradh air a 'chomas a bhith a' cur ri chèile gu còd inneal, dòighean airson riaghladh cuimhne sàbhailte, agus cleachdadh innealan airson luathachadh bathar-cruaidh àireamhachadh.

Tha am pròiseact ag amas air cleachdadh airson leasachadh ionnsachadh innealan, ach tha e air a thaisbeanadh mar chànan coitcheann a leudaicheas comasan cànan Python le prògramadh shiostaman agus a tha freagarrach airson raon farsaing de ghnìomhan. Mar eisimpleir, tha an cànan buntainneach do raointean leithid coimpiutaireachd àrd-choileanadh, giollachd dàta agus cruth-atharrachadh. Is e feart inntinneach de Mojo an comas an samhla emoji "🔥" a shònrachadh mar leudachadh airson faidhlichean còd (mar eisimpleir, "helloworld.🔥"), a bharrachd air an leudachadh teacsa ".mojo".

An-dràsta, tha an cànan fo leasachadh dian agus chan eil ach an eadar-aghaidh air-loidhne air a thabhann airson deuchainn. Thathas a’ gealltainn gun tèid co-chruinneachaidhean fa leth a ruith air siostaman ionadail fhoillseachadh nas fhaide air adhart, às deidh dhaibh fios fhaighinn air ais mu obair na h-àrainneachd lìn eadar-ghnìomhach. Thathas an dùil an còd stòr airson an neach-cruinneachaidh, JIT agus leasachaidhean eile co-cheangailte ris a’ phròiseact fhosgladh às deidh dealbhadh an ailtireachd a-staigh a chrìochnachadh (tha modal leasachaidh prototype obrach air cùl dhorsan dùinte coltach ris a’ chiad ìre de leasachadh LLVM, Clang. agus Swift). Leis gu bheil co-chòrdadh Mojo stèidhichte air Python agus gu bheil an siostam seòrsa faisg air C / C ++, tha planaichean ann san àm ri teachd inneal a leasachadh gus eadar-theangachadh phròiseactan gnàthaichte sgrìobhte ann an C / C ++ agus Python gu Mojo a dhèanamh comasach, a bharrachd air a leasachadh. pròiseactan tar-chinealach a tha a’ cothlamadh còd Python. agus Mojo.

Tha am pròiseact air a dhealbhadh gus na goireasan bathar-cruaidh de shiostaman heterogeneous a tha rim faighinn san t-siostam a thoirt a-steach don àireamhachadh. Mar eisimpleir, faodar GPUn, luathaichean ionnsachaidh inneal sònraichte, agus stiùireadh giollachd vector (SIMDn) a chleachdadh gus tagraidhean Mojo a ruith agus gus àireamhachadh a cho-thaobhadh. Tha an adhbhar airson fo-sheata fa leth den chànan Python a leasachadh, seach a bhith a’ tighinn còmhla ri obair optimization an CPython a th’ ann mar-thà, air ainmeachadh mar fhòcas cruinneachaidh, amalachadh comasan prògramadh siostaim, agus cleachdadh ailtireachd a-staigh a tha gu bunaiteach eadar-dhealaichte a leigeas le còd a bhith. air a chuir gu bàs air GPUs agus diofar luathadairean bathar-cruaidh. Aig an aon àm, tha luchd-leasachaidh Mojo an dùil cumail ri co-chòrdalachd le CPython cho mòr ‘s as urrainn.

Faodar Mojo a chleachdadh an dà chuid ann am modh eadar-mhìneachaidh JIT agus airson a chur ri chèile ann am faidhlichean so-ghnìomhaichte (AOT, ro-làimh). Tha teicneòlasan ùr-nodha aig an inneal-cruinneachaidh airson optimization fèin-ghluasadach, caching agus cruinneachadh sgaoilte. Tha teacsaichean stòr anns a’ chànan Mojo air an tionndadh gu còd eadar-mheadhanach ìre ìosal MLIR (Riochdachadh Eadar-mheadhanach Ioma-ìre), air a leasachadh leis a’ phròiseact LLVM agus a’ toirt seachad feartan a bharrachd airson a bhith a’ giullachd graf sruth dàta. Leigidh an compiler leat diofar backends a chleachdadh a bheir taic do MLIR gus còd inneal a ghineadh.

Tha cleachdadh uidheamachdan bathar-cruaidh a bharrachd gus àireamhachadh a luathachadh ga dhèanamh comasach coileanadh a choileanadh a tha, le àireamhachadh dian, nas àirde na tagraidhean C / C ++. Mar eisimpleir, nuair a bhathas a’ dèanamh deuchainn air tagradh gus seata Mandelbrot a ghineadh, bha an tagradh Mojo a chaidh a chur ri chèile, nuair a chaidh a chur gu bàs san sgòth AWS (r7iz.metal-16xl), 6 tursan nas luaithe na buileachadh C ++ (0.03 diog. vs 0.20 diog). .), A bharrachd air 35 mìle uair nas luaithe na tagradh Python a’ cleachdadh stoc CPython 3.10.9 (0.03 sec vs 1027 sec) agus 1500 uair nas luaithe a’ cleachdadh PYPY (0.03 sec vs 46.1 sec).

Nuair a bhathas a’ measadh coileanadh ann an raon fuasgladh dhuilgheadasan ionnsachaidh innealan, thionndaidh an stac Modular Inference Engine AI a chaidh a sgrìobhadh ann an cànan Mojo, an taca ri fuasgladh stèidhichte air leabharlann TensorFlow, a-mach gu bhith 3 tursan nas luaithe air siostam le Intel pròiseasar nuair a bhios tu a’ giullachd modail cànain, 6.4 tursan nas luaithe nuair a thèid am modal gineadh molaidh a chur an gnìomh agus 2.1 uair nas luaithe nuair a bhios tu ag obair le modalan airson fiosrachadh lèirsinneach a ghiullachd. Nuair a bha thu a ’cleachdadh pròiseasairean AMD, b’ e a ’bhuannachd nuair a bha thu a’ cleachdadh Mojo amannan 3.2, 5 agus 2.2, agus nuair a bha iad a ’cleachdadh pròiseasairean ARM - amannan 5.3, 7.5 agus 1.7, fa leth. Chaidh am fuasgladh stèidhichte air PyTorch sìos air cùl Mojo le amannan 1.4, 1.1 agus 1.5 air an Intel CPU, 2.1, 1.2 agus 1.5 amannan air an AMD CPU agus amannan 4, 4.3 agus 1.3 air an ARM CPU.

Cruthaiche LLVM a’ leasachadh cànan prògramadh Mojo ùr

Tha an cànan a’ toirt taic do thaidhpeadh statach agus feartan cuimhne-sàbhailte aig ìre ìosal a tha coltach ri feartan Rust leithid tracadh fad-beatha iomraidh agus dearbhadair iasad caochlaideach (dearcan iasad). A bharrachd air na dòighean airson obrachadh sàbhailte le comharran, tha an cànan cuideachd a’ toirt seachad feartan airson obair aig ìre ìosal, mar eisimpleir, tha e comasach faighinn gu cuimhne gu dìreach ann am modh cunnartach a’ cleachdadh an seòrsa Pointer, cuir fios gu stiùireadh SIMD fa leth, no faighinn gu leudachadh bathar-cruaidh mar sin. mar TensorCores agus AMX.

Cruthaiche LLVM a’ leasachadh cànan prògramadh Mojo ùr

Gus sgaradh còd Python clasaigeach agus làn-leasaichte a dhèanamh nas sìmplidhe airson gnìomhan le mìneachaidhean seòrsa soilleir airson a h-uile caochladair, thathas a’ moladh prìomh fhacal “fn” air leth a chleachdadh an àite “def”. Mar an ceudna airson clasaichean, ma dh'fheumas tu dàta a phacadh gu statach mar chuimhneachan aig àm cruinneachaidh (mar ann an C), an àite "clas" faodaidh tu an seòrsa "struct" a chleachdadh. Tha e comasach cuideachd modalan a thoirt a-steach ann an cànanan C / C ++, mar eisimpleir, gus an gnìomh cos a thoirt a-steach bhon leabharlann matamataigeach, faodaidh tu "bho "math.h" import cos" a shònrachadh.

Source: fosgailtenet.ru

Cuir beachd ann