- 元記事
- Russ Cox
- モチベーション
- シングルスレッドの時代
- メモリモデルとは
- 逐次一貫性
- 逐次一貫性のメンタルモデル
- x86 Total Store Order(x86-TSO)
- x86 Total Store Order に辿り着くまでには時間がかかった
- ARM/POWER Relaxed Memory Model
- Data-Race-Free Sequential Consistency
- まとめ
元記事
Russ Cox
モチベーション
- Russ Coxのメモリモデルのブログをベースに、Go memory model の内容を更新する Proposalが出ているのでそれを理解する
シングルスレッドの時代
どんどん高速化ができたが、やがてプロセッサの高速化ができなくなり、代わりにプロセッサの数を増やした。
参考:1980年代中盤以降のプロセッサの性能向上
メモリモデルとは
メモリに格納されたデータ変更の「可視性」と「一貫性」の保証ことを指す。元々メモリモデルは、ハードウェアがアセンブリで書かれたコードを保証することであり、コンパイラは関係なかったが、コンパイラを含むようになりより複雑になった。
逐次一貫性
Leslie Lamport は 1979 年に「マルチプロセスプログラムを正しく実行するマルチプロセッサ・コンピュータの作り方」という論文をだし、逐次一貫性のコンセプトを出した。
- マルチプロセスアルゴリズムの正確性は次の条件が満たされることを前提とする
- すべてのプロセッサの操作による実行結果は、順序が変わらないこと
- 個々のプロセッサの演算の順序は、プログラムにより指定された順序で表示されること
マルチプロセッサがこの条件を満たすことを`逐次一貫性`と呼び、このコンセプトは現在においても他に取って代わるものはない
逐次一貫性のメンタルモデル
毎回プロセッサはメモリから読み込みメモリへ書き込むたびに、そのリクエストは共有メモリへ送られ、全ての読み書きはシーケンシャルに行われる
x86 Total Store Order(x86-TSO)
メモリバリアにより保証される=
x86 Total Store Order に辿り着くまでには時間がかかった
Plan 9 は x86で動く(グローバルカーネルロックのない)最初のマルチプロセッサーOSであったが、1997年にマルチプロセッサの Prntium Pro へ移行する際、インテルのハードウェアデザイナーはメモリモデルに関して安定したものを出してくれず、x86-TSO が実装されるまでに約10年かかった。
ARM/POWER Relaxed Memory Model
よりゆるいメモリモデル
メモリバリアやコヒーレンスにより保証される
Data-Race-Free Sequential Consistency
Sarita Adve と Mark Hill は 1990年の論文で “弱い順序付け - 新しい定義” を提案した
これはハードウェアデザイナーへ明確な戦略を提供し、ハードウェアメモリモデルにおけるターニングポイントになった
Data Race Free の処理
まとめ
- Leslie Lamport の逐次一貫性(Sequential Consistency)すごい
- x86 のメモリモデルは x86-TSO
- x86-TSO ができるまでは大変な苦労があった
- ARM/POWER のメモリモデルはよりゆるい Relaxed Model
- 詳しくは書かれてないけどメモリバリアとコヒーレンスすごい
- Adve と Hill の DRF-SC すごい