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つを使用することが良い選択だと思うなら、私に知らせてください。
誰かが解決策を望んでいることを望みます。
ご回答いただきありがとうございます。これらの可能性をチェックします。 – cesarsalgado
プロファイリングインターフェイスは、おそらくあなたが探している情報を取得する最も直接的な方法です。特定のMPI実装が、交換された合計メッセージサイズのレポートを既に提供している可能性もあります。 –