異なるプロセッサで生成された値から行列システムを並列に組み立てて解決する方法は?


10

異種マルチスケール法(HMM)を使用してマルチスケール問題を解決しています。基本的に、私の特定の手順では、次の反復プロセスを使用します。

  1. 多くのローカル行列システムを解きます。
  2. ローカルシステムのソリューションから関心のある値を計算します。
  3. ローカルの「関心のある値」からグローバルマトリックスシステムを組み立てる
  4. グローバルマトリックスシステムを解く
  5. グローバルマトリックスシステムの解を使用して、新しいローカルマトリックスシステムを形成します。

いくつかの収束基準が満たされるまで繰り返します。

ローカルの(独立した)線形連立方程式は多数あり、複数のシステムがローカルRAMメモリに収まるので、複数の「ローカル」システムを各プロセッサにロードし、各システムを順番に解くことをお勧めします(この投稿された質問を参照)。

私の質問は、グローバルマトリックスシステムを組み立てて解決するための最良の戦略に関するものです。私の特定のケースでは、グローバルマトリックスシステムは、プロセッサのRAMメモリに完全に収まるほど小さいです。さらに、ローカル行列とグローバル行列は、反復の間にサイズを変更しません。したがって、私は3つの可能な戦略の1つを予測します。

  1. 「関心のある価値」を単一のプロセッサーに収集し、グローバルマトリックスシステムを1つのプロセッサーで順次アセンブル/解決します。
  2. 目的の値をすべてのプロセッサにコピーし、同じグローバルマトリックスシステムをすべてのプロセッサで順番にアセンブル/解決します。
  3. 各プロセッサがグローバルマトリックスの連続したブロックを生成するために必要な「関心のある値」を持っていると仮定すると、グローバルマトリックスのパーティションをローカルに組み立て、それらを並列に解くことができます。

各方法にはいくつかの利点/欠点があります。方法1では、解決フェーズで通信は必要ありませんが、ルートプロセッサとの通信がボトルネックになる可能性があります(特に大規模な場合)。方法2では、最初の方法よりもグローバルマトリックスをアセンブルするために、より多くのプロセッサ間通信が必要になる場合がありますが、解決フェーズまたはその後のローカルマトリックスアセンブリ段階では通信は必要ありません。方法3では、ローカルマトリックスまたはグローバルマトリックスのアセンブリにプロセッサ間通信は必要ありませんが、解決フェーズで必要です。

103103103103103103


非常に興味深い質問です。私は誰かが良い答えを持っていると思います。
インクエスト

nkn×knkn

106

kn

k<100O(n)

回答:


4

ランク0で解決する必要があるケースはないと思います。小さな問題では、allreduceはreduceと同じくらい効率的であり、冗長計算には2つではなく1つしかないため、冗長解決はほとんど常に優れています。

ただし、すべてのノードで冗長計算するか、サブセットで計算するか、冗長サブセットで計算するかは、ハードウェアとシステムのサイズによって異なります。したがって、それらのすべてを実行できるシステムが必要です。PETScのPCREDUNDANTは、すべてのプロセス、一部のプロセス、またはプロセスのサブセットを並行して冗長に解決できます。

106


N=4096
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.