一貫性モデル (ソフトウェア)
緩和された整合性を分類する一つの方法は,どの逐次整合性要件を緩和するかを定義することである。Adve and Gharachorloo, 1996で定義されたプログラム順序や書き込み原子性の要件を緩和することで、より厳密ではないモデルを作ることができる。プログラム順序は、各プロセスがプログラムによって順序付けられたメモリ要求を発行することを保証し、書き込み不可分性は、メモリ要求が単一のFIFOキューの順序に基づいて処理されることを定義している。プログラム順序の緩和では、write-after-write、read-after-write、read/write-after-readのいずれかまたはすべての操作ペアの順序を緩和することができる。緩和された書き込みの不可分性モデルでは、プロセスは他のプロセッサよりも先に自分の書き込みを見ることができる。
プログラムの順序やアトミック性(不可分性)は、すべての読み取りと書き込みではなく、特定の操作に対してのみ維持される。これは、クリティカルセクションで行われるようなある種のメモリ操作は、クリティカルセクション内のすべての操作が完了するまで、すべてのプロセッサには見えないようにする必要があるという理解に基づいている。また、マルチプロセッサシステムで実行されるプログラムには、データレースが起こらないように必要な同期が含まれており、常に逐次一貫性の結果が得られるようになっていることを利用している。このように、弱い順序(ウィークオーダリング)では、同期操作以外の操作をデータ操作に分類することができる。
同期操作は、すべてのプロセッサによって行われた以前のすべての操作を完了して見たことを確認するために、プロセッサに信号を送信する。弱い順序を維持するために、同期操作の前の書き込み操作は、同期操作の前にグローバルに実行されなければならない。また、同期操作の後に存在する操作は、同期操作が完了した後にのみ実行されなければなりません。したがって、同期変数へのアクセスは逐次的に一貫しており、読み出しや書き込みは、以前の同期操作が完了した後にのみ実行されなければならない。このモデルでは、一貫性は緩和されない。これらの要件が満たされていれば、他のすべての「データ」操作の順序を変更することができる。
プログラム内の明示的な同期への高い依存度がある。弱い順序モデルでは、プログラマは、テスト&セット、fetch-and-op、ストア・コンディショナル、ロード・リンクなどのアトミック・ロック命令を使用するか、同期変数にラベルを付けるか、フェンスを使用しなければならない。