Hoʻomohala ʻo LLVM mea hana i ka ʻōlelo papahana Mojo hou

ʻO Chris Lattner, ka mea nāna i hoʻokumu a me ka mea kākau nui o LLVM a me ka mea nāna i hoʻokumu i ka ʻōlelo polokalamu Swift, a me Tim Davis, ke poʻo mua o nā papahana Google AI e like me Tensorflow a me JAX, ua hoʻolauna i kahi ʻōlelo papahana Mojo hou e hoʻohui i ka maʻalahi o ka hoʻohana ʻana no R&D a me ka prototyping wikiwiki. kūpono no nā huahana hopena kiʻekiʻe. Loaʻa ka mua ma o ka hoʻohana ʻana i ka syntax kamaʻāina o ka ʻōlelo Python, a ʻo ka lua ma muli o ka hiki ke hōʻuluʻulu i ka code mīkini, nā mīkini no ka mālama ʻana i ka hoʻomanaʻo palekana, a me ka hoʻohana ʻana i nā mea hana no ka wikiwiki ʻana o nā helu.

Hoʻokumu ʻia ka papahana i ka hoʻohana ʻana no ka hoʻomohala ʻana i ka mīkini, akā ua hōʻike ʻia ma ke ʻano he ʻōlelo maʻamau e hoʻonui i nā mana o ka ʻōlelo Python me ka hoʻonohonoho ʻana i nā ʻōnaehana a kūpono i nā hana he nui. No ka laʻana, pili ka ʻōlelo i nā wahi e like me ka computing hana kiʻekiʻe, ka hoʻoili ʻikepili a me ka hoʻololi. ʻO kahi hiʻohiʻona hoihoi o Mojo ka hiki ke kuhikuhi i ka hōʻailona emoji "🔥" ma ke ʻano he hoʻonui no nā faila code (no ka laʻana, "helloworld.🔥"), me ka hoʻonui ʻana i ka kikokikona ".mojo".

I kēia manawa, aia ka ʻōlelo ma lalo o ka hoʻomohala koʻikoʻi a hāʻawi wale ʻia ke kikowaena pūnaewele no ka hoʻāʻo ʻana. ʻO nā hui kaʻawale e holo ma nā ʻōnaehana kūloko e hoʻohiki ʻia e paʻi ʻia ma hope, ma hope o ka loaʻa ʻana o nā manaʻo e pili ana i ka hana o ke kaiapuni pūnaewele pili. ʻO ke kumu kumu no ka mea hōʻuluʻulu, JIT a me nā hanana ʻē aʻe e pili ana i ka papahana i hoʻolālā ʻia e wehe ʻia ma hope o ka hoʻolālā ʻana o ka hoʻolālā kūloko (ʻo ke ʻano hoʻomohala o kahi prototype hana ma hope o nā pani pani e like me ka pae mua o ka hoʻomohala ʻana o LLVM, Clang. a me ka wikiwiki). No ka mea ua hoʻokumu ʻia ka syntax o Mojo ma Python a ua kokoke ke ʻano ʻano ʻōnaehana iā C/C++, aia nā hoʻolālā i ka wā e hiki mai ana e hoʻomohala i kahi hāmeʻa e hoʻomaʻamaʻa i ka unuhi ʻana o nā papahana i kākau ʻia ma C/C++ a me Python iā Mojo, a me ka hoʻomohala ʻana. nā papahana hybrid e hoʻohui i nā code Python a me Mojo.

Hoʻolālā ʻia ka pāhana e hoʻopili i nā kumuwaiwai lako o nā ʻōnaehana heterogeneous i loaʻa i ka ʻōnaehana i ka helu ʻana. No ka laʻana, hiki ke hoʻohana ʻia nā GPU, nā accelerators aʻo mīkini kūikawā, a me nā kuhikuhi hoʻoponopono vector (SIMD) e holo i nā noi Mojo a hoʻohālikelike i nā helu helu. ʻO ke kumu o ka hoʻomohala ʻana i kahi ʻāpana ʻokoʻa o ka ʻōlelo Python, ma mua o ka hoʻohui ʻana i ka hana optimization o ka CPython i kēia manawa, ua ʻōlelo ʻia ma ke ʻano he kumu hoʻohui, hoʻohui ʻana i nā mana hoʻonohonoho ʻōnaehana, a me ka hoʻohana ʻana i kahi hoʻolālā kūloko ʻokoʻa e hiki ai i ke code ke hana. hoʻokō ʻia ma nā GPU a me nā ʻano mea hoʻoikaika kino. I ka manawa like, manaʻo nā mea hoʻomohala o Mojo e pili i ka hoʻohālikelike ʻana me CPython e like me ka hiki.

Hiki ke hoʻohana ʻia ʻo Mojo ma ke ʻano wehewehe JIT a no ka hoʻohui ʻana i nā faila hiki ke hoʻokō (AOT, ma mua o ka manawa). Ua hoʻokumu ka mea hoʻopili i nā ʻenehana hou no ka hoʻonui ʻana i ka hoʻopaʻa ʻana, ka caching a me ka hoʻopili puʻupuʻu. Hoʻololi ʻia nā kikokikona kumu ma ka ʻōlelo Mojo i code intermediate haʻahaʻa haʻahaʻa MLIR (Multi-Level Intermediate Representation), i hoʻomohala ʻia e ka papahana LLVM a hāʻawi i nā hiʻohiʻona hou no ka hoʻomaikaʻi ʻana i ka hana ʻana i ka pakuhi kahe ʻikepili. Hāʻawi ka mea hōʻuluʻulu iā ʻoe e hoʻohana i nā backends like ʻole e kākoʻo ana i ka MLIR e hana i ka code mīkini.

ʻO ka hoʻohana ʻana i nā mīkini ʻenehana hou e wikiwiki i ka helu ʻana e hiki ai ke hoʻokō i ka hana, me nā helu koʻikoʻi, ʻoi aku ka nui o nā noi C / C ++. No ka laʻana, i ka hoʻāʻo ʻana i kahi noi e hana i kahi hoʻonohonoho Mandelbrot, ʻo ka noi Mojo i hui ʻia, i ka wā i hoʻokō ʻia ai i ke ao AWS (r7iz.metal-16xl), he 6 mau manawa ʻoi aku ka wikiwiki ma mua o ka hoʻokō C ++ (0.03 sec. vs. 0.20 sec. .), a me 35 tausani manawa ʻoi aku ka wikiwiki ma mua o kahi noi Python e hoʻohana ana i ka stock CPython 3.10.9 (0.03 sec vs 1027 sec) a me 1500 mau manawa wikiwiki me ka hoʻohana ʻana iā PYPY (0.03 sec vs 46.1 sec).

I ka loiloi ʻana i ka hana ma kahi o ka hoʻoponopono ʻana i nā pilikia aʻo mīkini, ʻo ka Modular Inference Engine AI stack i kākau ʻia ma ka ʻōlelo Mojo, i hoʻohālikelike ʻia i kahi hopena e pili ana i ka waihona TensorFlow, ua lilo i 3 mau manawa wikiwiki ma kahi ʻōnaehana me kahi Intel. ke kaʻina hana i ka wā e hoʻoponopono ai i ke ʻano ʻōlelo, 6.4 manawa ʻoi aku ka wikiwiki i ka wā e hoʻokō ai i ke kumu hoʻohālike ʻōlelo paipai a me 2.1 mau manawa wikiwiki i ka wā e hana pū ana me nā kumu hoʻohālike no ka hoʻoponopono ʻana i ka ʻike ʻike. Ke hoʻohana nei i nā kaʻina hana AMD, ʻo ka loaʻa i ka wā e hoʻohana ai iā Mojo he 3.2, 5 a me 2.2 mau manawa, a i ka wā e hoʻohana ai i nā kaʻina hana ARM - 5.3, 7.5 a me 1.7 mau manawa. ʻO ka hopena PyTorch i hoʻokumu ʻia ma hope o Mojo e 1.4, 1.1 a me 1.5 mau manawa ma ka Intel CPU, 2.1, 1.2 a me 1.5 mau manawa ma ka AMD CPU a me 4, 4.3 a me 1.3 mau manawa ma ka ARM CPU.

Hoʻomohala ʻo LLVM mea hana i ka ʻōlelo papahana Mojo hou

Kākoʻo ka ʻōlelo i ka paʻi paʻa a me nā hiʻohiʻona palekana hoʻomanaʻo haʻahaʻa e hoʻomanaʻo ana i nā hiʻohiʻona Rust e like me ka nānā ʻana i ke ola holoʻokoʻa a me ka mea nānā hōʻaiʻē loli (borrow checker). Ma waho aʻe o nā ala no ka hana palekana me nā kuhikuhi, hāʻawi pū ka ʻōlelo i nā hiʻohiʻona no ka hana haʻahaʻa, no ka laʻana, hiki ke komo pololei i ka hoʻomanaʻo ma ke ʻano palekana me ka hoʻohana ʻana i ke ʻano Pointer, e kāhea i nā ʻōlelo aʻoaʻo SIMD pākahi, a i ʻole ke komo ʻana i nā hoʻonui ʻenehana like e like me TensorCores a me AMX.

Hoʻomohala ʻo LLVM mea hana i ka ʻōlelo papahana Mojo hou

No ka maʻalahi o ka hoʻokaʻawale ʻana o ka code Python maʻamau a hoʻopaʻa ʻia no nā hana me nā wehewehe ʻano kikoʻī no nā ʻano like ʻole, ua manaʻo ʻia e hoʻohana i kahi huaʻōlelo ʻokoʻa "fn" ma kahi o "def". Pēlā nō no nā papa, inā pono ʻoe e hoʻopaʻa i ka ʻikepili i ka hoʻomanaʻo i ka manawa hōʻuluʻulu (e like me C), ma kahi o "papa" hiki iā ʻoe ke hoʻohana i ke ʻano "struct". Hiki iā ʻoe ke hoʻokomo wale i nā modula ma nā ʻōlelo C / C ++, no ka laʻana, e hoʻokomo i ka hana cos mai ka waihona makemakika, hiki iā ʻoe ke kuhikuhi "mai "math.h" import cos".

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka