numpy和Global Interpreter Lock

时间:2011-06-01 11:31:48

标签: python multithreading numpy gil python-multithreading

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

手头的问题是embarrassingly parallel。简而言之,对我来说最简单的方法就是使用多线程。主要障碍几乎肯定是全球翻译锁(GIL)。

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

如果重要,我在Linux上使用64位Python 2.7.1,numpy 1.5.1和scipy 0.9.0rc2,使用英特尔MKL 10.3.1构建。< / p>

3 个答案:

答案 0 :(得分:7)

您可能会在the official wiki找到有关NumPy和并行编程的所有问题的答案。

另外,看看this recipe page - 它包含有关如何将NumPy用于多个线程的示例代码。

答案 1 :(得分:4)

令人尴尬的平行? NumPy的?听起来像是PyCUDAPyOpenCL的合适人选。

答案 2 :(得分:1)

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

您可以使用this question来查找您需要的例程是否是释放GIL的例程。简而言之,在源代码中搜索ALLOW_THREADSnogil

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