Выпуск Pyston 2, реализации языка Python с JIT-компилятором.

Stepan Mikulov

Administrator
Команда форума
После трёхлетнего затишья в разработке опубликован релиз проекта Pyston 2, развивающего высокопроизводительную реализацию языка Python, использующую наработки проекта LLVM. Реализация примечательна применением современных технологий JIT-компиляции и нацелена на достижение высокой производительности, близкой к производительности традиционных системных языков, таких как C++.

Код прошлых выпусков Pyston распространялся под лицензией Apache, но код Pyston 2 пока недоступен, а опубликованы лишь готовые сборки для Ubuntu 18.04 и 20.04 (для загрузки доступен архив с кодом, но в нём лишь заглушка с информацией, что проект пока является закрытым). Публикация кода входит в планы разработчиков, но это будет сделано после завершения формирования бизнес-модели новой компании, решившей продолжить разработку Pyston без финансовой поддержки Dropbox.

В отличие от прошлых выпусков версия Pyston 2 помечена как стабильный, а не тестовый выпуск. Проведена большая работа по оптимизации производительности и Pyston 2 теперь быстрее штатного Python 3.8 примерно на 20% при прохождении тестового набора python-macrobenchmarks. Наиболее заметный выигрыш в производительности отмечается для нагрузок, свойственных web-приложениям. В отдельных тестах, таких как chaos.py и nbody.py, Pyston 2 опережает Python 3.8 в два раза. Ценой использования JIT является незначительное увеличение потребления памяти.

С точки зрения совместимости со штатным Python, проект Pyston преподносится как наиболее совместимая с CPython альтернативная реализация, так как Pyston является ответвлением от основной кодовой базы CPython. В Pyston поддерживаются все возможности CPython, в том числе C API для разработки расширений на языке Си. Изначально Pyston развивался компанией Dropbox, которая в 2017 году приняла решение прекратить разработку своими силами. В начале 2020 года основные разработчики Pyston основали свою компанию, полностью переосмыслили проект и стали заниматься Pyston полный рабочий день.

CPython 3.8.5Pyston 2.0PyPy 7.3.2
flaskblogging mean latency5.1ms4.1ms2.5ms
flaskblogging p99 latency6.3ms5.2ms5.8ms
flaskblogging memory usage47MB54MB228MB
djangocms warmup timen/an/a105s
djangocms mean latency14.1ms11.8ms15.9ms
djangocms p99 latency15.0ms12.8ms179ms
djangocms memory usage84MB91MB279MB
pylint performance1x1.16x0.50x
mypy performance1x1.07xunsupported
pytorch performance1x1.00xunsupported
pypy benchmark suite1x1.36x2.48x


Технические подробности о начинке Pyston 2 пока не приводятся, упомянуто только использование DynASM JIT, inline-кэширования и общих оптимизаций CPython. Прошлая версия Pyston использовала JIT на основе трансляции отдельных методов (method-at-a-time), близкий к JIT современных JavaScript-движков. В JIT код на языке Python разбирался и транслировался в промежуточное представление LLVM (IR, Intermediate Representation). Далее IR-представление проходило обработку в оптимизаторе LLVM и передавалось для исполнения в JIT-движок LLVM, который преобразовывал IR-представление в машинный код.

Для получения информации о типах переменных для программ на динамическом языке Python применялась техника вероятностного предсказания типов объектов с последующим уточнением правильности выбора типа в процессе выполнения. Таким образом Pyston постоянно варьировал выполнение между двумя ветками - быстрой, когда данные о предсказанных типах подтверждаются, и медленной, используемой в случае рассогласования данных о типе. Работа могла осуществляться в многопоточном режиме, допускающем параллельное выполнение нескольких нитей кода на языке Python и избавленном от глобальной блокировки интерпретатора (GIL, global interpreter lock).

Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=53987
 
Сверху