werehuman
16.08.2011 05:01 Psi+
Самизнаетекто соснули
"В частности, речь ведется о функциях форматирования строк. Как оказалось, разработчикам PyPy удалось увеличить производительность выполнения операций форматирования для конструкций на языке Python настолько, что удалось в два раза обогнать по скорости реализацию функции sprintf из стандартной библиотеки. При сборке с использованием GCC 4.5.2 и опции оптимизации "-O4", тестовый пример на языке Си был выполнен за 1.63 секунд (при выделении памяти не статически, а через malloc время выполнения увеличилось до 1.96 сек.) В то время как аналог на языке Python был выполнен с использованием PyPy за 0.85 сек. При запуске того же примера в CPython, на его выполнение было потрачено более 10 сек."
Recommended by:
@ulidtko
Красиво. Питонобляди научились писать код :)
на самом деле у pypy проблем дохера. Например, он до сих пор внезапно сегфолтится
Мда. Зато строки быстро работают.
Кстати, надо посмотреть еще как проводился тест. Сдается мне, что где-то тут есть подвох :)
вряд ли. Глянь в посты @mva, он напейсал sha1 на луа, который быстрее сишного. Нет тут ничего невозможного.
Хм... Пойду, посмотрю :)
Нет, я, конечно, верю, что хороший погромист и на питоне может писать высокопроизводительные вещи, но и для сишечки своя область останется по-любому.
я жопой чувствую подвох. ссылку дай.
А они это так, в общих словах. Без ссылок :)
http://www.opennet.ru/opennews/art.shtml...
GCC is unable to inline or unroll the sprintf call, because it sits inside of libc
Интересно VC
Там же в камментах по ссылке примеры кода
Results:
PyPy: real 0m13.307s
NodeJS: real 0m44.350s
C: real 0m1.812s
И объяснение мистики :)
^_^
как объясняется мистика?
Как я понял, объясняется это тем, что в данном конкретном случае эти пидарасы используют if можно значение представить константой, то вычислим-ка все сразу. По этому поводу как-то была давняя шутка про то, как ебались с gcc на какой-то платформе. -O = часть значения складывается в стэк, -O2 = вместо стэка регистры, -O3 = значение тупо вычислено и в программе просто загружается в память.
Плюс ко всему в комментах чувак высказался, что, собственно, это не совсем динамическая оптимизация, а межможульная, потому что "gcc не может...". Если у тебя pypy есть, можно на ассемблерный код посмотреть :)
причём тут код?
питонобляди смогли в передовые технологии построения компиляторов.
По идее сегфолтится только на всякой непитоновской фигне и работой с ctypes. Локализируй ошибку и расскажи на #pypy. Я вот нашел, что jinja2 вызывала то, чего не должна была (они в транке поправили тогда уже, а чуваки из pypy просто попросили релиз ускорить, что и произошло)
Кстати, с clang -то не сравнивали...