S6, არის დამოუკიდებელი JIT შემდგენელი ბიბლიოთეკა CPython-ისთვის
ღრმა გონება, ცნობილია თავისი განვითარებით ხელოვნური ინტელექტის სფეროში, ცოტა ხნის წინ განაცხადა მიიღო გადაწყვეტილება S6 პროექტის წყაროს კოდის გამოქვეყნების შესახებ, რომელიც მან შეიმუშავა პითონის ენის JIT შემდგენლისგან.
პროექტი საინტერესოა რადგან შექმნილია როგორც გაფართოების ბიბლიოთეკა რომელიც შეიძლება ინტეგრირებული იყოს სტანდარტულ CPython-თან, რომელიც უზრუნველყოფს CPython-ის სრულ თავსებადობას და არ საჭიროებს შეცვლას თარჯიმნის კოდის. პროექტი დამუშავების პროცესშია 2019 წლიდან, მაგრამ სამწუხაროდ შემცირდა და აღარ არის დამუშავების პროცესში.
S6 იყო პროექტი, რომელიც დაიწყო DeepMind-ში 2019 წელს CPython-ის დაჩქარების მიზნით მხოლოდ დროში ("JIT") შედგენით. ეს ფუნქციები უზრუნველყოფილი იქნება როგორც ჩვეულებრივი Python ბიბლიოთეკა და არ იქნება საჭირო CPython ინტერპრეტატორის ცვლილებები. S6 აპირებდა Python-ისთვის გაეკეთებინა ის, რაც V8-მა გააკეთა Javascript-ისთვის (სახელი არის V8-ის პატივისცემა). ნამუშევარი ეფუძნებოდა CPython 3.7 ვერსიას. სამუშაო დატვირთვიდან გამომდინარე, ჩვენ ვნახეთ 9.5-ჯერ მატება საერთო კრიტერიუმებში.
მთავარი მიზეზი, რის გამოც გადაწყდა წყაროს კოდის გამოშვება, ერთ-ერთი მათგანი და როგორც უკვე აღვნიშნეთ, იყო ის, რომ პროექტს აღარ ჰქონდა მხარდაჭერა, კიდევ ერთი ძირითადი მიზეზი იყო დასახელებული, რომ შექმნილი განვითარებიდან გამომდინარე, ეს მაინც შეიძლება იყოს სასარგებლო პითონის გასაუმჯობესებლად. .
ჩვენ შევწყვიტეთ მუშაობა S6-ზე შიდა. როგორც ასეთი, ეს საცავი დაარქივებულია და ჩვენ არ ვიღებთ მოთხოვნებს ან საკითხებს. ჩვენ გავხსენით წყარო და მივაწოდეთ ქვემოთ მოცემული დიზაინის მიმოხილვა, რათა გავააქტიუროთ საუბრები პითონის საზოგადოებაში და შთააგონოთ მომავალი მუშაობა პითონის გასაუმჯობესებლად.
რაც შეეხება S6-ის მუშაობას, უნდა აღვნიშნოთ, რომ S6 Python-ისთვის ადარებს V8 ძრავას JavaScript-ისთვის ამოცანების კუთხით ის წყვეტს. ბიბლიოთეკა ცვლის არსებულ ceval.c bytecode თარჯიმნის დრაივერს საკუთარი იმპლემენტაციით, რომელიც იყენებს JIT კომპილაციას შესრულების დასაჩქარებლად.
S6 ამოწმებს, უკვე შედგენილია თუ არა მიმდინარე ფუნქცია და თუ ასეა, ახორციელებს შედგენილ კოდს და თუ არა, ახორციელებს ფუნქციას CPython-ის ინტერპრეტაციის მსგავსი ბაიტიკოდის ინტერპრეტაციის რეჟიმში. ინტერპრეტაცია ითვლის შესრულებული განცხადებებისა და ზარების რაოდენობას, რომლებიც დაკავშირებულია დამუშავებულ ფუნქციასთან.
გარკვეული ეტაპის მიღწევის შემდეგ, აწყობის პროცესი იწყება კოდის დასაჩქარებლად რომელიც ხშირად დადის. კომპილაცია ხორციელდება strongjit შუალედურ წარმომადგენლობაზე, რომელიც ოპტიმიზაციის შემდეგ გარდაიქმნება სამიზნე სისტემის მანქანის ინსტრუქციებში asmjit ბიბლიოთეკის გამოყენებით.
დატვირთვის ხასიათიდან გამომდინარე, ოპტიმალურ პირობებში, S6 აჩვენებს ტესტის შესრულების სიჩქარის ზრდას 9,5-ჯერ, ჩვეულებრივ CPython-თან შედარებით.
როდესაც 100 გამეორება შესრულდება რიჩარდსის ტესტის კომპლექტიდან, არის აჩქარება 7-ჯერ, და Raytrace ტესტის გაშვებისას, რომელიც შეიცავს უამრავ მათემატიკას, ის 3-დან 4,5-ჯერ უფრო სწრაფია.
ამოცანები, რომელთა ოპტიმიზაცია რთულია S6-ით არის პროექტები, რომლებიც იყენებენ C API-ს, როგორიცაა NumPy, ისევე როგორც ოპერაციები, რომლებიც დაკავშირებულია დიდი რაოდენობის მნიშვნელობების ტიპების შემოწმების აუცილებლობასთან.
ცუდი შესრულება ასევე ჩანს ერთი ფუნქციის ზარებისთვის რომლებიც მოიხმარენ უამრავ რესურსს S6 Python თარჯიმნის არაოპტიმიზებული განხორციელების გამოყენების გამო (განვითარება არ მიუღწევია ინტერპრეტაციის რეჟიმის ოპტიმიზაციის ეტაპს).
მაგალითად, Unpack Sequence ტესტში, რომელიც ხსნის მასივების/ტოპების დიდ კომპლექტს, ერთი ზარი აჩვენებს 5-ჯერ შენელებას, ხოლო ციკლური ზარი იძლევა 0,97-ს CPython-დან.
საბოლოოდ მათთვის, ვინც დაინტერესებულია ამის შესახებ, თქვენ უნდა იცოდეთ, რომ JIT შემდგენელი კოდი დაწერილია C++-ში და ამჟამად ეფუძნება CPython 3.7-ს, გარდა იმისა, რომ წყაროს კოდი უკვე ღიაა Apache 2.0 ლიცენზიით და მისი კონსულტაცია შესაძლებელია. ქვემოთ მოცემული ბმულიდან.
იყავი პირველი კომენტარი