奇偶通信

問題

データの操作を完全に独立して行うことはできないが、サブセットのすべての操作を並列に実行できる 2 つのサブセットに分割することはできる。

コンテキスト

偏微分方程式のソルバーは、このパターンに従うように修正できます。例えば、最も近い地点とのみ通信する 2D グリッドの場合、グリッドをチェス盤とみなして、赤のマスと黒のマスを交互に更新することができます。

または、互い違いに配列されたグリッド (leap frog、蛙飛び) に、このパターンに適合する時間領域差分 (FDTD) ソルバーを使用します。examples/parallel_for/seismic/ のコードでは、このようなソルバーを使用しています。

影響

ソリューション

1 つのサブセットを更新した後、もう 1 つのサブセットを (交互に) 更新します。各サブセットに要素単位パターンを適用します。

サンプル

examples/parallel_for/seismic のサンプルは、原理を示しています。ここで、2 つの物理フィールド velocitystress は互いに依存しているため、同時に更新できません。ただし、velocity の計算は stress の値が固定である限り行うことができ、逆も同様です。このため、コードでは velocitystress フィールドを交互に更新します。更新はそれぞれ、tbb::parallel_for を使用して行われます。

参考資料

Eun-Gyu Kim および Mark Snir、"Odd-Even Communication Group"、http://snir.cs.illinois.edu/patterns/oddeven.pdf

関連情報