Нет ускорения при использовании sympy с pypy

Для моего кода мне нужно быстро решить много уравнений Пелла. Используя только sympy 1.0 и python 3.5, вызов diop_DN(q, 1) выполняется со скоростью около 60 уравнений в секунду. Я просмотрел исходный код для diop_DN решатель, и, похоже, он написан на чистом питоне. Поэтому я попытался запустить свой код с pypy 5.1.2 (python 2.7.10) с sympy 1.0, но, к моему удивлению, он работает примерно в два раза медленнее.

Это ожидаемое поведение? Разве pypy не должен быстрее запускать чистый python?


person qwr    schedule 15.02.2017    source источник


Ответы (1)


Вероятно, вы не даете PyPy достаточно времени для разогрева. Если я запускаю diop_DN(13, -4) в цикле, для безубыточности требуется более 50 итераций, но асимптотическое время примерно в 5 раз быстрее, чем на CPython. Если, как и в реальном коде, вы не выполняете все вызовы с одинаковыми аргументами, прогрев может занять еще немного больше времени. (Время измерено с помощью PyPy 5.6; с более старой версией PyPy 5.1 прогрев также может быть немного дольше.)

person Armin Rigo    schedule 15.02.2017