私は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つの名前ハッシュ、それは問題を追跡するのが難しいでしょう)、またはプロセス間で何らかの合意アルゴリズムを使用してください(どちらが私にはまだわかりません)。
どうすれば可能ですか?
マチュー
ありがとうございます、あなたが言った質問は本当にかなり近いです。私はあなたが助言することをすると思います:プロセッサ名のハッシュを取得し、MPI_Gathervで2回目のチェックを行います。 – sunmat