DeepMind пусна изходния код за S6, JIT компилатор за Python

S6-дълбок ум

S6, е самостоятелна JIT компилираща библиотека за CPython

дълбок ум, известен с разработките си в областта на изкуствения интелект, наскоро обяви, че взе решение да пусне изходния код на проекта S6, който е разработен от JIT компилатор за езика Python.

Проектът е интересен защото е проектиран като библиотека с разширения който може да бъде интегриран със стандартен CPython, който осигурява пълна съвместимост с CPython и не изисква модификация на кода на интерпретатора. Проектът се разработва от 2019 г., но за съжаление е намален и вече не се разработва.

S6 беше проект, стартиран в рамките на DeepMind през 2019 г. за ускоряване на CPython с компилация точно навреме („JIT“). Тези функции ще бъдат предоставени като нормална библиотека на Python и няма да са необходими промени в интерпретатора на CPython. S6 възнамеряваше да направи за Python това, което V8 направи за Javascript (името е почит към V8). Работата беше базирана на CPython версия 3.7. В зависимост от работното натоварване видяхме ускоряване до 9.5 пъти в обичайните бенчмаркове.

Основната причина, поради която беше решено да се пусне изходният код, една от тях и както вече беше споменато, беше, че проектът спря да има поддръжка, друга от основните причини беше посочена, че въз основа на създадените разработки те все още могат да бъдат полезни за подобряване на Python .

Спряхме да работим върху S6 вътрешно. Като такова, това хранилище е архивирано и ние не приемаме заявки за изтегляне или проблеми. Отворихме кода и предоставихме преглед на дизайна по-долу, за да стимулираме разговорите в общността на Python и да вдъхновим бъдеща работа за подобряване на Python.

По отношение на работата на S6 трябва да споменем това S6 за Python се сравнява с V8 двигател за JavaScript по отношение на задачите, които решава. Библиотеката заменя съществуващия драйвер за интерпретатор на байткод ceval.c със собствена реализация, която използва JIT компилация за ускоряване на изпълнението.

S6 проверява дали текущата функция вече е компилирана и ако е така, изпълнява компилирания код, а ако не, изпълнява функцията в режим на интерпретация на байт код, подобен на интерпретатора на CPython. Интерпретацията отчита броя на изпълнените изрази и извиквания, свързани с обработваната функция.

След достигане на определен етап се стартира процесът на изграждане, за да се ускори кодът който се изпълнява често. Компилацията се извършва върху междинното представяне на strongjit, което след оптимизация се преобразува в целеви системни машинни инструкции с помощта на библиотеката asmjit.

В зависимост от естеството на натоварването, при оптимални условия, S6 демонстрира увеличение на скоростта на изпълнение на теста до 9,5 пъти в сравнение с обикновения CPython.

Когато се изпълнят 100 итерации от набора от тестове на Richards, има ускорение 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 и може да бъде консултиран от линка по-долу.


Съдържанието на статията се придържа към нашите принципи на редакторска етика. За да съобщите за грешка, щракнете върху тук.

Бъдете първите, които коментират

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван.

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.