2011-11-29 1 views
5

私はSMPスーパーコンピュータ上のMPIプログラムで作業しています。どのプロセスが同じノードを共有しているかを特定したいと思います。たとえば、同じノード上のすべてのプロセスで等しい整数キーを設定し、あるノードから別のプロセスに異なる整数キーを設定します。したがって、このキーを使用してコミュニケータを分割し、同じノード内のプロセスのみをサブコミュニケータに収集させることが目的です。MPI:コミュニケータのノード数(プロセスではない)を取得

だから、関数は、それが問題であるなど、Node_1の上0,1,2,3、node_2上4,5,6,7のようなプロセスの簡単な分布を仮定し

int identify_node(MPI_Comm* comm); // returns a key characterizing a node 

ようになります。単純な公式のものですが、私はその分布について何の前提もなく同じ結果を達成したいと思います。

私は、MPI_Get_processor_nameを使ってそれを行う方法を考えています:名前のハッシュを計算して、同じ名前のハッシュを得ることはないと仮定します(私は同じことを2つの名前ハッシュ、それは問題を追跡するのが難しいでしょう)、またはプロセス間で何らかの合意アルゴリズムを使用してください(どちらが私にはまだわかりません)。

どうすれば可能ですか?

マチュー

答えて

3

あなたはランクの並べ替えが実際にその規則性のコストでパフォーマンスを向上させるための新進気鋭の技術であるため、分布上の仮定は、賢明であろうことですね。

戻り値MPI_Get_processor_nameの良好なハッシングアルゴリズムはかなり安全ですが、再チェックしたい場合は、MPI_Gathervを使用して各グループ内の実際の名前を集めて直接比較することができます。

this questionは同じ懸念事項に対処しているようです。

+0

ありがとうございます、あなたが言った質問は本当にかなり近いです。私はあなたが助言することをすると思います:プロセッサ名のハッシュを取得し、MPI_Gathervで2回目のチェックを行います。 – sunmat

関連する問題