Numpy 使用多处理还是 openMP?

Zak*_*Zak 7 python numpy openmp multiprocessing

我已经使用 numpy 一段时间了,并且很喜欢它对向量和矩阵的简单操作比循环同一数组的元素要快得多。

我的理解是它使用 SIMD CPU 扩展,但根据一些人的说法,至少它的一些功能是利用多处理(通过 openMP?)。另一方面,关于通过使用多处理来加速 numpy 数组的操作(示例),这里有很多问题。

我还没有看到 numpy 确实同时使用多个核心,尽管看起来有时有两个核心(在 8 核机器上)正在使用。但我可能为此使用了“错误”的函数,或者以错误的方式使用它们,或者我的矩阵太小而不值得?

因此问题是:

  • 是否有一些 numpy 函数可以通过 openMP 或其他方式在共享内存机器上使用多个进程?

  • 如果是,numpy 文档中是否有某个地方包含这些函数的明确列表?

  • 在这种情况下,是否有一些文档说明 numpy 用户必须执行哪些操作才能确保他们使用所有可用的 CPU 核心或某些特定的预定数量的核心?

我知道有些库允许在多台机器或计算节点上拆分 numpy 数组等,但我怀疑其用例要么能够处理比本地 RAM 容纳的更多的数据,要么加快处理速度超过单个多核机器所能实现的。然而,这不是这个问题的目的。

更新

鉴于 @talonmies 的评论(他指出默认情况下 numpy 中没有这样的功能,并且它将依赖于 LAPACK 和 BLAS):What's the best way to get apropesly-compiled numpy version that make use of multiple CPU cores (and希望还有 SIMD 扩展)?

或者是为什么 numpy 通常不进行多处理,大多数对这很重要的人已经转而使用多处理或dask之类的东西来显式处理多个核心,而不是仅隐式加速 numpy 位?