глубокий разум, известная своими разработками в области искусственного интеллекта, недавно объявила, что принял решение выпустить исходный код проекта S6, который он разработал из компилятора JIT для языка Python.
проект интересный потому что разработан как библиотека расширений который может быть интегрирован со стандартным CPython, который обеспечивает полную совместимость с CPython и не требует модификации кода интерпретатора. Проект находится в разработке с 2019 года, но, к сожалению, был свернут и больше не находится в разработке.
S6 был проектом, запущенным в DeepMind в 2019 году для ускорения CPython с помощью компиляции точно в срок («JIT»). Эти функции будут предоставляться как обычная библиотека Python, и не потребуется никаких изменений в интерпретаторе CPython. S6 намеревался сделать для Python то же, что V8 сделал для Javascript (название — дань уважения V8). Работа была основана на CPython версии 3.7. В зависимости от рабочей нагрузки мы наблюдали ускорение до 9.5x в обычных тестах.
Основная причина, по которой было принято решение выпустить исходники, одна из них и как уже упоминалось, заключалась в том, что проект перестал иметь поддержку, другой из основных причин было указано то, что на основе созданных наработок эти еще могут быть полезны для улучшения python. .
Мы прекратили внутреннюю работу над S6. Таким образом, этот репозиторий был заархивирован, и мы не принимаем запросы на вытягивание или проблемы. Мы открыли исходный код и представили обзор дизайна ниже, чтобы стимулировать обсуждение в сообществе Python и вдохновить будущую работу по улучшению Python.
Что касается работы S6, следует отметить, что S6 для Python сравнивается с движком V8 для JavaScript по решаемым задачам. Библиотека заменяет существующий драйвер интерпретатора байт-кода ceval.c собственной реализацией, использующей 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 и с ним можно ознакомиться по ссылке ниже.