MPI:コミュニケーターでノードの数(プロセスではない)を取得する
-
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
それらを直接比較します。
そうみたいです この質問 同じ懸念に対処します。
所属していません StackOverflow