在this answer to Multiprocessing.Pool makes Numpy matrix multiplication slower
中,答案的作者在第二段中建议使用启用的OpenMP指令重新编译Numpy。
所以我的问题是:
搜索我发现了以下帖子OpenMP and Python,其中的答案解释了为什么由于GIL而在普通Python中没有使用OpenMP。但我认为Numpy是一个不同的问题。
答案 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以获取详细说明。