2017-02-16 3 views
3

私はグローバルな配列Aを持っていますが、その要素は最初、MPIプログラムの複数のプロセスにわたって不均一に広がっています。ロードバランシングのために、Aの要素を再分配して、各プロセスがほぼ同じ数の要素を保持したいと考えています。 Aの要素の順序は重要ではないので、並べ替えには大きな自由があります.Aのどの要素がどのプロセスに終わるのかとは関係ありません。私は、もちろん、転送をできるだけ速くしたいと思います。関数/プロセス間でデータを均等に再分配するアルゴリズム

この問題の標準名、標準的な解決法、または私のために解決できるMPI関数がありますか?

答えて

0

これは、すでに述べたように、通常、「負荷分散」と呼ばれます。

直接MPI関数はありません。算術演算や送受信が必要です。しかし、そこにかなりの数のライブラリがあり、それはよく分割されたドメインなどを与えます。 Metisは、メッシュまたはグラフベースのpartitonedに非常に人気があります。

あなたのケースでは、すべてのランクが異なる数のランクに(から)データの一部だけを送信(および受信)する必要があるという事実から問題が生じます。最初に1つのランクで完全なグローバルAを取得する可能性がある場合は、MPI_Scatterでそれを散布することができます。そうでなければ、あなたはいくつかの計算を実行する必要があります。すべてのランク

    • まず送信(MPI_Allgather)すべてのランクの要素数を各ランクが送信(受信)と誰(から)にすべきであるどのように多くの要素を数えます。
    • 送受信を行うか、片面通信を使用してください。
  • 関連する問題