ジャンル別定番サイト
| 割切り系No.1 | 人妻出会い系No.1 | 恋人恋愛系No.1 |
| 無料サイト。 即合える率が高いです。 | 無料サイト。 出会いに飢えた人妻が多いのでラクです。 | 無料サイト。 普通っぽい子を狙うならこのサイト。 |
目的別分類
*命令キャッシュ
プログラムなどCPUの命令を格納するキャッシュ。命令は静的なデータなため、書き換えが発生せず(x86を除く最近のCPUは命令の自己書き換えなどには対応していない場合が多い)コヒーレンシを保つ必要がないと想定し、CPUからの入力はアドレスのみでデータ更新ユニットなどを省いております。
*データキャッシュ
CPUが処理するデータを格納するキャッシュ。上述の構成をフルサポートしている場合が多いです。命令キャッシュとデータキャッシュが分離され、命令バスとデータバスの2種類のバスがCPUに接続されているCPUをハーバードアーキテクチャと言う。現在のCPUはハーバードアーキテクチャが主流です。
*実行トレースキャッシュ
インテルのPentium4などは、インストラクション・セット・アーキテクチャ(ISA)はCISCでありますが、内部でRISC的なマイクロ命令に変換し実行するアーキテクチャ(CRISC)となっております。単純な命令キャッシュと異なり、変換済みのマイクロ命令を再利用すれば命令デコーダの使用頻度を減らすことができます。Pentium4ではL1命令キャッシュの代わりに約12000語の命令を格納できる8 ウェイ・セット・アソシエイティブの実行トレースキャッシュが搭載されております。
*トランスレーションキャッシュ
x86(Pentiumなどに用いられているISA)の互換CPUメーカであるトランスメタが、そのコア技術として開発したコードモーフィングソフトウェア(CMS)用に主記憶装置上に確保している領域のことです。Crusoeで16メガバイトの容量がある。CMSはx86命令を動的にCPUコアのネイティブ命令に変換し、変換後の命令を実行させる機構ですが、このネイティブ命令に変換したプログラムを格納するキャッシュとして用います。
*スタックトップキャッシュ
コールスタックをハードウェアで実装したアーキテクチャでは、スタックトップの数バイトから数十バイトに集中します。この部分をキャッシュするのがスタックトップキャッシュである。ISAからは存在に気づけない実装(トランスピュータなど)と、積極的にレジスタとして使用できる実装(AMD_Am29000など)がある。後者の概念を発展させたものがレジスタ・ウィンドウです。
願いが叶う!復縁グッズ&アイテム
その他機構
*プリフェッチ (Pre-fetch)
CPUが専用命令などによりあらかじめデータをキャッシュに汲んでおく動作です。
データの流れがある程度予測できるような特定のソフトウエアアルゴリズムは、
先んじてプリフェッチを行うことで実際にデータが必要な場面で余分なレイテンシが
かかることなくスムーズに処理を行うことができます。
例えばストリーミング処理のようなデータの流れや処理量などが単純で予測しやすい処理などは、
プリフェッチを行うことで大幅に性能向上する場合があります。
キャッシュ/コヒーレンシ (Cache Coherency)
マルチCPU/キャッシュ構成など複数のバスマスタが存在し、各々がデータ更新を行った場合でも最新の正しいデータにアクセスできるよう保つべきデータの一貫性のことをキャッシュコヒーレンシもしくはキャッシュコンシステンシといいます。データ更新に上記ライトバック方式を用いた場合など、キャッシュに更新されたデータが滞留して主記憶装置など下位レベルのメモリには最新のデータが存在しない可能性があります。この時に複数のCPUが同一の記憶領域を参照/更新しようとすると、データの不整合が起こり正しい結果が得られないため、これを解決しどのCPUも必ず最新のデータにアクセスできるようにする必要があります。このための代表的なアルゴリズムにスヌープ方式やディレクトリ方式、共有キャッシュがあります。
*スヌープ方式 (Cache Snooping)
上記キャッシュコヒーレンシのアルゴリズムにおいて、特に各キャッシュ自身に搭載される方法としてスヌープ方式があります。これは各々のキャッシュが自身や他CPUのキャッシュのライン更新状態を把握/管理し、他のキャッシュと更新状態の情報を交換することで、どのキャッシュに最新のデータが存在するかを知り、各キャッシュが必要なときに最新のデータを取得できるように自身の状態を変更したりラインのパージを行います。この情報交換は共通のデータバスを介して行われるため、情報の通知と実際のデータ転送との順序が保たれ、破綻を起こすことはありません。逆に共通バスを持たない分散型メモリシステムには用いることが困難などの制約もあります。このプロトコルとして下記のものが知られております。
■無効型プロトコル (Invalidate Protocol)
複数のキャッシュから参照があるアドレスに対しあるキャッシュが更新を行う場合、そのアドレスはダーティであるとして参照中の全キャッシュの該当ラインを無効化します。これにより更新されたラインがありながら他のキャッシュで古いデータをキャッシングしている状態がなくなり、コヒーレンシが保たれる。MESI(Illinoisプロトコル)、MOSI(Berkeleyプロトコル)などがあります。
■更新型プロトコル (Update Protocol)
複数のキャッシュが参照しているアドレスに対してデータ更新を行うときはライトスルー型となり、単独でアクセスしている場合はライトバック型となるような制御を行うことで更新データを行き渡らせコヒーレンシを保ちます。MEI(Fireflyプロトコル)、MOES(DRAGONプロトコル)などがあります。
*ディレクトリ方式 (Directory-based Protocol)
スヌープ方式と異なり、メモリの一貫性をディレクトリと呼ぶ専用領域にて一元管理する方式です。この領域は実装上の各メモリ領域に分散してよく、分散メモリ型システムに適しております。
*共有キャッシュ (Shared Cache)
1つのキャッシュに対し複数のCPUが参照できるような構成を持つキャッシュのことです。1チップに集積された複数のCPUを扱うなど限定的な場面ではキャッシュコヒーレンシを根本的に解決しますが、キャッシュ自体の構造が非常に複雑となる、もしくは性能低下要因となり、多くのCPUを接続することはより困難となります。
データ格納構造
キャッシュメモリはデータをライン(ブロック)と呼ぶある程度まとまった単位で管理する(例えば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キャッシュに実装されます。
構成
*キャッシュメモリの構造(読出し側)
キャッシュメモリは、通常は下位レベルの記憶装置より小容量で
高速なスタティックRAMを用いて構成されます。
データ本体の一部とそのアドレス、フラグなど属性情報のセットを固定容量のメモリに格納する構造で、
データ格納構造、ライン入替え、データ更新方式などに多数のアーキテクチャが存在します。
以前はCPUチップの外部に接続されていたが、
LSIの集積度の向上や要求速度の上昇に伴いCPUチップ内部に取り込まれることが普通となりました。
また最近のCPUとメモリの性能差の拡大、マルチスレッドなどアクセス範囲の拡大に対応するため、
キャッシュも多段構造とする例が増えております。
この場合CPUに近い側からL1(レベル1)キャッシュ、L2(レベル2)キャッシュと呼ばれ、
2004年時点ではL3キャッシュまでCPUに内蔵する例も存在します。
