Использует ли Numpy многопроцессорность или openMP? - PullRequest
1 голос
/ 30 сентября 2019

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

Myпонимание состоит в том, что он использует расширения ЦП SIMD, но согласно некоторым , по крайней мере, некоторые из его функций используют многопроцессорность (через openMP?). С другой стороны, в SO ( пример ) есть много вопросов по ускорению операций над массивами numpy с помощью многопроцессорности.

Я не видел, чтобы numpy определенно использовал несколько ядер одновременноХотя, похоже, иногда используются два ядра (на 8-ядерном компьютере). Но, возможно, я использовал «неправильные» функции для этого или использовал их неправильно, или, может быть, мои матрицы слишком малы, чтобы это того стоило?

Поэтому возникает вопрос:

  • Существуют ли какие-нибудь непонятные функции, которые могут использовать несколько процессов на машине с общей памятью, либо через openMP, либо другими способами?

  • Если да, есть ли какие-топоместить в документацию numy с определенным списком этих функций?

  • И в этом случае, есть ли какая-то документация о том, что пользователь numpy должен был бы сделать, чтобы убедиться, что он использует вседоступные ядра ЦП или какое-то конкретное заранее определенное количество ядер?

Я знаю, что есть библиотеки, которые позволяют разбивать массивы и т.п. на несколько машин или вычислительных узлов, но я подозреваю, чтодля этого используется либо возможность обрабатывать больше данных, чем умещается в локальной оперативной памяти, либо ускорение обработки, превышающее то, чего может достичь одна многоядерная машинанакануне. Однако это не тот вопрос, о котором идет речь.

Обновление

С учетом комментария @talonmies (который заявляет, что по умолчанию такой функции нет в numpy, и онбудет зависеть от LAPACK и BLAS): Какой самый простой способ получить надлежащим образом скомпилированную версию NumPy, в которой используются несколько ядер ЦП (и, мы надеемся, также расширения SIMD)?

Или причина, по которой Numpy этого не делаетобычно многопроцессный, что большинство людей, для которых это важно, уже перешли на многопроцессорную обработку или такие вещи, как dask для явной обработки нескольких ядер вместо того, чтобы неявно ускорять только отдельные кусочки?

...