メモリ
プログラムとデータを置く主記憶。DRAM。
DRAM と SRAM#
| DRAM(主記憶) | SRAM(キャッシュ) | |
|---|---|---|
| 1 bit の構成 | トランジスタ 1 + コンデンサ 1 | トランジスタ 6 |
| 密度 | 高い(安い) | 低い(高い) |
| 速度 | 遅い | 速い |
| リフレッシュ | 必要(電荷が漏れる) | 不要 |
DRAM は電荷を蓄えて記憶するので、 数ミリ秒ごとに読み直して書き戻す必要がある。 この間はアクセスできない。
メモリの壁#
CPU の性能は年 50% 以上向上した時期があったが、 DRAM のレイテンシは年 7% 程度しか改善しなかった。 差が指数的に開いたのがメモリの壁。
帯域は改善している(DDR、HBM)が、 レイテンシは物理的な制約でほとんど改善しない。 そのため
- キャッシュ階層を深くする
- プリフェッチで先読みする
- 多数のスレッドで待ち時間を隠す(GPU の方式)
といった「隠す」対策が中心になる。
アドレス空間#
プロセスが見るアドレスは仮想アドレスで、 MMU が物理アドレスに変換する。
高位 ┌──────────┐
│ スタック │ ↓ 伸びる
│ │
│ ヒープ │ ↑ 伸びる
│ データ │ 静的変数
│ テキスト │ 機械語
低位 └──────────┘参考文献#
- David A. Patterson, John L. Hennessy. Computer Organization and Design: RISC-V Edition, 2nd ed. Morgan Kaufmann, 2020.
- Randal E. Bryant, David R. O’Hallaron. Computer Systems: A Programmer’s Perspective, 3rd ed. Pearson, 2016. https://csapp.cs.cmu.edu/
- Wm. A. Wulf, Sally A. McKee. Hitting the memory wall. ACM SIGARCH Computer Architecture News 23(1), 1995. https://doi.org/10.1145/216585.216588