numpy 和全局解释器锁

发布于 2024-11-10 13:40:17 字数 403 浏览 6 评论 0 原文

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

当前的问题是令人尴尬的并行。长话短说,对我来说利用这一点的最简单方法是使用多线程。主要障碍几乎肯定是全局解释器锁(GIL)。

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

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

I am about to write some computationally-intensive Python code that'll almost certainly spend most of its time inside numpy's linear algebra functions.

The problem at hand is embarrassingly parallel. Long story short, the easiest way for me to take advantage of that would be by using multiple threads. The main barrier is almost certainly going to be the Global Interpreter Lock (GIL).

To help design this, it would be useful to have a mental model for which numpy operations can be expected to release the GIL for their duration. To this end, I'd appreciate any rules of thumb, dos and don'ts, pointers etc.

In case it matters, I'm using 64-bit Python 2.7.1 on Linux, with numpy 1.5.1 and scipy 0.9.0rc2, built with Intel MKL 10.3.1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

被翻牌 2024-11-17 13:40:17

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

您可以使用这个问题< /a> 来查找您需要的例程是否在释放 GIL 的例程中。简而言之,在源代码中搜索 ALLOW_THREADSnogil

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

Quite some numpy routines release GIL, so they can be efficiently parallel in threads (info). Maybe you don't need to do anything special!

You can use this question to find whether the routines you need are among the ones that release GIL. In short, search for ALLOW_THREADS or nogil in the source.

(Also note that MKL has the ability to use multiple threads for a routine, so that's another easy way to get parallelism, although possibly not the fastest kind).

尐籹人 2024-11-17 13:40:17

您可能会在官方 wiki

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

You will probably find answers to all your questions regarding NumPy and parallel programming on the official wiki.

Also, have a look at this recipe page -- it contains example code on how to use NumPy with multiple threads.

梦罢 2024-11-17 13:40:17

尴尬的平行?麻木?听起来像是 PyCUDAPyOpenCL

Embarrassingly parallel? Numpy? Sounds like a good candidate for PyCUDA or PyOpenCL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文