# メモリ一貫性モデル
## 定義
メモリ一貫性モデル(memory consistency model)とは、共有メモリマルチプロセッサにおいて、あるプロセッサの書き込みが他のプロセッサからいつ観測可能になるか、すなわち異なるメモリ位置への読み書きの間にどのような順序制約を課すかを規定する性質である。キャッシュコヒーレンス([[キャッシュコヒーレンスプロトコル]])が単一アドレスへの読み書きの整合性(「何が読めるか」)を扱うのに対し、コンシステンシは複数アドレス間の順序(「いつ読めるか」)を扱う、独立した性質である。最も直感的なモデルである逐次一貫性(sequential consistency)は、実行結果が「各プロセッサのメモリアクセスをプログラム順で保ちつつ、プロセッサ間で任意に interleave した」逐次実行と同じになることを要求する。この保証を素直に実装すると、ある書き込みが引き起こす無効化がすべて完了するまで次のメモリアクセスを遅延させる必要があり、性能上のコストが大きい。(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 5 Thread-Level Parallelism]] §5.6)
このコストを避けるため、実機の多くは「プログラムが同期化されている(synchronized、= 共有データへのすべてのアクセスが同期操作で順序づけられている、data-race-free)」という前提のもとで、読み書きの完了順序を緩和するモデルを採用する。緩和の度合いに応じてtotal store order(TSO、W→Rのみ緩和)・partial store order(PSO、W→R・W→Wを緩和)・weak ordering(4種の順序すべてを同期操作の前後でのみ保証)・release consistency(リリースコンシステンシ、acquire操作SAとrelease操作SRを区別し同期操作に関わる順序のみ保証)という系列に分かれる。RISC-V・Armv8・C/C++言語規格はrelease consistencyを採用しており、これは最も緩いモデルでありながら、同期化されたプログラムに対しては逐次一貫性と同じ実行結果を保証できる。(Source: §5.6)
## 横断的知見
- **本章が定式化する「逐次一貫性/緩和一貫性」の区分は、MITOCW教科書が示す「厳密一貫性(strict consistency)」というより広い分類の一事例である**。[[@2009__MITOCW__Principles of Computer System Design - Chapter 10 Consistency]] §10.1は、更新中の一時的な不変条件違反を外部から一切見せない性質を厳密一貫性と呼び、「第9章§9.1.6が触れたsequential consistencyとexternal time consistencyもいずれも厳密一貫性の例である」と位置づける。本章(CAQA6e)はこの「厳密一貫性」という一般概念には言及せず、代わりに逐次一貫性を出発点として緩和モデル(TSO・PSO・weak ordering・release consistency)へ至る実装志向のスペクトラムを詳述する。両者を突き合わせると、MITOCWは「一貫性モデルの厳しさ」という設計原則の系譜の中に逐次一貫性を位置づける一方、CAQA6eは逐次一貫性を起点に「どこまで緩めれば性能を稼げるか」という工学的スペクトラムを展開しており、同じ逐次一貫性という概念が、上位の分類体系(厳密一貫性の一種)と下位の実装スペクトラム(緩和モデル系列の起点)という異なる位置づけで登場する。(Source: [[@2009__MITOCW__Principles of Computer System Design - Chapter 10 Consistency]] §10.1, [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 5 Thread-Level Parallelism]] §5.6)
- **逐次一貫性のコストは定性的な言及(MITOCW)から定量的なサイクル数(CAQA6e)へと解像度が上がる**。MITOCWは書き込みスルーキャッシュが「待ち時間が性能のボトルネックになるため実際にはあまり使われない」と定性的に述べるにとどまるのに対し、本章は所有権確立50サイクル・無効化発行10サイクル×4・無効化完了応答80サイクルという具体的なタイミングモデルから、4プロセッサ共有時の逐次一貫性下での書き込みストールを170サイクルと算出し、緩和すれば所有権確立の50サイクルまで短縮できることを示す。同じ「逐次一貫性は遅い」という主張が、実務上の経験則(MITOCW)と工学的な定量モデル(CAQA6e)という異なる根拠づけで独立に裏づけられている。(Source: [[@2009__MITOCW__Principles of Computer System Design - Chapter 10 Consistency]] §10.2.1, [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 5 Thread-Level Parallelism]] §5.6)
## 未解決の問い
- 分散システム論の[[線形化可能性]](linearizability)は「あたかも単一コピーがアトミックに実行されるように振る舞う」ことを要求し、逐次一貫性と類似した「単一の大域順序への interleave 可能性」という構造を持つ。両者は歴史的に同じ系譜(逐次一貫性の定式化がハードウェアの文脈で先行し、後に分散システムの線形化可能性・外部一貫性へ拡張された)に属すると考えられるが、この系譜的関係を明示する一次資料はまだ ingest できていない。両概念の形式的な異同(線形化可能性が実時間順序を追加要求する点など)を documented な形で突き合わせる余地がある。
- release consistencyがRISC-V・Armv8・C/C++規格に共通して採用された背景には、コンパイラ最適化の自由度(§5.7「Compiler Optimization and the Consistency Model」)という論点があるが、本章はこれを「未解決の研究課題」と位置づけるにとどめる。実際にコンパイラが緩和モデルを活用した最適化でどの程度の性能向上を得ているかの実測データは、本章の範囲では確認できない。
- 投機実行を使って逐次一貫性のコストを隠す手法(§5.7、MIPS R10000の例)は、[[投機的実行とマイクロアーキテクチャサイドチャネル(Meltdown・Spectre)]]が扱うサイドチャネル脆弱性のリスクとどこまで独立に評価できるか。メモリ一貫性の投機的先行実行がSpectre系攻撃の攻撃面を広げる可能性について、本章は言及していない。
## 関連
- [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 5 Thread-Level Parallelism]] — 本概念の主要出典。逐次一貫性から緩和モデルまでの実装志向のスペクトラムを扱う。
- [[@2009__MITOCW__Principles of Computer System Design - Chapter 10 Consistency]] — 厳密一貫性/結果整合性という上位の分類体系の中に逐次一貫性を位置づける教科書。
- [[キャッシュコヒーレンスプロトコル]] — 単一アドレスの整合性を扱う姉妹概念。コンシステンシとは独立した性質。
- [[線形化可能性]] / [[直列化可能性]] — 分散システム論における類縁の一貫性モデル(未解決の問い参照)。
- [[RISC-V]] — release consistencyを一貫性モデルとして採用する命令セットアーキテクチャ。
## 出典
- [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 5 Thread-Level Parallelism]] §5.6, §5.7
- [[@2009__MITOCW__Principles of Computer System Design - Chapter 10 Consistency]] §10.1, §10.2.1