LINUX.ORG.RU

PyPy 1.6 — новые рекорды

 , ,


0

3

PyPy — достаточно совместимый Python интерпретатор, является почти полной заменой CPython 2.7.1, а благодаря трассирующему JIT-компилятору превосходит его по скорости.

Главными особенностями этого релиза стали скорость и стабильность. В среднем тесты производительности показывают, что PyPy 1.6 стал на 20-30% быстрее предыдущей версии, которая уже оставляла далеко позади CPython.

Это стало возможным вследствие комплексных изменений, улучшены Garbage Collector (GC), время разогрева JIT и проводимые им оптимизации, качество генерируемого машкода и реализация собственно интерпретатора.

В этой версии:

  • улучшено поведение GC на очень больших объектах и массивах;
  • ускорен ctypes: теперь вызовы оптимизируются JIT и до 60 раз быстрее чем в PyPy 1.5 и в 10 раз быстрее чем в CPython;
  • простые генераторы теперь разворачиваются в цикл по месту вызова, что дает прирост производительности в 3.5 раза, остальные генераторы были тоже оптимизированы и теперь быстрее на 10-20%, чем в PyPy 1.5;
  • поддержка плавающих одинарной точности в JIT, например array('f');
  • улучшен формат хранения словарей в зависимости от их содержимого, что дало прирост скорости и уменьшение расхода памяти, например, для словарей, у которых ключи только строки или целые; размеры остальных словарей также были уменьшены, благодаря исправленным ошибкам;
  • в поставку включен JitViewer — веб-инструмент, помогающий узнать какие части приложения были затронуты JIT, вплоть до ассемблера;
  • расширен список поддерживаемых C-модулей;
  • появились многобайтные кодировки;
  • первоначальная поддержка NumPy (теперь он очень быстр), интегрированная с JIT; к сожалению, API пока не полный и не каждое приложение сможет работать.

Анонс

>>> Страница загрузки

★★★

Проверено: Shaman007 ()
Последнее исправление: baverman (всего исправлений: 8)
Ответ на: комментарий от yanka
/tmp$ time python -c "range(10000000)"

real	0m2.712s
user	0m1.020s
sys	0m0.467s
0m0.013s

/tmp$ time pypy -c "range(10000000)"

real	0m0.524s
user	0m0.483s
sys	0m0.037s
baverman ★★★
() автор топика
Ответ на: комментарий от baverman

sakura@indigo:~$ time python -c «range(10000000)»

real   0m0.541s
user   0m0.324s
sys   0m0.212s
sakura@indigo:~$ time pypy/bin/pypy -c «range(10000000)»

real   0m0.075s
user   0m0.064s
sys   0m0.008s

Похоже так

yanka ★★
()
Ответ на: комментарий от baverman

Да верно у меня pypy цикл проходит в 6-7 раз быстрее стандартной реализации python

yanka ★★
()
Ответ на: комментарий от yanka

А вот правильный тест, так сказать, чтоб прочувствовать:

/tmp$ python -m timeit "a = range(1000000); b = a[-1]"
10 loops, best of 3: 81.5 msec per loop

/tmp$ pypy -m timeit "a = range(1000000); b = a[-1]"
1000 loops, best of 3: 0.0679 usec per loop
baverman ★★★
() автор топика
Ответ на: комментарий от baverman

sakura@indigo:~$ python -m timeit «a = range(1000000); b = a[-1]»
10 loops, best of 3: 28.5 msec per loop

sakura@indigo:~$ pypy/bin/pypy -m timeit «a = range(1000000); b = a[-1]»
100000000 loops, best of 3: 0.00294 usec per loop

yanka ★★
()

Интересно, а что стало с Unladen Swallow, они же грозились ускорить питон в 2-5 раз, если мне не изменяет память, что-то о них давно ничего не слышно

yanka ★★
()
Ответ на: комментарий от yanka

> Скачивала pypy и пыталась тестировать простейшие скрипты на скорость исполнения , может я что-то делала не так но стандартная реализация python выполняла их быстрее.

JIT, надо сравнивать конкретные функции, запуская их по многу раз.

Joe_Bishop
()
Ответ на: комментарий от yanka

> Интересно, а что стало с Unladen Swallow, они же грозились ускорить питон в 2-5 раз, если мне не изменяет память, что-то о них давно ничего не слышно

не смогли

Joe_Bishop
()

Медленный «системный» CPython крутит PyPy, а PyPy крутит пользовательскую программу, я правильно понимаю?
И на этом (втором уровне интерпретации) пользовательская прога работает быстрее, чем работала бы на 1?

An12
()
Ответ на: комментарий от An12

Кажется, дошло

Прога первый раз запускается дольше, а после работы Jit проц уже работает с машинным кодом.

An12
()
Ответ на: комментарий от An12

На самом деле PyPy на писан на подмножестве питона называемом RPython (restricted python), и вот этот RPython может быть скомпилирован самим же PyPy в машинный код.

anti_social
()
Ответ на: комментарий от An12

Медленный «системный» CPython крутит PyPy

Нет. Вернее там есть режим работы поверх CPython, но он слишком тормозной, поэтому используется трансляция в c или cli бекэнды.

baverman ★★★
() автор топика
Ответ на: комментарий от vasya_pupkin

> А прикиньте что будет если С написать на С

Прикинь на примере ну хотя бы pcc.

tailgunner ★★★★★
()

Джанга-то работает, только, например, psycopg2 не устанавливается в окружение (не компилится). У них на сайте про это написано (только sqlite бэкенд).

Зато simplejson работает отлично, хотя на сайте написано, что поддержки нет.

gevent не компилится тоже.

Короче, пока для запуска моих глюкал оно не подходит.

То, что не компилится — я устанавливал через easy_install. Сам изя установлен этим: http://python-distribute.org/distribute_setup.py. Может я чо не так сделал/забыл сделать?

gistart
()

Эх, жалко что его в браузере нет.

А с v8 кто-нибудь по скорости пытался сравнить на похожих задачах? Нагуглить не смог.

Vit ★★★★★
()
Ответ на: комментарий от Vit

А с v8 кто-нибудь по скорости пытался сравнить на похожих задачах?

Навряд ли. Пара синтетических тестов ничего путнего не скажут. А переписать обширный бенчмарк не так то и просто.

baverman ★★★
() автор топика
Ответ на: комментарий от AST-PM-105

> Мне уже объяснили: питон разгоняют ради фаллометрии и поднятия ЧСВ.

А ты и поверил? Если бы ты был девушкой, то постоянно ходил бы беременным.

уже обогнал? Фанбои питона такие забавные.

Ты просто многого еще не понимаешь, и непонятное кажется тебе смешным.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>А ты и поверил?

Это совпало с моей догадкой.

Ты просто многого еще не понимаешь

Я пойму нормальный бенчмарк, а не восторженные возгласы фанатов.

AST-PM-105
()
Ответ на: комментарий от AST-PM-105

>> Ты просто многого еще не понимаешь

Я пойму нормальный бенчмарк

Ты еще скажи, что ты не потроллить пришел.

tailgunner ★★★★★
()
Ответ на: комментарий от AST-PM-105

> Я пойму нормальный бенчмарк, а не восторженные возгласы фанатов.

Естественно, PyPy не быстрее абсолютно любого C кода, но в некоторых случаях jit компиляция может оптимизировать код намного лучше. Как пример, вызов функции в цикле jit-компилятор может просто сделать инлайновым, может оптимизировать выделение памяти и так далее.

Вот бенчмарк, он конечно искусственный, но тем не менее есть случаи, когда jit рулит: http://morepypy.blogspot.com/2011/08/pypy-is-faster-than-c-again-string.html

anti_social
()
Ответ на: комментарий от baverman

Это хорошо. Значит, можно писать ГУёвые приложения.

Vudod ★★★★★
()
Ответ на: комментарий от baverman

> Вылезай из криокамеры, почти в два раза обогнал.

Вы, случайно, не имеете ввиду синтетическую задачу? Вроде той, где в си-варианте была библиотека, и gcc не мог инлайнить (-flto -fwhole-program, емнип), в отличие от pypy.

n01r ★★
()
Ответ на: комментарий от n01r

Вроде той, где в си-варианте была библиотека, и gcc не мог инлайнить

А где я соврал? Обогнал? Обогнал. Просто некоторые тупые тролли, такие тупые.

baverman ★★★
() автор топика
Ответ на: комментарий от baverman

>> Медленный «системный» CPython крутит PyPy

Нет. Вернее там есть режим работы поверх CPython, но он слишком тормозной, поэтому используется трансляция в c или cli бекэнды.

Т.е. для работы сабжа CPython вообще не требуется?

pevzi ★★★★★
()
Ответ на: комментарий от pevzi

Т.е. для работы сабжа CPython вообще не требуется?

Нет, он полностью независим.

baverman ★★★
() автор топика
Ответ на: комментарий от yanka

Загнулся проект. Разработчик недавно написал что не видит смысла в продолжении работы и желает всяческих успехов PyPy.

anonymous
()

Зачем все эти многочисленные костыли? Почему люди просто не могут взять и написать компилятор для пистона? Скажете динамический язык? Lisp тоже динамический, а компилятор еще 50 лет назад написали.

anonymous
()
Ответ на: комментарий от anonymous

Lisp тоже динамический, а компилятор еще 50 лет назад написали.

Угу, настолько эффективный, что работало это только на мейнфреймах.

baverman ★★★
() автор топика
Ответ на: комментарий от baverman

> Lisp тоже динамический, а компилятор еще 50 лет назад написали.

«Если вас не интересует результат» (c). Компилятор был убогий и, что самое плохое, генерируемый код не проверял те самые динамические типы.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

Для чисто динамического лиспа нету компилятора. В CL можно типы явно задавать, это и позволяет компилировать в эффективный код. Что бы питон можно было компилировать, то нужно так же расширить язык декларацией типов, но это будет уже не питон, а что-то другое.

Только вот мне не понятно, почему PyPy не использует llvm? Или llvm детская игрушка?

dizza ★★★★★
()
Ответ на: комментарий от anonymous

Да, да. 704ый был просто настольным компьютером. А еще в пользу эффективности компилятора говорят лисп машины. До чего в свое время было много хайпа вокруг AI и лиспа. Люди даже были готовы специальные железки клепать, лишь бы это чудовище хоть как-то шевелилось.

baverman ★★★
() автор топика
Ответ на: комментарий от dizza

> Только вот мне не понятно, почему PyPy не использует llvm? Или llvm детская игрушка?

На момент старта PyPy LLVM был еще никакой; кроме того, LLVM плохо приспособлен для динамических языков (Unladen Swallow на это нарвался).

tailgunner ★★★★★
()
Ответ на: комментарий от baverman

А потомслучился факап и все поняли, что CS нифига не S.

dizza ★★★★★
()
Ответ на: комментарий от baverman

Забавно, ведь JIT более актуален для динамических языков. (Я ведь правильно понял, что в статье под интерпретируемыми языками имеют в виду динамические?)

dizza ★★★★★
()
Ответ на: комментарий от anonymous

>> генерируемый код не проверял те самые динамические типы.

Очень даже проверял. Ведь пишут, что там строгая типизация

Кто пишет? Цитату из мануала - в студию.

по твоему врут?

По-моему, ты ошибаешься.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.