УСКОРЕНИЕ Python - все способы

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

УСКОРЕНИЕ Python - все способы

Сообщение Гармонист »

python master.jpeg (11202 просмотра) <a class='original' href='./download/file.php?id=48101&sid=06774ca6ffecbbd7acc2b02988e785d6&mode=view' target=_blank>Загрузить оригинал (63.4 КБ)</a>
У меня(как и у большинства питонистов) - появился вопрос: как ускорить своего маленького питомца, написанного на питоне.
Полазив по и-нету и собрав первичный(т.е. не исчерпывающий) материал - я решил сделать эту статью напоминалку.
Это, так сказать, заготовка для полной статьи для хабрахабра - как более профилированного ресурса по подобным темам.
Не обижусь если на хабре напишет эту статью не я, при условии, что это будет не чистая копия(так я и сам мог бы запостить),
а по крайней мере отрицензированная и проверенная на орф-е ошибки версия.
А по хорошему - дополненная, c логотипчиками проектов, проверенная и желательно переписанная литератерным языком версия. :roll:
в процессе написания этой статьи наткнулся на аналогичную тему

Вобщем: если вы можете дополнить тему - обязательно пиши, а я буду их в этот список добавлять.
Поехали:

Немного о том "как Python запускается и работает":
1. Компиляция py-файлов в байт-код(кеширование байт-кода в pyc/pyo-файлах) посредством: CPython, Jython, IronPython, Brython, RubyPython,...
2. Интерпретация байт-кода(виртуальной машиной) - в машинный код под конкретную архитектуру посредством: CPython VM, JVM, CLR, Ruby VM,...
по сути это JIT.

Немного о том "почему Python медленный": (для просмотра содержимого нажмите на ссылку)
1. из-за динамической типизации (т.е. типы данных можно явно не объявлять)
2. из-за кросплатформенности(интерпретатор python из py-файлов создает байт-код(pyc/pyo-файлы), которые затем компилирует в машинный код под конкретную архитектуру) - медленный старт.
К тому же на создание pyc-фалов уходит время, хотя и единоразово. А вот на создание машинного кода - каждый раз тратиться время.
3. не-оптимально написанная программа: глобальные переменные вместо локальных, вызов функций в цикле, ...
4. GIL?
x. ...пишите ваши варианты, буду добавлять

Многие могут не согласиться, но это не только мое мнение:
т.к. в питоне часто более красивый код выполняется медленнее чем более сложный и запутанный - хотя это противоречит самой концепции питона. Например, встречал совет: не делать функцию в цикле, тк каждый вызов функции отнимает время. Но если функционал функции засунуть в цикл - цикл получается монстрообразным, ведь в питоне нет скобок все регулируется отступами. Перенесли код функции в цикл и у нас код "убежал" далеко вправо. Его неудобно читать, т.к. не видно работу самого цикла...
Вот и получается что медлительность питона заложница читаемости питона, и эта ситуация запечатана концепцией языка.

Все(если что-то упустил - поправляйте) способы ускорения Python(CPython):

(сортировка списка - произвольная)

стандартные средства ускорения python

стандартные - как я посчитал. А вообще вопрос об их стандартности открыт

1. опимизация кода посредством понимания самого языка
еще пример

2. компиляция текстовых py-файлов в pyc-файлы(байт-код)
2.2. компиляция py-файлов с ключами -O и -OO в оптимизированный байт код pyo-файлы.

3. Numpy - Numerical Python расширение python для быстрой работы с массивами(типа MATLAB).

Суть: пакет реализует удобную работу с массивами + ускорение(но как по мне - он мог бы работать быстрее)
ссылки (для просмотра содержимого нажмите на ссылку)
Основные пакеты дополняющие Numpy это SciPy и Matplotlib.
скачать последнюю варсию можно с sourceforge.net
Инфо с sourceforge.net Numarray and Numeric are no longer supported.
сайт проекта numpy.scipy.org - на который указывает страничка с sourceforge.net - у меня не открывается,
сам scipy.org - открывается
и документашка с сайта - Numpy Reference - целых 625 страниц! тоже открывается.
еще есть отдельная целая книга Numpy book- на 378 страниц
еще один сайт проекта numpy.org - наверное это новый домашний адрес проекты.
судя по всему проект numpy отделился от проекта ScyPy, а старые ссылка убрать забыли...
4. переход на python 3 - ускоряет работу программ.
Тип decimal в Python 3 он стал работать в 20-120 раз быстрее, так как переписан с Python на С.
Улучшенный GIL - означает лучшую работу с многопоточностью стандартными средствами языка (без необходимости подключения специальных фич типа parallel python)
Реализованы аннотации(т.е. явное, необязательное объявление типов) данных - которые, как я думаю, будут использованы на этапе компиляции в машинный код для ускорения.
Но эту инфу нужно подтвердить, т.к. в док-ии сказано что их назначении в другом(но использовать аннотации еще и для ускорения - было бы очень логично, как мне кажется).
...


проекты компиляции в С и/или использующие С-библиотеки:

1. ускорение посредством Cython.
Cython - это специальный язык программирования. По сути это тот же Python, но в котором типы данных можно объявлять явно.
Предок Cython - это Pyrex.
Способы использования:
1.1. pyx-файлы. В них для компилятора Cython - явно указываются типы данных использованы в Python скрипте.
1.2. компиляция через setup
1.3. компиляция налету

2. ctypes - библиотека для python, позволяющая подключать C-библиотеки(и не только...)
отличная статья с примером и тестами скорости
вариант алгоритма использования: (для просмотра содержимого нажмите на ссылку)
находим узкие места посредством CProfiles,
переписываем эти функции на С,
компилируем их в С-библиотеку,
делаем import полученной библиотеки в python,
...,
profit в скорости

3. Shed skin - транслятор Python в оптимизированное C++ представление. Может транслировать только статические типы данных приложений на Python в код C++. Может генерировать как самостоятельные приложения, так и модули расширения, которые могут быть импортированы в большие приложения на языке Python.

Важным достоинством проекта, является возможность быстрой разработки программ на высокоуровневом языке программирования (Python), с последующей трансляцией кода в C++, что после компилирования, позволяет увеличить быстродействие созданных приложений.
Главное отличие от проекта PyPy, Shed Skin позволяет сэкономить оперативную память.


4. pyinline - позволяет запускать сторонний код(не обязательно Сишный) внутри питоновского скрипта.
Домашняя страница проекта + пример

5. weave - позволяет запускать Си-шный код внутри питоновского скрипта. Является под-проектом SciPy.org
очень коротко о проекте

6. Проект HOPE - HOPE представляет собой JIT-компилятор, оформленный в виде модуля на языке Python, транслирующий специально отмеченные блоки кода в представление на языке C++ и на лету компилирующий их в машинный код. При первом запуске Python-скрипта при помощи пакета setuptools и штатного C++ инструментария выполняется компиляция HOPE-блоков в форму разделяемой библиотеки, после чего результат кэшируется при последующих вызовах. Обрабатываемые при помощи HOPE функции помечаются специальным декоратором "@jit" или вызываются с использованием функции jit().
Пример: (для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

from hope import jit

@jit
def sum(x, y):
    return x + y

или

Код: Выделить всё

def sum(x, y):
       return x + y

   sum_opt = jit(sum)
Разработчики из Института астрономии и исследовательской лаборатории космологии Швейцарской высшей технической школы Цюриха открыли исходные тексты проекта HOPE, разработанного для ускорения выполнения программных систем на языке Python, используемых для астрономических вычислений.
Подробнее о проекте на русском

7. Boost - библиотека инноваций(написана на С++).
Позволяет выполнять код на С++ из Python и наоборот(пример).
А еще у нее есть модуль реализующий многопоточность(см. далее).

8. Nuitka is a Python compiler.
Right now Nuitka is a good replacement for the Python interpreter and compiles every construct that CPython 2.6, 2.7, 3.2, 3.3 and 3.4 offer.
It translates the Python into a C++ program that then uses "libpython" to execute in the same way as CPython does, in a very compatible way.

9. SWIG - свободный инструмент для связывания программ и библиотек, написанных на языках C и C++, с интерпретируемыми (Tcl, Perl, Python, Ruby, PHP) или компилируемыми (Java, C#, Scheme, OCaml) языками.


ускорение путем многопоточности


Многопоточность бывает посредством:
[*] программного запуска в несколько потоков((см.так же MPI - Message Passing Interface))
[*] многопроцессорная или многоядерная(в одном проце) многопоточность или распределенная в кластер(см.так же SMP - Symmetric multiprocessing)
[*] многопоточность посредством многоядерности графического процессора (например CUDA,...)

Итак:
1. OpenACC - стандарт, описывающий набор директив для написания гетерогенных программ, задействующих как центральный, так и графический процессор.
Этот набор библиотек старается использовать все доступные технологии: CUDA, MPI, SMP,...
Например: позволяет путем вставки пары препроцессорных инструкций в с-код(python-код?) - автоматически выполнять его на GPU(CUDA).

2. CUDA - программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.
Т.е. эта фица доступна только для видеокарт Nvidia. (у кого - не Nvidia - может купить специальный внешнее устройство Nvidia)
pyCUDA - использование CUDA в питоне
NumbaPRO - High-Performance Python with CUDA Acceleration.

3. Stackless - патчи к Python для многопоточности.
Далее цитаты взял отсюда, там же есть пример.

"Stackless Python — это усовершенствованная версия интерпретатора Python. Она позволяет программисту пользоваться преимуществами многопоточного программирования без снижения производительности на примитивах синхронизации и без проблем с «гонками» (race conditions). "

"С точки зрения программиста, создание тасклета (микропотока в терминах Stackless) ничем не отличается от создания нового потока операционной системы: stackless.tasklet(your_func)(1, 2, 3)."


4. parallel python - он же PP. Далее цитата: "PP is a python module which provides mechanism for parallel execution of python code on SMP (systems with multiple processors or cores) and clusters (computers connected via network). "
А вот пример применения с хабры

5. Pypar - is an efficient but easy-to-use module that allows programs written in Python to run in parallel on multiple processors and communicate using message passing. Pypar provides bindings to a subset of the message passing interface standard MPI.


6. pyMPI - project integrating the Message Passing Interface (MPI) into the Python interpreter.

7. Boost - библиотека инноваций(написана на С++).
Для python есть Boost.python. В составе этой библиотеки есть модуль Boost.MPI - реализующий многопоточность.
смотрим libboost-mpi-python1.40.0 из библиотеки boost1.40 для Ubuntu
пример использования из документации

Код: Выделить всё

import boost.mpi as mpi
print "I am process %d of %d." % (mpi.rank, mpi.size)
8. multiprocessing - модуль, который имитирует семантику стандартного модуля threading, но использует процессы вместо потоков.
пример: (для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool(5)
    print(p.map(f, [1, 2, 3]))

9. другие примеры реализации многопоточности в python используя Cython, Numa, NuPy в сравнении с C++

проекты использующие LLVM и JIT

LLVM для трансляции Python код в байт-код(IR), а затем JIT компилирцет его в машинны код.
Но заодно: кеширует часто используемые участки, запоминает типизацию, строит структуру процессов,... вобщем делает все чтобы работало быстрее.
LLVM это: (для просмотра содержимого нажмите на ссылку)
LLVM - это универсальная система анализа, трансформации и оптимизации программ, написанных на различных языках в машинное представление или, как её называют разработчики, «compiler infrastucture». В основе LLVM лежит промежуточное представление кода (intermediate representation, IR), над которым можно производить трансформации во время компиляции, компоновки (linking) и выполнения. Из этого представления генерируется оптимизированный машинный код для целого ряда платформ, как статически, так и динамически (JIT-компиляция).
Главная задача JIT - реализация работы единого байт-кода на различных архитектурах.

Чтобы понять, что делает LLVM - перечислю часть алгоритмов(взято отсюда):

Все алгоритмі платформо-независимы и преобразуют IR. Проходы оптимизатора могут быть вызваны независимо в нужном порядке.

Удаление неиспользуемого кода (dead code elimination).
Выделение одинаковых подвыражений (common subexpression elimination).
Распространение констант (constant propagation, condition propagation).
Инлайн-подстановка функций.
Разворот хвостовой рекурсии. LLVM также умеет в некоторых случаях разворачивать не хвостовые рекурсивные вызовы за счёт ввода дополнительной переменной-аккумулятора, как это зачастую делают в функциональных языках.
Раскрутка и размыкание циклов, вынос инвариантов за пределы цикла.

Преобразование может быть не только оптимизирующим, но и использоваться для анализа и инструментации. Например, LLVM может генерировать CFG в формате Graphviz.


LLVM написана на C++ как и сам питон.
LLVM состоит из нескольких исполняемых файлов, использующих libLLVM2.x.so (ядро).
opt — инструмент, оперирующий байткодом. В нем существуют уровни оптимизации O0, O1, O2 и O3(очень смахивает на уровни оптимизации в компиляторе С).
llc — кодогенератор из байткода в ассемблер целевой машины. Выполняет машинно-зависимые оптимизации. Так же существуют уровни оптимизации O0, O1, O2 и O3.
...

IR - подобен специальному(потому что на нем никто не программирует) языку программирования типа Ассемблер, но с возможностями более высокоуровневых языков.
Подробнее о IR в примере использования LLVM и еще более подробно
Сайт проекта - llvm.org

Чтобы понять что делает - приведу распространенный подход JIT(взято отсюда):

* Определить байткод, который запускается часто.
* Скомпилировать его в нативный машинный код.
* Закэшировать результат.
* Всегда когда необходимо запустить тот же самый байткод, использовать уже скомпилированный машинный код и пожинать плоды (в частности, прирост скорости).

Цитата с вики: "Apple и Google являются одними из основных спонсоров проекта LLVM"
аналог LLVM от Microsoft Phoenix
Между прочим где-то читал о направлении развития процессоров в сторону большей абстракции для выполнения более высокоуровневых команд типа команд IR или ассемблера, а затем С, а затем...


для тех кто всерьез решил разобраться в тонкостях LLVM рекомендую прочесть серию статей(хотя речь в них не о питоне):
LLST: Новая жизнь Little Smalltalk
Внутреннее устройство llst, часть 1. Введение в Smalltalk tutorial
Внутреннее устройство llst, часть 2 или Little Smalltalk + LLVM = ♥
и самая интересная (в рамках топика):
Внутреннее устройство llst, часть 3. Магия JIT, или как ускорить виртуальную машину в 50 раз
//-----------------------------------------------------------------------------------------------------------------
1. Numba - еще один компилятор Python спонсируемый фирмой Continuum Analytics, Inc

Эту штуку очень пиарят в разных частях и-нета как весьма перспективную.
В отличие от Cython - нумба может самостоятельно определять типы использованных в python-e данных(пример).
А еще в Numba можно реализовать многопоточность и процессорную и графическую(см. NumbaPRO).

Рекомендую отличные статьи сравнения скоростей Numba и Cython: статья 1, продолжение часть 2
Не понимаю зачем фирма Continuum Analytics, Inc влила деньги в разработку Numba,
если она могла влить деньги в уже готовый PyPy и получила бы на много больше...?
2. Psyco - JIT-компилятор языка Python. Проект закрыт и устарел.
Вместо него на странице самого проекта Psyco - рекомендуют использовать PyPy.
тут в wiki написано "PyPy является продолжением проекта Psyco, JIT-компилятора для Python",
хотя тут в wiki написано "Существуют реализации языка Python, вводящие высокопроизводительные виртуальные машины (ВМ) в качестве бэк-энда компилятора. Примерами таких реализаций может служить PyPy, базирующийся на LLVM; более ранней инициативой является проект Parrot.".
Т.е. можно ошибочно прийти к вводу что предком PyPy является виртуальная машина Parrot.



3. PyPy - особый интерпретатор языка программирования Python(не путать с PyPI - Python Package Index)
очень перспекцивный проект (для просмотра содержимого нажмите на ссылку)
тот самый интерпретатор языка программирования Python, который написан на Python и может компилировать сам себя,
что уменьшает затраты на изменения языка и постановку экспериментов над новыми возможностями.
Вообще-то PyPy можно было-бы определить в раздел работы С++,
но изюминка(как для меня) этого проекта не в возможности трансляции кода Python в С,
а в возможности трансляции кода Python в машинный код
С вики "Тот факт, что PyPy реализован на языке высокого уровня, делает его более гибким и позволяет легче экспериментировать с новыми возможностями, чем CPython, а также легко определить области, где он может быть улучшен."
PyPy состоит из интерпретатора и транслятора.
Интерпретатор - по сути из кода Python делает код RPython(Restricted Python). RPython - этот тот же питон только статически типизированный. По сути это аналог Cython-a, но делается автоматически.


Транслятор - типизированной код RPython - переводит в языки более низкого уровня, такие как C, байт-код Java или CIL. Он также поддерживает подключаемые сборщики мусора и позволяет опционально включать Stackless. Также он включает JIT-компилятор для трансляции кода в машинные инструкции во время исполнения программы.

Интересно что ctypes может работать с PyPy. А еще имеется некая совместимость с Cython-ом.
Доходчивое объяснение "что такое PyPy от простого к сложному"

Цитата с вики: Начиная с 0.9.0, возможна полностью автоматическая трансляция интерпретатора на Си, в результате чего достигается скорость, приемлемая для использования (в 2—3 раза медленнее чем CPython при отключённом JIT для версии 0.9.9). JIT находится в активной доработке.
4. Numexpr использует собственную виртуальную машину, написанную на C, и собственный JIT компилятор.
Это позволяет ему принимать простые математические выражения в виде строки, компилировать и быстро вычислять.
Но ка ни странно: мало информации о проекте. Даже на вики статьи нет!

5. Pyston - Pyston is a new, under-development Python implementation built using LLVM and modern JIT techniques with the goal of achieving good performance.
сайт pyston.org

Другие возможности ускорения

1. PyASM - Pyasm является полнофункциональным динамический ассемблером, полностью написан на языке Python. К динамическим, в смысле, что он может быть использован для создания и выполнения машинного кода в Python во время выполнения, без необходимости генерации объектных файлов и линковки.

2. PyASM2 - (далее как я понял) Assembler для Python для архитектуры х86, SSE и SSE2 (компилируемый виртуальной машиной Java(JVM)? ... но тогда это не питон, а Jython...?).
Не очень разобрался, но очень интересная штука! На сайте написано, что этот проект - "не потомок проекта pyASM или Pyasm".
В описании написано "pyasm2 - x86 assembler library (C) 2012 Jurriaan Bremer"
"Java Disassembler & Assembler Engine (C) 2012 Jurriaan Bremer"

3. для решения проблем с GIL рекомендуют использование IronPython или Jython, лишённых этой особенности классического Python.

4. проект Unladen Swallow - который поначалу поддерживался сотрудниками Google, приказал долго жить. Поэтому его стоит обходить стороной, а информацию по нем считать безнадежно устаревшей.

Связанные проекты

Нижеперечисленные проекты - не являются ускорителями python,
но они имеют (опосредованное) отношение к теме - поэтому часто встречаются в поиске по теме ускорения python
(в частности я решил их описать чтобы отделить мух от меда. Так вот дальше будут мухи...)

IPython - интерактивная оболочка для языка программирования Python.

Pychecker - поможет проанализировать исходный код на Python и выдать рекомендации по найденным проблемам (например, неиспользуемые имена, изменение сигнатуры метода при его перегрузке и т. п.). В ходе такого статического анализа исходного кода могут быть выявлены и ошибки.

Pylint призван решать задачи близкие Pychecker, но имеет уклон в сторону проверки стиля кода, поиска кода с запашком.

CProfile, profile, hotshot - модули питона служащие для сбора и анализа статистики работы программ на питоне. Например перед применением тяжелой артилерии типа PyASM - не кисло было бы провести оптимизацию python кода. Элементарно посмотреть какая часть кода выполняется дольше всего, можно ли ее переписать более оптимально?


Anaconda пакет всего полезного для серьезной работы с питоном (conda, SciPy, Pandas, IPython, Matplotlib, Blaze, Boken,...).
Но этот пакет ставит свой питон и меняет для текущего пользователя ссылки переменных окружения с системного питона на питон в папке анаконды. Это чревато тем что новый питон не увидит установленных в системе дополнений в папках /usr/share/pyshare и других... Например мой скрипт image-to-gcode.py перестал видеть модули gcode, rs274, numpy, и многое другое... я это решил так:
дополнительные строчки в коде(хотя это вроде как не фэншуйно):

Код: Выделить всё

import sys
sys.path.insert(0, "/usr/lib/pymodules/python2.7")

LibJIT - библиотека для JIT-компиляции, позволяет компилировать фрагменты байт кода в машинный код во время исполнения программ.
Дизайн библиотеки Libjit содержит обширный набор средств, которые заботятся о процессе компиляции во время выполнения программы, не связывая программиста с языком или специфическими особенностями байт-кода.

В отличие от других систем, таких как JVM, .NET, Parrot и LLVM, LibJIT — это фундамент для создания виртуальных машин, динамических скриптовых языков.
Цель проекта LibJIT состоит в том, чтобы обеспечить набор средств компиляции на лету, не связывая программиста с языковыми специфическими особенностями.
python.jpg (11202 просмотра) <a class='original' href='./download/file.php?id=48104&sid=06774ca6ffecbbd7acc2b02988e785d6&mode=view' target=_blank>Загрузить оригинал (610.38 КБ)</a>
Для себя выбрал более подробно присмотреться к: CUDA, Numba, PyPy, PyASMx, ctypes, оптимизация средствами самого языка и компиляция с ключами -ОО (попробовал Cython - результат меня неудовлетворил)
Последний раз редактировалось Гармонист 02 янв 2016, 13:26, всего редактировалось 10 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: УСКОРЕНИЕ Python - все способы

Сообщение Nick »

Но все эти способы я так понимаю нужно встраивать в алгоритм работы, т.е. нет такого, чтобы написал - эту функцию надо ускорить, и вот с такими ограничениями и она бац и ускорлась сама?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: УСКОРЕНИЕ Python - все способы

Сообщение Serg »

Nick писал(а):т.е. нет такого, чтобы написал - эту функцию надо ускорить, и вот с такими ограничениями и она бац и ускорлась сама?
Есть, называется найм квалифицированного программиста. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Re: УСКОРЕНИЕ Python - все способы

Сообщение Гармонист »

Nick писал(а):Но все эти способы я так понимаю нужно встраивать в алгоритм работы, т.е. нет такого, чтобы написал - эту функцию надо ускорить, и вот с такими ограничениями и она бац и ускорлась сама?
есть, например Numba - прописываешь одну строку и вуаля - прирост скорости.
http://habrahabr.ru/post/238703/
...Например, для компилирования любой процедуры на Python достаточно всего лишь добавить аннотацию «jit». ...

Код: Выделить всё

@jit(double[:, :](double[:, :], double[:, :])) [color=#FF0000]# <<<--- вот эта строка добавлена[/color]
def spnbGetR(p, q):
    nP = p.shape[0]
    nQ = q.shape[1]
    
    R = np.empty((nP, nQ))    
    
    for i in xrange(nP):
        for j in xrange(nQ):
            rx = p[i, 0] - q[0, j]
            ry = p[i, 1] - q[1, j]
            rz = p[i, 2] - q[2, j]

            R[i, j] = 1 / (1 + sqrt(rx * rx + ry * ry + rz * rz))
    return R
те ты указываешь типы входных параметров, а numba определяет типы параметров внутри функции сам - типа почти автоматическая типизация.
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Re: УСКОРЕНИЕ Python - все способы

Сообщение Гармонист »

или посмотри проект HOPE (http://www.cosmology.ethz.ch/research/s ... /HOPE.html) и (http://pythonhosted.org/hope/index.html)
тоже добавляется только одна строка "@jit"
даже не нужно описывать типы!

...ну ладно - две строки, а не одна, т.к. еще нужно сделать from hope import jit
...хотя @jit - нужно ставить перед каждой функцией? ...но тоже не проблема


Пример с сайта:

Код: Выделить всё

from hope import jit

@jit
def sum(x, y):
    return x + y
надо бы сделать тесты скорости... :thinking:
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Re: УСКОРЕНИЕ Python - все способы

Сообщение Гармонист »

вот тут нашел интересный бенчмарк по теме
правда, делали его разработчики HOPE поэтому - ясен пень - он в тесте демонстрирует хорошие результаты...
но этот тест лучше чум ничего
Сравнение скоростей работы NumPy Numba Cython Nuitka PyPy HOPE C++ numexpr (11131 просмотр) <a class='original' href='./download/file.php?id=48642&sid=06774ca6ffecbbd7acc2b02988e785d6&mode=view' target=_blank>Загрузить оригинал (58.04 КБ)</a>
Сравнение скоростей работы NumPy Numba Cython Nuitka PyPy HOPE C++ numexpr
Сравнение скоростей работы NumPy Numba Cython Nuitka PyPy HOPE C++ numexpr (11131 просмотр) <a class='original' href='./download/file.php?id=48643&sid=06774ca6ffecbbd7acc2b02988e785d6&mode=view' target=_blank>Загрузить оригинал (58.38 КБ)</a>
Сравнение скоростей работы NumPy Numba Cython Nuitka PyPy HOPE C++ numexpr
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Ответить

Вернуться в «LinuxCNC»