一貫性モデル (ソフトウェア)
一方、TSOやPCでは、1つのプロセッサでフラグの書き込みが完了する前にフラグの読み出しが可能なため、この結果が得られる。
例Bでは、P2がP3に表示される前に書き込みの値を返すことができるため、PCでのみ可能となる。これは、他の2つのモデルでは不可能である。
上記のモデルでは、順序の一貫性を確保するために、セーフティネットやフェンスを用いて手動で制約をかけています。IBM370モデルでは、操作の間に手動で配置される特殊な直列化命令があります。これらの命令は、メモリ命令や分岐などの非メモリ命令で構成される。一方、TSOモデルやプロセッサ一貫性(PC)モデルではセーフティネットが用意されてないが、プログラマはリードモディファイ・ライトオペレーションを使用して、書き込みとそれに続く読み出しの間でプログラムの順序が維持されているように見せることができる。TSOの場合、すでにR-modify-Wの一部となっているRまたはWをR-modify-Wに置き換えれば、プログラム順序(PO)が維持されているように見えるが、これにはR-modify-WのWが読み取り値を返す「ダミー」であることが必要である。PCについても同様に、リードがライトに置き換えられたり、すでにR-modify-Wの一部になっていたりしても、プログラム順序(PO)は維持される。
しかし、この緩和だけを行使しても、コンパイラ最適化はできない。コンパイラ最適化には、プログラム順序(PO)内の任意の2つの操作を並べ替えることができる完全な柔軟性が必要なので、リードに対するライトの並べ替え機能は、この場合には十分に役立たない。
データの一貫性を保ち、各プロセッサが独自のメモリを持つスケーラブルなプロセッサシステムを実現するために、プロセッサの一貫性モデルが考案された。すべてのプロセッサは、あるプロセッサが行った書き込みを見る順序と、異なるプロセッサが同じ場所に書き込んだ書き込みを見る順序が一致している必要がある(コヒーレンスの維持)。しかし、異なるプロセッサが異なる場所に書き込んだ場合には、一貫性を保つ必要はない。
すべての書き込み操作は、すべてのメモリに対するいくつかのサブ書き込みに分割することができる。このようなメモリからの読み出しは、このメモリへの書き込みが完了する前に起こる可能性がある。そのため、読み込まれたデータが古くなってしまうことがある。したがってプロセッサ一貫性下のプロセッサは、古いストアをストールする必要があるときに、より新しいロードを実行することができる。
一貫性モデルの定義と分類には、発行と観測の2つの方法がある。
発行方式では、プロセスがオペレーションを発行する方法を定義する制限を記述する。
プロセスから見える操作の順序を定義する観測方式。
例えば、一貫性モデルでは、以前に発行された操作がすべて完了するまで、プロセスが操作を発行することはできないと定義することができる。一貫性モデルによって、適用される条件は異なる。ある一貫性モデルは、そのモデルのすべての条件とそれ以上の条件を必要とする場合、他のモデルよりも強いと考えることができる。言い換えれば、制約条件が少ないモデルは、弱い一貫性モデルと考えられうる。
これらのモデルは、ハードウェアがどのように配置されるべきかを定義し、プログラマがどのようにコーディングするべきかを高いレベルで定義する。選択されたモデルは、コンパイラがどのように命令を並べ替えるかにも影響してくる。一般的には、命令間の制御依存関係や同じ場所への書き込みが順序づけられていれば、コンパイラは必要に応じて命令を並べ替えることができる。しかし、以下に説明するモデルでは、ロード前の書き込みを順序変更できるものとできないものがある。
ハードウェアレベルで性能を向上させるためのアプローチとして、書き込みの後に読み出しを行うプログラム順序(PO)を緩和することで、書き込み操作のレイテンシーを効果的に隠すことができる。この種の緩和は、プロセッサからの以前の書き込みに対して、後続の読み取りの順序を緩和するという最適化に依存している。この緩和のために、XXXのようないくつかのプログラムは、逐次一貫性(SC)の結果を出すことができないかもしれない。一方、YYYのようなプログラムは、残りのプログラム順序制約が適用されているため、一貫した結果が得られることが期待される。
3つのモデルが該当する。IBM 370モデルは、最も厳格なモデルである。読み取りは、異なるアドレスへの先の書き込みの前に完了することができるが、すべてのプロセッサが書き込みを見ていない限り、書き込みの値を返すことは禁止されている。SPARC V8のTSO(total store ordering model)モデルは、IBM 370モデルを部分的に緩和したもので、同じ場所への他の書き込みに対して、自分のプロセッサの書き込みの値を返すことができる。前述のモデルと同様に、これもすべてのプロセッサが書き込みを見ていない限り、書き込みの値を返すことはできない。プロセッサ一貫性モデル(PC)は、3つのモデルの中で最も緩和されたモデルであり、両方の制約を緩和して、他のプロセッサから見えるようになる前であっても、以前の書き込みよりも先に読み取りが完了できるようにしている。
例Aでは、IBM 370ではwrite(A)が完了するまでread(A)が発行されないため、この結果はIBM 370でのみ可能である。