ジャンル別定番サイト
| 割切り系No.1 | 人妻出会い系No.1 | 恋人恋愛系No.1 |
| 無料サイト。 即合える率が高いです。 | 無料サイト。 出会いに飢えた人妻が多いのでラクです。 | 無料サイト。 普通っぽい子を狙うならこのサイト。 |
データ格納構造
キャッシュメモリはデータをライン(ブロック)と呼ぶある程度まとまった単位で管理する(例えばIntel Pentium4の8kByte L1キャッシュはラインサイズ64Byte)が、データのアクセス要求があった時にそのデータがキャッシュに存在しているか、あるならどのラインかなどを瞬時(多くの場合1サイクルのスループット)に検索する必要があります。そのためデータ格納アドレスの一部、具体的にはライン単位アドレスの下位数ビット(エントリアドレス)によりある程度の格納位置を限定することで検索速度を高めます。各ラインにはライン単位アドレスの上位ビット、即ちフレームアドレスを格納しておき、キャッシュ検索時には検索アドレスのフレームアドレス部と、キャッシュ内に格納されている検索エントリアドレス位置(エントリアドレス部をデコードしラインが1つ選択されます)に対応したフレームアドレスとを比較することでキャッシュのヒットを検出します。このフレームアドレス格納バッファがタグです。複数セットのタグを持てば同じエントリアドレスでも複数データの格納を行うことが可能となります。このタグのセット数(ウエイ)を連想度と呼びます。データ格納構造の相違は連想度の相違でもあります。
*ダイレクトマップ方式 (Direct Mapped)
1組のタグにより構成(連想度1)されるデータ格納構造です。アドレスにより一意に配置が決まるため、タグの構造が非常に単純。だが、同一エントリに異なるフレームアドレスが転送されると必ずラインの入れ替えが発生します。ラインの入れ替えが頻発しスループットが落ちることをキャッシュスラッシングというが、この状態が起こりやすくヒット率は他の方式に比べ高くはありません。
*セットアソシアティブ方式 (Set Associative)
複数のタグにより構成(連想度2以上)されるデータ格納構造です。同一エントリに異なるフレームアドレスのデータを複数格納することができます。連想度が上がるほどキャッシュヒット率は上昇するが製造は困難になっていくため、システムによりバランスのよい実装が異なります。n個のタグにより構成された場合、 nウエイセットアソシアティブ方式と呼びます。最近はCAM (連想メモリ:Content Addressable Memory)がタグとして使われ出し、32など非常に高い連想度を実装できるようになってきた。ダイレクトマップ方式や下記のフルアソシアティブ方式はこの方式の特殊な場合です。
*フルアソシアティブ方式 (Fully Associative)
エントリアドレスによる振り分けはなく、全てのラインが検索対象となる構造です。従って連想度はライン数分となります。キャッシュスラッシングは起こり難くヒット率は最も優れているが、実装コストや複雑度の面から通常用いられることはありません。
*ライン入替え方式 (Refill)
ラインの入替え(リフィル)は該当エントリの全ラインにデータが格納されてなお同一エントリ新規フレームアドレスが入力されてキャッシュミスした(ヒットしなかった)場合に発生します。その場合どのラインを掃出して新規アドレスと入替えるかのアルゴリズムによってキャッシュのヒット率が変動します。代表的なアルゴリズムを記します。
*ラウンドロビン (Round Robin)
リフィル対象となるラインを順番に交代させる方法です。各ラインのアクセス頻度に拘らず順番にリフィルを行うため、あまりヒット率が高くはありません。
*LRU (Least Recently Used)
最も古くアクセスされたラインをリフィルする方法です。時間的局所性に鑑みれば、過去最もアクセスのなかったラインは将来にわたってもアクセスされる可能性は少ないと言えます。従ってこの方法はヒット率がかなり高い方法としてよく採用されております。ただし各ラインごとにアクセス順履歴を持ちアクセスがある度に頻繁に履歴を入替えるため、複雑な構成となりアクセス性能に影響が出る場合があります。
*ランダム (Random)
リフィルラインの選択をランダムに行う方式です。各ライン毎にリフィル用機構を持つ必要がなくなるため構成が簡易になります。ヒット率はラウンドロビンよりは良いとされます。
*データ更新方式 (Purging)
CPUキャッシュは命令キャッシュとデータキャッシュの2種類が搭載されている場合が多いです。命令キャッシュはプログラムという静的なデータを扱うのでデータ更新は存在しないが、データキャッシュはメモリへのライト動作があるためデータ更新が存在します。更新されたデータはいずれかのタイミングで下位レベルのメモリにも反映される必要があり、そのタイミングの相違により2つのアルゴリズムが存在します。
*ライトスルー方式 (Write Through Algorithm)
CPUがメモリ書き込みを行ったら、キャッシュにストアすると同時に下位レベルのメモリにも書き戻す方式です。必ず下位レベルのバスが活性化するため、バスの競合や下位レベルの低いスループットに律速されるなどの制約はあるが、単純な構成で実現でき、またデータのコヒーレンシを保つことが容易です。出力段にライトバッファを設けることにより、単一CPUであればライトバック方式に比べ遜色のない性能が期待できます。そのためCPUのL1キャッシュなどに実装される場合が多くなっております。
*ライトバック方式 (Write Back Algorithm)
CPUがメモリ書き込みを行っても、条件が整わない限りキャッシュに留まりメモリへの書き戻しを行わない方式です。書き戻す条件は対象エントリにウエイ数以上のフレームアドレスのリード/ライトが行われる、他のバスマスタが対象エントリが保持しているアドレスに対しアクセスを行った時にコヒーレンシを保つために行うなどがあります。ライトスルー方式に対し下位レベルのバスが競合を起こしにくく、マルチCPU構成に向くため、記憶階層の同一レベルに複数のキャッシュが接続されているようなL2キャッシュに実装されます。
