【问题标题】:How to recompile Numpy with enabled OpenMP directives如何使用启用的 OpenMP 指令重新编译 Numpy
【发布时间】:2013-03-10 00:29:03
【问题描述】:

this answer to Multiprocessing.Pool makes Numpy matrix multiplication slower 中,答案的作者在第二段中建议使用启用的 OpenMP 指令重新编译 Numpy。 所以我的问题是:

  1. 你是怎么做到的?
  2. 可能有哪些负面影响?
  3. 你会推荐吗?

搜索所以我发现下面的帖子OpenMP and Python,其中的答案解释了为什么由于 GIL 而在一般 Python 中没有使用 OpenMP。但我认为 Numpy 是一个不同的问题。

【问题讨论】:

    标签: numpy openmp


    【解决方案1】:

    虽然 Python 代码本身很难从并行运行中受益,但 NumPy 并不是用 Python 编写的。实际上,它是围绕一些非常成熟的数值计算库和其他数值算法的 Python 包装器,它们都用 Fortran 和 C 等编译语言实现。其中一些库已经提供了并行多线程版本(如英特尔 MKL 和 ATLAS,当用于在 NumPy 中提供 BLAS 和 LAPACK 实现。

    这个想法是,在 NumPy 程序中,Python 代码应该只用于驱动计算,而所有繁重的工作都应该在 C 或 Fortran 后端完成。如果您的程序没有将大部分运行时间花在 NumPy 例程中,那么Amdahl's law 将阻止您通过并行 NumPy 获得合理的加速。

    为了让 NumPy 支持 OpenMP,您必须拥有支持 OpenMP 的 C 编译器。现在大多数 C 编译器都支持 OpenMP,这包括 GCC、Intel C Compiler、Oracle C Compiler,甚至 Microsoft Visual C Compiler(尽管它停留在一个古老的 OpenMP 版本)。阅读Installation Manual 了解详细说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-28
      • 2012-08-13
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多