MPI:コミュニケーターでノードの数(プロセスではない)を取得する

StackOverflow https://stackoverflow.com/questions/8314000

  •  25-10-2019
  •  | 
  •  

質問

SMPスーパーコンピューターでMPIプログラムを使用しています。たとえば、同じノードのすべてのプロセスで等しい整数キーを設定し、ノードごとに異なる整数キーを設定することにより、どのプロセスが同じノードを共有しているかを特定したいと思います。目標は、このキーを使用してコミュニケーターを分割し、サブコミュニケーターに同じノード内のプロセスのみを収集させることです。

したがって、関数はどのようになります

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

node_1の0,1,2,3、node_2の4,5,6,7などのプロセスの単純な分布を仮定すると、それは単純な式の問題ですが、仮定なしで同じ結果を達成したいと思います分布について。

mpi_get_processor_nameを使用してそれを行う方法があります:名前のハッシュを計算して2つの名前が同じハッシュを取得しないと仮定します(いつか同じハッシュの2つの名前がある場合、問題を追跡するのが難しい)、またはプロセス全体で何らかの一致アルゴリズムを使用します(どちらか?まだわかりません)。

どうやってそれをしますか(可能であれば効率的に)?

マティュー

役に立ちましたか?

解決

ランクの並べ替えは、実際にはその規則性を犠牲にしてパフォーマンスを向上させるための有望な手法であるため、分布の仮定は賢明ではないことになるのは正しいことです。

の返品値に関する優れたハッシュアルゴリズム MPI_Get_processor_name かなり安全である必要がありますが、再確認したい場合は、各グループ内の実際の名前をいつでも収集することができます MPI_Gatherv それらを直接比較します。

そうみたいです この質問 同じ懸念に対処します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top