2016-12-14 16 views
1

コンテキスト:再シミュレーションファイルからシミュレーションを続行するときにMPIスレッドの数が変更されないようにするシミュレーションコードをデバッグしています。このコードは大規模なクラスタで実行されていましたが、小さなローカルマシンでデバッグしていますので、ジョブをキューに投入するまで待つ必要はありません。コードにはローカルマシン上のコア数を超える72スレッドが必要です。これは問題ではありません。コアよりも多くのスレッドで実行でき、デバッグ時に重要な問題ではないパフォーマンス・ヒットを取るだけです。コアよりスレッドが多い場合は、どのようにしてMPIをすべてのコアで実行しないようにしますか?

問題:他のタスクや他のユーザーのためにいくつかのコアを空けておきたい。たとえば、私の小さなローカルコンピュータに48コアがある場合、私は72コアを例えば36コアで動かし、12コアを解放したいと考えています。マシンを完全に乗っ取ることなく、大規模なコードをローカルでデバッグしたい。

私は、コアより多くのスレッドを実行するというメモリとパフォーマンスの問題に対処したいと考えていますが、実際にはどうしたらいいですか?何とかスケジューラのバックエンドに入る必要がありますか?それはMPICHやOpen-MPIなどを使用しているかどうかによって異なりますか?

私は基本的にmpirun -np 72 --cpus-per-proc 0.5のようなものを探しています。

答えて

2

taskset -c 0-35 mpiexec -np 72 ./a.outすべてのMPIディストリビューション(Open MPI、MPICH、Intel MPIなど)では、プロセスがすべて同じホスト上で起動する必要があります。また、MPIライブラリによるプロセスバインディングを無効にしてください。つまり、Open MPI 1.8+では--bind-to none、HydraではMPICHの場合は-bind-to none、Intel MPIの場合は-genv I_MPI_PIN=0となります。

関連する問題