2011-02-06 8 views
2

http://bccd.net/でダウンロードできるBCCD(ブート可能なクラスタCD)を使用してクラスタとして設定した24台のコンピュータで、分散クラスタリングアルゴリズム(MPIで実装)を試しています。私のMPIプログラムが送信するデータの量を測定する方法は?

私は実験を実行するためのバッチプログラムを書いています。このプログラムは、ノードの数と入力データのサイズを数回変えてアルゴリズムを実行します。

私のアルゴリズムを実行するたびにMPI通信で使用されるデータの量を知りたいので、前述のパラメータを変更したときのデータ量の変化を確認できます。そして、私はバッチプログラムを使ってこれをすべて自動的に実行したいと思います。

誰かが私にtcpdumpの使用を教えてくれましたが、このアプローチではいくつかの問題がありました。

まず、私のバッチプログラム(呼び出しを行うためにコマンドシステムを使ってC++で書かれている)でtcpdumpを呼び出す方法は分かりません。なぜなら、tcpdumpは別の端末が私のアプリケーション。ネットワークがスイッチを使用しているので、別のコンピュータでtcpdumpを実行することはできません。だから私はマスターノードでそれを実行する必要があります。

第2に、私の実験中にtcpdumpでトラフィックを見たので、MPIが使用していたポートは何か分からなかった。それは多くのポートを使用するようです。私はパッケージをフィルタリングするためにそれを知りたがっていました。

第3に、パッケージ全体をキャプチャしてtcpdumpを使用してファイルに保存しようとしましたが、数秒後にファイルが3.5MBになりました。しかし、私の全実験は2日かかります。この方法に従えば最終的なログファイルは膨大になります。

理想的なアプローチは、パッケージのヘッダーにあるサイズフィールドだけをキャプチャし、これを合計して、送信されたデータの総量を取得することです。そうすれば、ログファイルはパッケージ全体をキャプチャしている場合よりもはるかに小さくなります。しかし、私はそれを行う方法を知らない。

もう1つの制限は、私がコンピュータディスクにアクセスできないということです。だから私はRAMと私の4GBのUSBフラッシュドライブがあります。だから私は巨大なログファイルを持つことはできません。

私はすでに、http://www.open-mpi.org/faq/?category=perftoolsで言及されたような、いくつかのMPIトレースまたはプロファイリングツールの使用について考えています。今までSun Performance Analyzerだけをテストしました。問題は、これらのツールをBCCDにインストールすることは難しく、おそらく不可能かもしれないと私は思う。それに加えて、このツールを使用すると、私の実験の時間が長くなり、オーバーヘッドがかかります。しかし、誰かがBCCDに精通していて、それらのツールの1つを使用することが良い選択だと思うなら、私に知らせてください。

誰かが解決策を望んでいることを望みます。

答えて

2

通信にシャードメモリを使用するマルチコアノードがある場合、tcpdumpなどの実装は機能しません。

MPEのようなものを使用すると、ほぼ確実に行くことができます。これらのツールではオーバーヘッドはほとんどありません。メッセージを数えたい場合は、オーバーヘッドが必要になります。 mpitraceを使用すると、すべてのMPI呼び出しを書き出し、結果のテキストファイルを自分で解析することができます。ちなみに、MPEはbccd websiteで明示的に議論されています。 MPICH2にはMPEが組み込まれていますが、任意の実装用にコンパイルできます。私はMPEのために非常に控えめなオーバーヘッドしか見つけませんでした。

IPMは、メッセージとサイズを数える別の優れたツールです。 parse the XML output、または後処理ツールを使用して、graphs(rank_byx/bytes_tx、メッセージバッファサイズ/カウントグラフ)を手動で統合するだけです。 IPMのオーバーヘッドはMPEの場合よりも少なく、ファイルI/Oを実行するためにプログラムの実行が終了した後になります。

これらのアプローチのいずれかでオーバーヘッドが非常に心配だった場合は、MPI_Send、MPI_Recvなどをラップしたprofiling interfaceを使用して独自のMPIラッパーを作成し、各プロセスで送信および受信バイト数を数えるだけです最後にその合計だけを出力します。

+0

ご回答いただきありがとうございます。これらの可能性をチェックします。 – cesarsalgado

+0

プロファイリングインターフェイスは、おそらくあなたが探している情報を取得する最も直接的な方法です。特定のMPI実装が、交換された合計メッセージサイズのレポートを既に提供している可能性もあります。 –