33

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

手头的问题令人尴尬地平行。长话短说,对我来说利用它的最简单方法是使用多个线程。主要的障碍几乎肯定是全局口译员锁(GIL)。

为了帮助设计这一点,有一个心智模型会很有用,在这个模型中,numpy操作可以预期在其持续时间内释放 GIL。为此,我很感激任何经验法则、注意事项、指针等。

万一这很重要,我在 Linux 上使用 64 位 Python 2.7.1,带有numpy1.5.1 和scipy0.9.0rc2,使用 Intel MKL 10.3.1 构建。

4

3 回答 3

6

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

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

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

于 2016-11-16T11:08:08.587 回答
5

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

另外,请查看此配方页面——它包含有关如何将 NumPy 与多线程一起使用的示例代码。

于 2011-06-01T12:30:06.883 回答
4

尴尬的平行?麻木?听起来像是PyCUDAPyOpenCL的不错选择。

于 2011-06-01T14:29:30.717 回答