異種マルチスケール法(HMM)を使用してマルチスケール問題を解決しています。基本的に、私の特定の手順では、次の反復プロセスを使用します。
- 多くのローカル行列システムを解きます。
- ローカルシステムのソリューションから関心のある値を計算します。
- ローカルの「関心のある値」からグローバルマトリックスシステムを組み立てる
- グローバルマトリックスシステムを解く
- グローバルマトリックスシステムの解を使用して、新しいローカルマトリックスシステムを形成します。
いくつかの収束基準が満たされるまで繰り返します。
ローカルの(独立した)線形連立方程式は多数あり、複数のシステムがローカルRAMメモリに収まるので、複数の「ローカル」システムを各プロセッサにロードし、各システムを順番に解くことをお勧めします(この投稿された質問を参照)。
私の質問は、グローバルマトリックスシステムを組み立てて解決するための最良の戦略に関するものです。私の特定のケースでは、グローバルマトリックスシステムは、プロセッサのRAMメモリに完全に収まるほど小さいです。さらに、ローカル行列とグローバル行列は、反復の間にサイズを変更しません。したがって、私は3つの可能な戦略の1つを予測します。
- 「関心のある価値」を単一のプロセッサーに収集し、グローバルマトリックスシステムを1つのプロセッサーで順次アセンブル/解決します。
- 目的の値をすべてのプロセッサにコピーし、同じグローバルマトリックスシステムをすべてのプロセッサで順番にアセンブル/解決します。
- 各プロセッサがグローバルマトリックスの連続したブロックを生成するために必要な「関心のある値」を持っていると仮定すると、グローバルマトリックスのパーティションをローカルに組み立て、それらを並列に解くことができます。
各方法にはいくつかの利点/欠点があります。方法1では、解決フェーズで通信は必要ありませんが、ルートプロセッサとの通信がボトルネックになる可能性があります(特に大規模な場合)。方法2では、最初の方法よりもグローバルマトリックスをアセンブルするために、より多くのプロセッサ間通信が必要になる場合がありますが、解決フェーズまたはその後のローカルマトリックスアセンブリ段階では通信は必要ありません。方法3では、ローカルマトリックスまたはグローバルマトリックスのアセンブリにプロセッサ間通信は必要ありませんが、解決フェーズで必要です。