メモリ・アーキテクチャ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を接続することは困難
© Copyright 2024 Paperzz