DeepMind нь CPython-д зориулсан JIT хөрвүүлэгчийн хэрэгжилттэй номын сан болох нээлттэй эхийн S6

Хиймэл оюун ухааны салбарын бүтээн байгуулалтаараа алдартай DeepMind компани Python хэлний JIT хөрвүүлэгчийг боловсруулсан S6 төслийн эх кодыг нээжээ. Энэхүү төсөл нь стандарт CPython-той нэгдсэн, CPython-той бүрэн нийцэж, орчуулагчийн кодыг өөрчлөх шаардлагагүй өргөтгөлийн номын сан хэлбэрээр бүтээгдсэн учраас сонирхолтой юм. Төсөл нь 2019 оноос хойш хөгжиж байгаа боловч харамсалтай нь зогссон бөгөөд цаашид хөгжихгүй байна. Үүсгэсэн хөгжүүлэлт нь Python-ийг сайжруулахад тустай байж болох тул кодыг нээхээр шийдсэн. JIT хөрвүүлэгчийн код нь C++ хэл дээр бичигдсэн бөгөөд CPython 3.7 дээр суурилдаг. Apache 2.0 лицензийн дагуу нээлттэй эх сурвалжтай.

Шийдэж чадах ажлуудын хувьд Python-д зориулсан S6 нь JavaScript-д зориулсан V8 хөдөлгүүртэй харьцуулагддаг. Номын сан нь одоо байгаа байт кодын орчуулагч ceval.c-г өөрийн хэрэгжүүлэлтээр сольж, гүйцэтгэлийг хурдасгахын тулд JIT эмхэтгэлийг ашигладаг. S6 нь одоогийн функцийг аль хэдийн хөрвүүлсэн эсэхийг шалгаж, хэрэв тийм бол хөрвүүлсэн кодыг гүйцэтгэх ба хэрэв үгүй ​​бол CPython орчуулагчтай адил байт код тайлбарлах горимд функцийг ажиллуулна. Тайлбарлах явцад боловсруулж буй функцтэй холбоотой гүйцэтгэсэн заавар, дуудлагын тоог тоолно. Тодорхой үе шатанд хүрсний дараа байнга гүйцэтгэдэг кодыг хурдасгахын тулд эмхэтгэх процессыг эхлүүлдэг. Эмхэтгэлийг завсрын хүчирхэгжит дүрслэл болгон гүйцэтгэдэг бөгөөд үүнийг оновчтой болгосны дараа asmjit номын санг ашиглан зорилтот системийн машины заавар болгон хувиргадаг.

Ажлын ачааллын шинж чанараас хамааран оновчтой нөхцөлд S6 нь ердийн CPython-той харьцуулахад туршилтын гүйцэтгэлийн хурд 9.5 дахин нэмэгдэж байгааг харуулж байна. Ричардсын тестийн багцын 100 давталтыг ажиллуулахад 7 дахин хурдасгах, их хэмжээний математик тооцоолол хийх Raytrace тестийг ажиллуулахад 3-4.5 дахин хурдасгах нь ажиглагддаг.

S6-г ашиглан оновчтой болгоход хэцүү ажлуудын дунд NumPy гэх мэт C API ашигладаг төслүүд, мөн олон тооны утгын төрлийг шалгах шаардлагатай холбоотой үйлдлүүд багтдаг. S6-ийн өөрийн Python орчуулагчийн оновчтой бус хэрэгжилтийг ашигласан (хөгжил нь тайлбарлах горимыг оновчтой болгох түвшинд хүрээгүй) учир нөөц их шаарддаг функцүүдийн нэг удаагийн дуудлагад бага гүйцэтгэл ажиглагдаж байна. Жишээлбэл, их хэмжээний массив/түлбүүдийг задалдаг Unpack Sequence тестийн хувьд нэг удаагийн дуудлагаар 5 хүртэл удаа удаашрах ба мөчлөгт дуудлага хийх үед гүйцэтгэл нь CPython-оос 0.97 байна.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх