NumPy и Global Interpreter Lock - PullRequest
       43

NumPy и Global Interpreter Lock

21 голосов
/ 01 июня 2011

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

Проблема под рукой смущающе параллельна . Короче говоря, для меня проще всего воспользоваться этим, используя несколько потоков. Главным барьером почти наверняка будет Глобальная блокировка интерпретатора (GIL).

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

На случай, если это имеет значение, я использую 64-битный Python 2.7.1 в Linux с numpy 1.5.1 и scipy 0.9.0rc2, построенный с Intel MKL 10.3.1.

Ответы [ 3 ]

6 голосов
/ 01 июня 2011

Вы, вероятно, найдете ответы на все ваши вопросы относительно NumPy и параллельного программирования на официальной вики .

Также посмотрите на эту страницу рецепта -- он содержит пример кода о том, как использовать NumPy с несколькими потоками.

4 голосов
/ 01 июня 2011

смущающе параллельно? Numpy? Звучит как хороший кандидат на PyCUDA или PyOpenCL .

1 голос
/ 16 ноября 2016

Довольно много непонятных подпрограмм выпускают GIL, поэтому они могут быть эффективно параллельными в потоках ( info ). Может быть, вам не нужно делать ничего особенного!

Вы можете использовать этот вопрос , чтобы определить, входят ли нужные вам процедуры в число тех, которые выпускают GIL. Короче говоря, ищите ALLOW_THREADS или nogil в источнике.

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

...