Контакт с C++, “инициализированным, но не” предупреждение, на которое ссылаются, для разрушения помощников объема?

Это просто общий ответ, но слишком длинный для комментария ...

Прежде всего, я думаю, что вашим самым большим узким местом в данный момент является сам Python. Я не знаю, что делает do_work(), но если он интенсивно использует процессор, у вас есть GIL, который полностью предотвращает эффективное распараллеливание внутри одного процесса. Независимо от того, что вы делаете, потоки будут бороться за GIL, и это в конечном итоге сделает ваш код еще медленнее. Помните: Python имеет реальную многопоточность, но центральный процессор совместно используется внутри одного процесса. Я рекомендую проверить страницу Дэвида М Бизли: http://dabeaz.com/GIL/gilvis , который приложил много усилий для визуализации поведения GIL в Python.

С другой стороны, модуль multiprocessing позволяет запускать несколько процессов и «обходить» недостатки GIL, но будет сложно получить доступ к тем же ячейкам памяти без больших штрафов или компромиссов. [1110 ]

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

Подводя итог, я думаю, что код, который вы запускаете, может быть на несколько порядков быстрее со структурами numba и numpy.

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

14
задан Andrew Grant 21 October 2008 в 01:00
поделиться