我即将编写一些计算密集型的Python代码,这些代码几乎肯定会花费大部分时间在numpy
的线性代数函数中。
手头的问题是embarrassingly parallel。长话短说,对我来说,利用这一点的最简单方法是使用多个线程。主要的障碍几乎肯定是全局解释器锁(GIL)。
为了帮助设计这一点,有一个心理模型将是有用的,对于这个模型,可以期望numpy
操作在其持续时间内释放GIL。为此,我会感谢任何经验法则,应该做的和不应该做的,指针等等。
如果重要的话,我在Linux上使用64位Python2.7.1,带有numpy
1.5.1和scipy
0.9.0rc2,使用IntelMKL10.3.1构建。
发布于 2011-06-01 20:30:07
您可能会找到关于the official wiki上的NumPy和并行编程的所有问题的答案。
另外,请看一下this recipe page --它包含关于如何在多线程中使用NumPy的示例代码。
发布于 2016-11-16 19:08:09
相当多的numpy例程释放了GIL,因此它们可以在线程中高效地并行(info)。也许你不需要做任何特别的事情!
您可以使用this question来确定您需要的例程是否在发布GIL的例程中。简而言之,在源代码中搜索ALLOW_THREADS
或nogil
。
(还要注意,MKL能够为一个例程使用多个线程,因此这是获得并行性的另一种简单方法,尽管可能不是最快的一种)。
https://stackoverflow.com/questions/6200437
复制相似问题