データの操作を完全に独立して行うことはできないが、サブセットのすべての操作を並列に実行できる 2 つのサブセットに分割することはできる。
偏微分方程式のソルバーは、このパターンに従うように修正できます。例えば、最も近い地点とのみ通信する 2D グリッドの場合、グリッドをチェス盤とみなして、赤のマスと黒のマスを交互に更新することができます。
または、互い違いに配列されたグリッド (leap frog、蛙飛び) に、このパターンに適合する時間領域差分 (FDTD) ソルバーを使用します。examples/parallel_for/seismic/ のコードでは、このようなソルバーを使用しています。
アイテム間の依存関係により 2 部グラフが形成されます。
1 つのサブセットを更新した後、もう 1 つのサブセットを (交互に) 更新します。各サブセットに要素単位パターンを適用します。
examples/parallel_for/seismic のサンプルは、原理を示しています。ここで、2 つの物理フィールド velocity と stress は互いに依存しているため、同時に更新できません。ただし、velocity の計算は stress の値が固定である限り行うことができ、逆も同様です。このため、コードでは velocity と stress フィールドを交互に更新します。更新はそれぞれ、tbb::parallel_for を使用して行われます。
Eun-Gyu Kim および Mark Snir、"Odd-Even Communication Group"、http://snir.cs.illinois.edu/patterns/oddeven.pdf