Как стать автором
Обновить

Комментарии 11

Опять hello world с бессмысленными "бенчмарками". Ради приличия взяли бы хоть раз какую-то реальную bottleneck проблему сложнее Фибоначчи и переложили бы её на Cython. Сразу бы прочувствовали на реальном опыте "минимальные потери в синтаксисе" и прочие грабли.


*Можно обойтись без сборки test2.pyx с использованием setup.py, для этого необходимо просто в файл tests.py добавить строки

Если это совет так делать всегда, то это вредный совет. Такое годится только для экспериментального кода на вашей машине. Это не для применения в распространяемом коде библиотек и приложений. Вы же не хотите заставить ваших пользователей иметь C-компилятор и настроенное окружение для сборки Cython-кода для запуска вашего проекта? Cython-изация должна выполняться только на этапе сборки пакета (Cython должен быть только в setup_requires). Если вы распространяете бинарные wheel-ы своего пакета с pyx-файлами, то там должны лежать уже собранные модули расширения и никаких исходников в pyx и никакой зависимости от Cython в runtime.

Спасибо за коммент.
Для реальной задачи необходим рабочий «hello world». Как показывает практика, некоторые даже до этого не доживают.
Про ремарку об упрощении без setup.py — все верно. Для продакшн это не годится, но упрощает локальную разработку.

А зачем считать Фибоначчи в числах с плавающкй запятой? Ни точности, ни скорости.

Чтобы можно было дотянуть до 1400 без сильного замедления на длинные числа.

Имел неприятный опыт переписывания одного куска сравнительно сложной физической симуляции на Cython. Примерно на середине уже пожалел, что связался. Разобраться с написанием модуля для Cpython и написать модуль на C++ было бы быстрее и удобнее.


Сколько-либо сложный код обрастает огромным количеством объявлений типов и функций, теряется всякий смысл поддерживать иллюзию питона, так ещё потом тратится куча времени на поиск мест, где компилятор не смог вывести типы и всё обратно провалилось в вызовы интерпретатора.


Может я и не умею его готовить, но пользы в результате оказалось сильно меньше, чем кажется на первый взгляд. Причём некоторые части переписывал потом обратно на питон( с использованием numpy) и разница составляла от нескольких процентов до 1.5-2 раз.


Но тривиальный код на Cython выходит быстрым, да. На числодробилке разница была от 100 раз и больше

Там тормознутая рекурсия :)
Fibonacci can be written many different ways. The goal of this project is to compare how each language handles the exact same code.

Там есть и optimized версии для некоторых языков.


Optimized code that breaks the benchmark
odroid@odroid:~/my/my3$ python3 tests.py
enter number: 10
Python time = 7.653236389160156e-05
Cython time = 2.8133392333984375e-05
Speedup = 2.7203389830508473

enter number: 100
Python time = 8.678436279296875e-05
Cython time = 3.170967102050781e-05
Speedup = 2.736842105263158

enter number: 100000
Python time = 0.01643967628479004
Cython time = 0.0004260540008544922
Speedup = 38.5858981533296

enter number: 1000
Python time = 0.00031876564025878906
Cython time = 4.673004150390625e-05
Speedup = 6.821428571428571
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории