如何使用启用的OpenMP指令重新编译Numpy

时间:2013-03-20 18:13:19

标签: numpy openmp

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

  1. 你是怎么做到的?
  2. 什么可能是负面影响?
  3. 你会推荐吗?
  4. 搜索我发现了以下帖子OpenMP and Python,其中的答案解释了为什么由于GIL而在普通Python中没有使用OpenMP。但我认为Numpy是一个不同的问题。

1 个答案:

答案 0 :(得分:2)

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

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

为了让NumPy支持OpenMP,您必须拥有一个支持OpenMP的C编译器。现在大多数C编译器都支持OpenMP,这包括GCC,英特尔C编译器,Oracle C编译器,甚至Microsoft Visual C编译器(尽管它坚持使用古老的OpenMP版本)。请阅读Installation Manual以获取详细说明。