一貫性モデル (ソフトウェア)
因果一貫性(因果整合性)とは、イベントを因果関係のあるものとないものに分類することで、順序の整合性を弱めるモデルである。このモデルでは、因果関係のある書き込み操作だけが、すべてのプロセスから同じ順序で見られる必要があると定義している。
このモデルでは、プロセッサによる同時書き込みと、因果関係のない書き込みについて、逐次整合性(逐次一貫性)を緩和している。2つの書き込みが因果関係を持つのは、1つの変数への書き込みが、任意の変数への以前の書き込みに依存している場合、2つ目の書き込みを行うプロセッサが1つ目の書き込みを読んだばかりの場合である。2つの書き込みは、同じプロセッサで行われた場合もあれば、異なるプロセッサで行われた場合もある。
逐次整合性(逐次一貫性)と同様に、読み取りは変更を瞬時に反映させる必要はないが、変数へのすべての変更を逐次反映させる必要がある。
W1はW2とは因果関係がない。
W(x)1とW(x)2は、W(x)2の前にP2がxに対して行った読み取りにより、因果関係がある。
あるプロセスがデータ項目Xに対して書き込んだ値は、同じプロセスがデータ項目Xに対して行う連続した読み取り操作に対して常に利用可能である。
リリース一貫性モデルの一種である。クリティカルセクションへの進入・退出を明示するために、アクワイア(取得)命令とリリース(取得)命令を使用する必要がある。しかし、エントリ一貫性では、すべての共有変数に、その変数に固有の同期変数が割り当てられる。このようにして、変数xに対する取得のときだけ、そのプロセッサに関してxに関連するすべての操作を完了する必要がある。これにより、異なる共有変数の異なるクリティカルセクションの同時操作が可能となる。同一の共有変数に対するクリティカルな操作では同時性は見られない。このような一貫性モデルは、異なる行列要素を同時に処理できる場合に有効である。
遅い一貫性 では、あるプロセスがメモリの場所に以前に書き込まれた値を読み取ると、その後その場所から以前の値を読み取ることはできない。また、あるプロセスが行った書き込みは、そのプロセスがすぐに見ることができる。遅い一貫性は、PRAMやキャッシュコンシステンシーよりも弱いモデルである。
例: 遅いメモリーの図は、遅い一貫性の例を描いている。最初のプロセスがメモリロケーションXに1を書き込み、次にメモリロケーションYに1を書き込む。2番目のプロセスがYから1を読み込み、XがYより先に書き込まれたにもかかわらず、Xから0を読み込む。
Hutto, Phillip W., and Mustaque Ahamad (1990)は、適切なプログラミングによって、スローメモリ(一貫性)が表現力と効率性を持つことを説明している。彼らは、スローメモリには2つの価値ある特性があると述べている。それは、局所性と不可分的メモリからの削減をサポートすることである。彼らはスローメモリの表現力を示すために2つのアルゴリズムを提案している。
以下のモデルでは、プログラマーによる特定の同期を必要とする。