numpy和Global Interpreter Lock

NPE*_*NPE 21 python multithreading numpy gil python-multithreading

我即将编写一些计算密集型的Python代码,几乎可以肯定它的大部分时间都花在了numpy线性代数函数中.

手头的问题令人尴尬地平行.简而言之,对我来说最简单的方法就是使用多线程.主要障碍几乎肯定是全球翻译锁(GIL).

为了帮助设计这个,有一个心理模型是有用的,numpy可以期望操作在其持续时间内释放GIL.为此,我会欣赏任何经验法则,注意事项,注意事​​项等.

如果它很重要,我在Linux上使用64位Python 2.7.1,使用numpy1.5.1和scipy0.9.0rc2,使用英特尔MKL 10.3.1构建.

Fer*_*yer 6

您可能会在官方维基上找到有关NumPy和并行编程的所有问题的答案.

另外,看看这个食谱页面 - 它包含有关如何将NumPy与多个线程一起使用的示例代码.

  • 我查看了wiki页面,并且绝对没有关于哪些numpy函数执行和不释放GIL的信息. (7认同)
  • 如果答案实际上包含答案,而不仅仅是在某个时间点可能会或可能不会引用有效答案的链接,那将是很好的.https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers (3认同)

dwe*_*h91 5

尴尬的平行?麻木?听起来像是PyCUDAPyOpenCL的良好候选者。


Mar*_*ark 5

相当多的 numpy 例程会释放 GIL,因此它们可以在线程 ( info ) 中有效地并行。也许你不需要做任何特别的事情!

您可以使用此问题来查找您需要的例程是否属于发布 GIL 的例程。简而言之,搜索ALLOW_THREADSnogil在源中。

(另请注意,MKL 能够为一个例程使用多个线程,因此这是另一种获得并行性的简单方法,尽管可能不是最快的一种)。

  • 信息链接已损坏,但它是一个网页,其中包含此 stackoverflow 答案的副本:/sf/answers/2553665901/ (2认同)