1

この回答Multiprocessing.Pool makes Numpy matrix multiplication slowerでは、回答の作成者は、2 番目の段落で、有効な OpenMP ディレクティブを使用して Numpy を再コンパイルすることを推奨しています。だから私の質問は:

  1. どうやってそれをしますか?
  2. マイナスの副作用は何ですか?
  3. それをお勧めしますか?

SO を検索すると、投稿OpenMP and Pythonに従って見つけました。答えは、GIL のために一般的な Python で OpenMP が使用されない理由を説明しています。しかし、Numpy は別の問題だと思います。

4

1 に答える 1

2

Python コード自体は並列実行によるメリットはほとんどありませんが、NumPy は Python で記述されていません。これは実際、Fortran や C などのコンパイル済み言語で実装された、非常に確立された数値計算ライブラリやその他の数値アルゴリズムの Python 的なラッパーです。 BLAS と LAPACK の実装を NumPy で提供します)。

NumPy プログラムでは、Python コードは計算を実行するためだけに使用し、重労働はすべて C または Fortran バックエンドで実行する必要があるという考えです。プログラムが実行時間のほとんどを NumPy ルーチン内で費やさない場合、アムダールの法則により、並列 NumPy で妥当なスピードアップを得ることができなくなります。

NumPy で OpenMP をサポートするには、OpenMP 対応の C コンパイラが必要です。現在、ほとんどの C コンパイラは OpenMP をサポートしており、これには GCC、Intel C Compiler、Oracle C Compiler、さらには Microsoft Visual C Compiler も含まれます (ただし、古い OpenMP バージョンのままです)。詳細な手順については、インストール マニュアルをお読みください。

于 2013-03-20T20:00:34.270 に答える