メモリ・アーキテクチャ2

メモリ・アーキテクチャ2
キャッシュメモリ
「計算機アーキテクチャ」(第14回目)
今井慈郎(imai@eng.kagawa-u.ac.jp)
キャッシュメモリ(cache memory)
• CPU内部(or周辺)に設けられた高速小容量メモリ
• キャッシュメモリに使用頻度の高いデータを格納.
低速な主記憶へのアクセスを低減.結果として,
CPU処理を高速化
• 最近のCPUでは,キャッシュメモリをn段階(n種類)
搭載.CPUが,まず,i次キャッシュにデータを読み
に行き,もしデータがなければ,(i+1)次キャッシュ
へアクセス(i=1,2, n=2,3).
• i次キャッシュの速度> (i+1)次キャッシュの速度
• i次キャッシュの容量< (i+1)次キャッシュの容量
キャッシュ(cache)
• 使用頻度の高いデータを高速アクセス可能な記憶
装置に蓄えておくことで,いちいち低速な装置から読
み出す無駄を省いて高速化すること.また,その際
に使われる高速な記憶装置.
• (例)主記憶はハードディスクと比較すれば高速デー
タアクセスが可能.使用頻度の高い(入出力)データ
をメモリ内に保持.ハードディスク上にデータ総て置
いた場合よりも処理を高速化:主記憶がハードディス
クのキャッシュとして動作
• (例)通信では,低速な通信回線による読込み済み
データをハードディスクに蓄積:次からはハードディ
スクをキャッシュとして高速データ閲覧可能
キャッシュ(cache)
但し,単に「キャッシュ」と表記した場合,コンピュータ内の
主記憶(メインメモリ)よりもさらに高速アクセスが可能な
CPU内部に用意された「キャッシュメモリ」を指す場合が
一般的である.
ここでは,「キャッシュ」=「キャッシュメモリ」として
話を進める.
キャッシュメモリとは No1
• メモリシステムの高速化技法の1つであるキャッシン
グ(caching)に使われるメモリ
• データを遣り取りする2つのデバイス間に速度差が
存在すると,遅いほうのデバイスがボトルネックにな
り,速いほうのデバイスが本来の性能を発揮できな
い(相手の動作を待つため).
• この速度差を緩衝するのがキャッシュメモリの役目
キャッシュメモリとは No2
• メインメモリに使われているDRAMの速度はCPUに
比べて遅く,CPUの命令実行速度を下げる原因
• 問題解決のため,CPU・メインメモリ間にキャッシュメ
モリと呼ばれる高速&小容量メモリを配置
• CPUがアクセスする頻度の高いコード&データを可
能な限りキャッシュメモリに格納
• CPUがメインメモリのあるアドレスからデータを読み
込む時,キャッシュにそのデータを蓄積.その後,
CPUが再び同じアドレスからデータを読み込もうとし
たら,メインメモリの代わりにキャッシュからデータを
供給.CPUは低速なメインメモリに待たされることなく,
必要なデータを読み込める
キャッシュメモリとは No3
• 書き込みの場合は,「ライトスルー」や「ライトバック」
といったアルゴリズムによりキャッシュの性能は変化
• メモリシステムの高速化のため,キャッシュメモリを2
段,3段と重ねて実装する場合あり.
• 486以降のx86 CPUは1K~16Kbytes程度の1次キャッ
シュをCPU内部に内蔵
• IBM-PC互換機では,高速SRAMを用いて64K~
1Mbytes程度の2次キャッシュを実装
• CPUに内蔵されているキャッシュ:内部キャッシュ
CPUの外部に実装されるキャッシュ:外部キャッシュ
キャッシュメモリとは No4
• (少し学術的に表現すると)CPUなど処理装置が命
令やデータなどの情報を取得,更新する際に主記憶
やバスなどの遅延あるいは低帯域を隠蔽化させ,処
理装置と記憶装置の性能差を埋めるために用いる
高速小容量メモリ・・・これを「キャッシュメモリ」と呼ぶ
• コンピュータはデバイスの性能上,記憶装置の性能
が処理装置の性能に追いつけず,この差が全体性
能に対するボトルネックとなる.これを「ノイマンズ・
ボトルネック」(von Neumann Bottle Neck)と呼ぶ.こ
れは拡大の傾向あり.
• キャッシュメモリは,「記憶階層」の観点からこのボト
ルネックを解消しようとするもの
キャッシュメモリとは No5
• CPUと主記憶との間に構成されることが一般的
• CPUがアクセスしたいデータやそのアドレス,状態,
設定など属性情報をコピーし保持することで,本来
アクセスすべき主記憶に代わってデータの入出力を
行う.
• 通常,キャッシュメモリが自動的にデータ保存や主記
憶の代替を行うため,基本的にCPUのプログラムが
キャッシュを意識する必要なし.
• 特定のデバイスの処理速度を高速化させる場合に
利用される場合もある.
キャッシュメモリの構造 No1
• キャッシュメモリはデータをライン(ブロック)と呼ぶま
とまった単位で管理(例えばIntel Pentium4の8k Byte
L1キャッシュはラインサイズ64Byte)
• データのアクセス要求があった時にそのデータが
キャッシュに存在しているか,あるならどのラインかな
どを瞬時(一般に,1サイクルのスループット)に検索
する必要あり.
• そのため,データ格納アドレスの一部,具体的にはラ
イン単位アドレスの下位数ビット(エントリアドレス)に
より,ある程度の格納位置を限定することで検索速
度を向上
キャッシュメモリの構造 No2
• 各ラインにはライン単位アドレスの上位ビット(フレー
ムアドレス)を格納
• キャッシュ検索時には検索アドレスのフレームアドレ
ス部と,キャッシュ内に格納されている検索エントリア
ドレス位置に対応したフレームアドレスとを比較
• これにより,キャッシュのヒット(望みのデータがキャッ
シュ内に存在)を検出
• この「フレームアドレス格納バッファ」をタグと呼ぶ.
• 複数セットのタグを持てば同じエントリアドレスでも複
数データの格納を行うことが可能
• このタグのセット数(ウエイ)を連想度と呼ぶ.データ
格納構造の相違は連想度の相違
キャッシュメモリの構造 No3
■ダイレクトマップ
ダイレクトマップ方式
ダイレクトマップ方式 (Direct Mapping)
• 1組のタグにより構成(連想度1)されるデータ格納構
造.アドレスにより一意に配置が決まるため,タグの
構造が非常に単純.
• 同一エントリに異なるフレームアドレスが転送される
と必ずラインの入れ替えが発生
• ラインの入れ替えが頻発し,スループットが落ちる(こ
れをキャッシュスラッシングという)と,ヒット率が低下
• 他の方式に比べて効率(ヒット率)は高くない.
キャッシュメモリの構造 No4
■セットアソシアティブ
セットアソシアティブ方式
Associative)
セットアソシアティブ方式(Set
方式
• 複数タグにより構成(連想度2以上).
• 同一エントリに異なるフレームアドレスのデータを複
数格納することが可能.
• 連想度が上がるほどキャッシュのヒット率は上昇する
が実装は困難になっていくため,システムによりバラ
ンスのよい実装が必要.
• n個のタグにより構成された場合,nウエイセットアソ
シアティブ方式と呼ぶ.最近はCAM (連想メモリ:
Content Addressable Memory)がタグとして使用
• 32など非常に高い連想度を実装できるようになる.
キャッシュメモリの構造 No5
■フルアソシアティブ
フルアソシアティブ方式
Associative)
フルアソシアティブ方式(Fully
方式
• エントリアドレスによる振り分けはなく,全ての
ラインが検索対象となる構造.
• 従って連想度はライン数分.
• キャッシュスラッシングは起こり難くヒット率は
最も優れている.
• 実装コストや複雑度の面から通常用いられる
ことはない.
キャッシュメモリの構造 No6
■ヒット
ヒット率
ヒット率
「フルアソシアティブ方式
フルアソシアティブ方式」
方式」≧「セットアソシアティブ方式
セットアソシアティブ方式」
方式」
≧「ダイレクトマップ方式
ダイレクトマップ方式」
方式」
■検索速度
検索速度
「ダイレクトマップ方式
ダイレクトマップ方式」
方式」≦「セットアソシアティブ方式
セットアソシアティブ方式」
方式」
≦ 「フルアソシアティブ方式
フルアソシアティブ方式」
方式」
ヒット率
ヒット率も検索速度もある
検索速度もある程度
もある程度を
程度を確保:
確保:
「セットアソシアティブ方式
セットアソシアティブ方式」
方式」 が無難!?
無難!?
キャッシュメモリの実装 No1
【 ライン
ライン入替
) 】
ライン入替え
入替え方式 (Refill)
• ラインの入替え(これを「リフィル」と呼ぶ)は該当エン
トリの全ラインにデータが格納されて,なお同一エン
トリ新規フレームアドレスが入力されて,キャッシュの
ミスヒットが生じた場合に起きる.
• その場合,どのラインを掃き出して新規アドレスと入
替えるか,はアルゴリズムによるが,それによって
キャッシュのヒット率が変動.
• アルゴリズムとして,代表例は,「ラウンドロビン」
「LRU」あるいは「ランダム」などがある.
キャッシュメモリの実装 No2
■ラウンドロビン (Round Robin)方式
• リフィル対象となるラインを順番に交代させる
方法.
• 各ラインのアクセス頻度に拘らず順番にリフィ
ルを実行.
• あまりヒット率は高くない.
キャッシュメモリの実装 No3
■LRU (Least Recently Used)
)方式
• 最も古くアクセスされたラインをリフィルする方法.
• 時間的局所性に基づき,「過去最もアクセスのなかっ
たラインは将来にわたってもアクセスされる可能性は
少ない」と言える.
• 従って,この方法はヒット率がかなり高い方法として
よく採用される.
• 但し,各ラインごとにアクセス履歴を持ち,アクセスが
ある度に履歴を入替える必要があるため,複雑な履
歴を反映させる構成が必要
• 結果として,アクセス速度を低下させるなどの負の影
響も懸念される場合がある.
キャッシュメモリの実装 No4
■ランダム
ランダム (Random)
)方式
• リフィルするラインの選択をランダムに行う方
式.
• 各ライン毎にリフィル用の特殊な機構を持つ
必要はない.
• 従って,キャッシュの構成が簡易.
• ヒット率はラウンドロビンよりは良いとされる.
キャッシュメモリの実装 No5
【 データ
データ更新方式
) 】
データ更新方式 (Purging)
• CPUキャッシュは「命令キャッシュ」と「データキャッ
シュ」の2種類が搭載されている場合が多い.
• 命令キャッシュ:プログラムという静的なデータを扱う
のでデータ更新は存在しない.
• データキャッシュ:メモリへのライト動作があるため,
データ更新が存在する.
• 更新されたデータはどこかのタイミングで下位レベル
のメモリ(主記憶あるいは高次キャッシュ)にも反映さ
れる必要があり.
• そのタイミングの相違により2つのアルゴリズムが存
在する.
キャッシュメモリの実装 No6
■ライトスルー方式 (Write Through Algorithm)
• CPUがメモリ書き込みを行うと,キャッシュにストアす
ると同時に下位レベルのメモリにも書き戻す方式.
• 必ず下位レベルのバスが活性化するため,バスの競
合や下位レベルの低いスループットに影響されるな
どの制約あり.
• しかし,単純な構成で実現でき,またデータのコヒー
レンシを保つことが容易.
• 出力段にライトバッファを設けると,単一CPUであれ
ばライトバック方式と遜色のない性能が期待できる.
• CPUのL1キャッシュなどに実装される場合が多い.
キャッシュメモリの実装 No7
■ライトバック方式 (Write Back Algorithm) その1
• CPUがメモリ書き込みを行っても,条件が整わない限
り,書き換えはキャッシュ内に留まり,下位メモリへの
書き戻しを同時には行わない方式.
• 書き戻す条件は対象エントリにウエイ数以上のフレー
ムアドレスのリード/ライトが行われる,他のバスマ
スタが対象エントリが保持しているアドレスに対しアク
セスを行った時にコヒーレンシ(Coherency:一貫性の
こと)を保つために行うなどがある.・・・要するにライ
ン入替え(リフィル)などが発生しなければ,書き戻さ
ない.
キャッシュメモリの実装 No8
■ライトバック方式 (Write Back Algorithm) その2
• ライトスルー方式に対し,下位レベルのバスが競合を
起こしにくい(頻繁にメモリアクセスが発生しないの
で),マルチCPU構成に向く.
• 従って,記憶階層の同一レベルに複数のキャッシュ
が接続されているようなL2キャッシュ(あるいはそれ
より高次のメモリ)に実装されることが一般的.
キャッシュメモリ(上級編) その1
■キャッシュ・コヒーレンシ(Cache Coherency) その1
• マルチCPU&マルチキャッシュ構成など複数のバス
マスタが存在し,各々がデータ更新を行った場合で
も最新の正しいデータにアクセスできるよう保つべき
データの一貫性(あるいは整合性)のことを「キャッ
シュ・コヒーレンシ」もしくは「キャッシュ・コンシステン
シ」(cache consistency)という.
• データ更新にライトバック方式を用いた場合など,
キャッシュに更新されたデータが滞留して主記憶装
置など下位レベルのメモリには最新のデータが存在
しない可能性がある. これは問題!!
キャッシュメモリ(上級編) その1
■キャッシュ・コヒーレンシ(Cache Coherency) その2
• この時に複数のCPUが同一の記憶領域を参照/更
新しようとすると,データの不整合が起こり,正しい
結果が得られない.
• これを解決し,どのCPUも必ず最新のデータにアク
セスできるようにする必要がある.
• このための代表的なアルゴリズムとして,1)スヌー
プ方式,2)ディレクトリ方式あるいは3)共有キャッシュ
などがある.
キャッシュメモリ(上級編) その2
■スヌープ方式 (Cache Snooping) その1
• キャッシュコヒーレンシのアルゴリズムにおいて,特
に各キャッシュ自身に搭載される方法としてスヌープ
方式がある.
• これは各々のキャッシュが自身や他CPUのキャッシュ
のライン更新状態を把握・管理し,他のキャッシュと
更新状態の情報を交換することで,どのキャッシュに
最新のデータが存在するかを知り,各キャッシュが
必要なときに最新のデータを取得できるように自身
の状態を変更したりラインのパージなどを行う.
キャッシュメモリ(上級編) その2
■スヌープ方式 (Cache Snooping) その2
• この情報交換は共通のデータバスを介して行われる
ため,情報の通知と実際のデータ転送との順序が保
たれ,破綻を起こすことはない.
• 逆に共通バスを持たない分散型メモリシステムには
用いることが困難などの制約もある.
キャッシュメモリ(上級編) その2
■スヌープ方式 (Cache Snooping) その3
1)無効型プロトコル (Invalidate Protocol)
• 複数のキャッシュから参照があるアドレスに対しある
キャッシュが更新を行う場合,そのアドレスはダーティ
であるとして参照中の全キャッシュの該当ラインを無
効化する.
• これにより更新されたラインがありながら他のキャッ
シュで古いデータをキャッシングしている状態がなく
なり,コヒーレンシが保たれる.
キャッシュメモリ(上級編) その2
■スヌープ方式 (Cache Snooping) その4
2)更新型プロトコル (Update Protocol)
• 複数のキャッシュが参照しているアドレスに対してデー
タ更新を行うときはライトスルー型となり,単独でアク
セスしている場合はライトバック型となるような制御
を行う.
• 従って,更新データを他にも行き渡らせ,コヒーレン
シを保つ.
キャッシュメモリ(上級編) その2
■ディレクトリ方式 (Directory-based Protocol)
• スヌープ方式と異なり,メモリの一貫性をディレクトリ
と呼ぶ専用領域にて一元管理する方式.
• この領域は実装上の各メモリ領域に分散してよく,
分散メモリ型システムに適する.
キャッシュメモリ(上級編) その2
■共有キャッシュ (Shared Cache)
• 1つのキャッシュに対し複数のCPUが参照できるよう
な構成を持つキャッシュ.
• 1チップに集積された複数のCPUを扱うなど限定的
な場面ではキャッシュコヒーレンシを根本的に解決
可能.
• しかし,キャッシュ自体の構造が非常に複雑,もしく
は性能低下の要因
• 多くのCPUを接続することは困難