Альтернатива psyco для 64-битных машин

Psyco поражает, когда он работает . Однако, не переходя к 32-битной версии Python, похоже, что в ближайшее время мы получим 64-разрядную версию. Существуют ли альтернативы psyco, которые могут ускорить общий код python, связанный с CPU?

Связанный

Psyco x64?

Каковы возможные ловушки при портировании Psyco на 64-битный?

Ответ заключается в том, чтобы вместо этого использовать PyPy . Из http://psyco.sourceforge.net/introduction.html :

Мои планы на 2006 год состоят в том, чтобы перенести методы, реализованные в Psyco в PyPy.

Из сообщения блога PyPy в феврале:

… основные моменты и статус pypy:
* Большинство тестов Python работают намного быстрее, чем с CPython или Psyco
* сама программа PyPy для компилятора реального мира (200 KLocs) работает в два раза быстрее
* поддерживает x86 32 и 64 бит и находится в процессе поддержки ARM

PyPy , на что указывает разработчик Psyco, не является удобной заменой для Psyco только с целью некоторого увеличения скорости в узком коде. Его еще одна экосистема.

Использование PyPy имеет много последствий, повышает многие вопросы совместимости для более крупных проектов и является широко распространенным решением: это означает переход на совершенно другую реализацию Python вдали от уровня капота и уровня качества разработчиков лидера Python. PyPy довольно сильно раздута для повышения скорости в большинстве реальных проектов. Первоначальные казни занимают много времени. Объем памяти огромный и уродливый. Представленные контрольные показатели «выбраны». И всегда есть какая-то библиотека, необходимая для проекта, или проблема с GUI / Server / IDE / Debugging, которая полностью останавливает показ или умножает время разработки и отладки. Увеличение скорости трудно предсказать и вряд ли можно настроить путем фокусировки. С ним ничего не чувствует.

В настоящее время зрелыми альтернативами для ускорения кода узких мест внутри CPython являются Cython и numba . (Здесь есть другие «подножия»)


Numba , библиотека компилятора JIT для CPython (как и Psyco), фокусируется на числовом коде. Он обеспечивает впечатляющую скорость (10..200x, больше, чем psyco / PyPy), просто поместив декоратор jit функции на функции узких мест. И это особенно быстро и в сочетании с массивами numpy из коробки! (в отличие от Psyco); Однако Numba не делает ничего или даже замедляет значительно другой нормальный код python, который в основном работает с атрибутами объектов, строками, общими списками, диктофонами и т. Д. (Хуже видно: скорость 0,04x, хуже, чем Psyco). В отличие от Psyco, Numba – огромная установка и медленный импорт (рисование numpy). Но он также позволяет создавать предварительно скомпилированные статические модули из выбранных функций, которые затем не нуждаются в установке numba для развертывания (аналогично Cython).


Cython , статический компилятор смешанного языка Python & C (супер-набор языка Python), который использует конвейер C-компилятора и создает DLL-модули, обычно используется путем рефакторинга некоторых функций узких мест в отдельный модуль. Но даже когда неизменные большие модули Python скомпилированы Cython , это обычно дает уже увеличение скорости примерно в 2 раза, просто так «бесплатно»! Тем не менее, эти скомпилированные DLL-модули значительно больше, чем .pyc / .pyo-s. Cython, так сказать, разворачивает байт-код Python в прямые вызовы C-функции. И это немного улучшает оптимизацию на константах и ​​т. Д. ( Например , установка Whepzy.web, например, по типу Cythonizes всех ее кода бесстыдным образом без предупреждения, что затрудняет отладку и проверку во время разработки)

В дополнение к «свободному» ускорению скорости неизмененного кода дальнейшие огромные увеличения скорости (приближающиеся к скорости C), особенно для числового / массивного кода и некоторой OO-работы, могут быть достигнуты довольно простым способом, поставив несколько объявлений статического типа Cython в код Python с горячей точкой. Для обработки строчной строки C требуется несколько более активное кодирование.

Cython позволяет постоянно улучшать скорость до скорости C, фокусируя внимание на узких местах и ​​настраивая код с типами Cython без проблем в мелкозернистом режиме. Это уникальная сила и обладает гораздо большим потенциалом, чем Psyco, Numba и PyPy (как это). Его зрелый вариант без тупика.