1

バイナリツリーはC/MPIでどのように実装されていますか?特に、ツリーの欠落している部分をプロセッサに集めるにはどうすればよいですか?

長方形をN個のサブ長方形に分割したいとします。Nはプロセスの総数です。

私は2つのサブ長方形の分割から始めます(特定のルールによって与えられた方向と位置に沿って、ここでは気にしないでください)。左側の長方形はプロセス[0、mid_process]に割り当てられ、右側のサブ長方形は他のプロセスに割り当てられます。

次に、これら2つのサブ長方形の内側でこれを再帰的に実行し、最終的に現在のサブ長方形に1つのプロセスだけが残るようにします。

これを行うことにより、各プロセスは、それ自体からルートノードへのパスで構成されるツリーの「ローカル」部分を持つことになります。

ただし、後で、ツリーが構築されたら、各プロセス(つまり、各最終サブ長方形)に、隣接するプロセスを識別させたいと思います。

ツリー全体がローカルにあると仮定すると、これはツリーをトラバースすることで実行できます。各リーフについて、その空間範囲を確認し、その境界を、隣接するものを探しているサブ長方形の境界と比較します。

これは、ツリーの欠落している部分をどのように送受信するかがわからないということです。

分解の例と関連するツリー

この図は、11個のプロセス間の分解の例とそれに関連するバイナリツリーを示しています。

プロセス2だとしましょう。ローカルでは、メモリ内のツリーは次のノードで構成されています:[root]、[0-4]、[2-4]、[2]、ここで[]内の数字はプロセスのランク。プロセス[2]のネイバーは、[0]、1、[3]、[4]、[5]、[8]です。

4

0 に答える 0