Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パタヘネ輪読: 第五章

kota-yata
December 01, 2024

パタヘネ輪読: 第五章

SFC RG Archでの輪読資料

kota-yata

December 01, 2024
Tweet

More Decks by kota-yata

Other Decks in Programming

Transcript

  1. 記憶の階層化 • レポートを書くために図書館に⾏き、レポートの内容に適した本を⾒つけ て机の横に積む • 最も必要であろう情報を近くに置いておき、それ以外は本棚に⽌まる ◦ これが階層化 • 必要であろう情報の性質

    = 局所性 ◦ 時間的局所性:ある情報が参照された時、それはまもなく再び参照される確率が⾼い ◦ 空間的局所性:ある情報が参照されたとき、その近くにある情報もまた参照される可能 性が⾼い 3 記憶の階層化とは?(図書館の例)
  2. DRAMへのアクセス 11 • ⾏アクセス ◦ DRAMの配列から1⾏選択し、それに対応するラインをアサートする ◦ その⾏内容が全て列ラッチに格納される • 列アクセス

    ◦ 列ラッチから対象の列を選択する • これがDRAMのアクセス時間の遅さの原因 読出の後に列ラッチを書き戻すことでリフレッシュできる
  3. ディスクメモリ 15 • 磁気ハードディスクは数枚のプラッタからなる ◦ 毎分5400-15000回転 • ディスクの⼀つの同⼼円をトラックという ◦ 盤⾯あたり数万本のトラック

    ◦ トラックはさらにセクターに分割される • フラッシュメモリのような書き込みによる劣化はない • ディスクコントローラーはキャッシュを持つ ◦ ヘッドを移動させる過程で通過するセクターの情報が格納される
  4. キャッシュのマッピング⽅式 18 • メモリのロケーションからキャッシュ中のロケーションを⼀意に求める ◦ ブロックアドレス % キャッシュ中のブロック数 • キャッシュ中のブロック数が2の冪乗であれば、ブロックアドレスの下位

    数ビットがキャッシュ中のインデックスになり都合が良い • インデックスとして使われなかった上位ビットをタグとして付加する ◦ キャッシュ中の⼀つのインデックスに複数メモリアドレスの内容が⼊りうるため ダイレクトマップ⽅式
  5. ダイレクトマップ 19 単純化した例:8ブロックからなるキャッシュ • メモリアドレス00001のキャッシュインデックスは001, タグは00 • メモリアドレス11001のキャッシュインデックスは001, タグは11 ◦

    MIPSにおいては、実際は最下位2ビットはワード内のバイトオフセット指定に使われる • キャッシュのブロックが有効かどうかは各インデックスに有効ビットを付加し て判断する ◦ プロセッサが⽴ち上がったばかりの場合など、ブロックが有効でない場合がある
  6. キャッシュへの書き込み 23 • 新しい値はキャッシュにのみ書き込まれる • そのブロックが置き換え対象になってはじめて主記憶にも書き込まれる • プロセッサからの書き込み要求が多い場合に有効 • ブロックを置き換える際にメモリアクセスを待つ時間をなくすため、ライ

    トバックバッファが⽤いられる ◦ 原理はライトバッファと同じ ◦ 置き換え対象のブロックをバッファに退避させ、新しいブロックをキャッシュに書く ◦ バッファがその後主記憶への書き込みを⾏う ライトバック(Write Back)
  7. キャッシュへの書き込み 24 • 書き込み先がキャッシュに存在しなかった場合、、 ◦ Write allocate: 主記憶に書き込んだのちキャッシュにも書き込む ◦ No

    write allocate: 主記憶にのみ書き込む • 書き込むデータが再び使われる可能性があるかどうかによる ◦ OSが主記憶中のページをゼロクリアする場合などはNo write allocateで問題ない キャッシュミスの取り扱い
  8. マッピングの⼯夫 29 • あるブロックを配置可能な場所がn箇所存在する ◦ これをn-way セットアソシアティブと呼ぶ • n個のブロックを配置可能なセットの連なりから構成される •

    ダイレクトマップとフルアソシアティブの中間的な構成 ◦ すべてセットアソシアティブ⽅式と考えることもできる セットアソシアティブ⽅式(セット連想ともいう)
  9. アソシアティブ⽅式における置き換えブロックの選択 30 • セット内のブロックのうち参照されたのが最も古いブロックを置き換え • 2-wayセットであれば1ビットで確実判断できる ◦ セット内の要素数が増えるにつれて正確にLeast Recentを判断するのは難しくなる ◦

    参照されたら参照ビットを⽴てて、置き換えの際に参照ビットが⽴っていないものを置 き換えるという⼿法もある • 他にもランダムにブロックを置き換えるランダム法も存在する LRU法(Least Recently Used)
  10. ページフォルト 35 • メモリアクセス時に主記憶にデータが存在しない場合 • ページフォルトが発⽣すると⼆次記憶にアクセスが発⽣する=激遅 ◦ 例外機構によってOSに制御が移り、⼆次記憶へのアクセスが発⽣ ◦ フラッシュメモリのアクセス時間はDRAMの100倍ほど

    • 対策としてページサイズを⼤きくする⽅法がある(⼤きくしすぎるのはNG) • 主記憶内にページをフルアソシアティブで配置する ◦ 任意の場所に配置でき置き換えが減る ◦ でも全数検索は遅いのでは。。。
  11. 仮想記憶における書き込みと置き換え 38 • ライトバック⽅式を取らざるを得ない • 置き換え時に無条件に書き戻すのではなく、dirty bitを参照する ◦ ページに書き込んだ際にdirty bitを⽴てる

    ◦ OSがそのページを置き換えるときにdirty bitが⽴っていれば⼆次記憶に書き込みを⾏う • 置き換えについては厳密にLRU法を適⽤するのはコストが⾼い ◦ メモリ参照のたびにデータ構造を更新するのはしんどい ◦ ページがアクセスされるたびに参照ビットを⽴て、それを基に置き換え対象を決める ◦ 参照ビットを⽤いない場合はソフトウェアのアルゴリズムに頼る
  12. 40

  13. マルチプロセッサのキャッシュにおける⼀貫性の問題 1. CPU AがブロックXを読み出す -> AのキャッシュにXが⼊る 2. CPU BがブロックXを読み出す ->

    BのキャッシュにXが⼊る 3. CPU AがブロックXに書き込む -> Aのキャッシュは更新される 次にCPU BがブロックXを読み出す時、Bのキャッシュは古いままなので古いXの値 を読み出してしまう 44
  14. ECC(10011010での例) 48 • 8ビットの値10011010で考える • この場合パリティビットは4ビット ◦ p1は最下位ビットが1のデータビットをチェックする(0001, 0011, 0101,

    0111, 1001…) ◦ p2は最下位から2番⽬のビットが1のデータビットをチェックする(0010, 0011, 0110…) ◦ p4は最下位から3番⽬のビットが1のデータビットをチェックする(0100, 0101, 0110…) ◦ …
  15. ECC(10011010での例) 49 • それぞれのパリティビットの値を⾒てみる ◦ p1はp1, d1, d2, d4, d5,

    d7をチェックするため0 ◦ p2はp2, d1, d3, d4, d6, d7をチェックするため1 ◦ p4はp4, d2, d3, d4, d8をチェックするため1 ◦ p8はp8, d5, d6, d7, d8をチェックするため0