2013-03-20 112 views
1

this answer to Multiprocessing.Pool makes Numpy matrix multiplication slower中,答案的作者在第二段中建議使用啓用的OpenMP指令重新編譯Numpy。 所以我的問題是:如何使用啓用的OpenMP指令重新編譯Numpy

  1. 你是怎麼做到的?
  2. 什麼是負面副作用?
  3. 您會推薦嗎?

搜索SO,我發現下面的帖子OpenMP and Python,這裏的答案解釋爲什麼在一般的Python沒有使用OpenMP的,由於GIL。但我認爲Numpy是一個不同的問題。

回答

2

儘管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編譯器,Oracle C編譯器,甚至Microsoft Visual C編譯器(儘管它停留在古老的OpenMP版本中)。閱讀Installation Manual瞭解詳細說明。