1

8 つのノードがあり、各ノードに 8 つのコアがあるクラスターで openMPI-1.6 を使用しています。このコマンドを使用してアプリケーションを実行しています。

/path/to/mpirun --mca btl self,sm,tcp --hostfile $PBS_NODEFILE -np $num_core /path/to/application

実験を行ったところ、次のデータが得られました。

num node | num core per node | total core | exe time of application |
    1              2                2                8.5 sec
    1              4                4                5.3 sec
    1              8                8                7.1 sec

    2              1                2                11 sec
    2              2                4                9.5 sec
    2              4                8                44 sec //this is too slow

ご覧のとおり、最後の行 (2 ノード、8 コア) の実行時間は他の行よりも遅すぎます。複数のノードを使用するとオーバーヘッドが発生すると想定しましたが、この指数関数的な低下は予想していませんでした。

私の質問は、複数のノードを使用するクラスターでジョブを実行するために欠落している openMPI パフォーマンス パラメーターはありますか? mca btl self,sm,tcpパラメータは、ノード内の通信には shared-memory オプションを自動的に使用し、ノードの外部に送信される通信には 'tcp' オプションを使用すると仮定しました。私はそれを正しく理解していますか?

アプリケーションを知らずに判断するのは難しいことは承知していますが、アプリケーションに依存しない一般的なパラメータ チューニングを求めています。

4

1 に答える 1

1
  1. Open MPI は、ネットワークとノード トポロジに基づいて BTL の正しいリストを推測するのに非常に優れているため、一般に明示的に指定する必要はありません。
  2. Torque/PBS によって作成された hosts ファイルへのパスを指定します。それに応じてコンパイルされた場合、Open MPI は (モジュールを介して) Torque/PBS との緊密な統合をサポートしtm、hosts ファイルも MPI プロセスの数も指定する必要はありません。

あなたのコードは過去4つのMPIプロセスをスケーリングしていないようです。1 台のマシンで 4 つのプロセスよりも 8 つのプロセスを使用すると、実行速度が遅くなります。これは、メモリ帯域幅の飽和、または通信と計算の比率が高いことが原因である可能性があります (通常は、問題のサイズが小さすぎることを意味します)。もう少しコードを示さないと、どれが犯人かを判断するのは難しいですが、後者であると推測することはできます。TCP は、特にイーサネットのような低速ネットワークと組み合わせると、非常に高いレイテンシーを持ちます。

やがて、アルゴリズムの構造に基づいて特定のタイプのネットワークでこの種の不適切な動作を予測することを学びますが、その場合は、MPI プロファイリング ツールまたはトレース ツールを使用してプログラムの動作を調査することをお勧めします。そのようなツールのリストについては、この質問を参照してください。

于 2012-07-11T13:04:31.947 に答える