0

私は、巨大なサンプルスペースをワーカースレッドに均等に分割し、並列でジョブを実行するMPIプログラムを使用しています。次のスクリプトを使用してジョブを送信しています。

#!/bin/bash
#PBS -l nodes=NNODES
mpirun -np NPROC ./run >log

クラスタのWebページから、ノードごとに10個のコアがあることがわかりました。100個のワーカースレッド(NPROC)が必要な場合は、10個のノード(NNODES)を要求するだけでよいと素朴に想定しています。ただし、NNODESを増やすと、実行中のプログラムのウォールタイムが減少し続けることがわかりました。

これは、ノードごとに複数のワーカースレッドではなく1を割り当てると、リソースの競合が少なくなるためだと思います。これが本当なら、NNODES == 100(NPROC)のときも壁時間は横ばいになると思いました。これは、ノードごとに1つのワーカースレッドがあり、ノードが増えても壁時間がさらに短縮されないためです。要求されたワーカースレッドより。

ただし、100(NPROC)を超えてNNODESをさらに増やすと、壁時間が再びほぼ直線的に減少するため、私は再び間違っています。ソースコードが実際に上記のスクリプトからNPROCを読み取り、サンプルをそれらに分割しているため、これは本当に混乱しました。ワーカースレッドよりも多くのノードを要求すると処理が速くなる理由がわかりません。

4

1 に答える 1

0

プログラムが大量の I/O を使用する場合、多数のノードを予約することによって他のジョブの実行を妨げるという副作用が観察される可能性があります。これにより、ネットワーク、ファイル システムなどの負荷が軽減され、ジョブより多くのリソースがあります。ただし、ジョブが CPU バウンドの場合、これは当てはまりません。

于 2013-10-12T12:55:10.570 に答える