私は、同じ大きな 配列(〜4 GB)をロードし、この配列の チャンクで完璧な並列処理を行う必要があるPythonアプリケーションを持っています。アレイはディスクに保存されます。同じノード内の共有メモリを使用するPythonハイブリッドマルチプロセッシング/ MPI
通常、このアプリケーションは、 のようなクラスターコンピューター上で実行します。各ノードには、8個の コンピューティングコアと約32GBの合計RAMがあります。
n = 80 mpi4pyという最も簡単な方法(うまくいかない)があります。それが動作しない理由は、 各MPIコアが4GBマップをロードするため、のRAMが32GBになるので、MemoryError
になります。しかし、このアプローチが原因でネットワーク 帯域幅の問題の遅い -
代替はrank=0
が 4GBの配列をロードする唯一のプロセスであり、そしてそれはMPIコアの残り に、配列のチャンクを出し農場ということです。
最善のアプローチは、各 ノード上の残りの7つのコアであれば1つのだけコア各ノード負荷 4GBのアレイと、このアレイは、(multiprocessing
介して?)共有メモリ として利用可能になるであろう。
どうすればこの問題を解決できますか? MPIにノード を認識させ、座標をmultiprocessing
にするにはどうすればよいですか?
私はそれを試していませんが、これは私に指摘されています: https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Array 'マルチプロセッシングでメモリを共有する方法' – dbrane
これは共有メモリを効果的にエミュレートしますが、メモリマップよりも遅いです。これは、プロキシ関数を使用して読み書きする同期処理(通信効率的ではありません)に依存するためです。また、線形代数が必要な場合、効率的なnumpy計算を使用することはできません。 –