misses と
loads が何を意味するのかわからないということです。
CPU とメモリ間の速度と容量の問題を解決するために、キャッシュ Cache が導入されます。
キャッシュは CPU とメイン メモリの間にあります。CPU がメイン メモリにアクセスするとき、まずキャッシュにアクセスして、キャッシュにそのようなデータがあるかどうかを確認します。ある場合は、キャッシュからデータを CPU に返します; キャッシュにデータがない場合は、メイン メモリに再度アクセスします。
一般的に言えば、キャッシュは複数ありますが、 、つまりマルチレベルキャッシュですが、なぜですか?
理由: CPU アクセス キャッシュも非常に高速です。しかし、速度と容量を完全に両立させることはできず、CPU がキャッシュにアクセスする速度と CPU がレジスタにアクセスする速度が同じであれば、キャッシュは非常に高速であるが、容量は非常に小さいことを意味します。小さなキャッシュ容量ではニーズを満たすことができないため、マルチレベル キャッシュが導入されました。
マルチレベル キャッシュは、キャッシュを複数のレベル L1、L2、L3 などに分割します。
#速度に応じて、L1 > L2 > L3 の順になります。
通常、L1 は命令キャッシュ (
ICache) とデータ キャッシュ (DCache) に分割され、L1 キャッシュは CPU 専用であり、それぞれCPU L1キャッシュあり。
cache hitMissing
キャッシュ ミスといいます。
キャッシュ ライン
: キャッシュ ライン。キャッシュは多くの等しいブロックに均等に分割され、各ブロックのサイズは キャッシュ ラインと呼ばれます。 ###。
キャッシュ ラインは、キャッシュとメイン メモリ間のデータ転送の最小単位でもあります。
CPU が 1 バイトのデータをロードしようとすると、キャッシュが見つからない場合、キャッシュ コントローラーはキャッシュ ライン サイズのデータをメイン メモリからキャッシュに一度にロードします。たとえば、キャッシュ ラインのサイズは 8 バイトです。 CPU が 1 バイトを読み取る場合でも、キャッシュが失われた後、キャッシュはメイン メモリから 8 バイトをロードして、キャッシュ ライン全体を埋めます。#CPU がキャッシュにアクセスするときのアドレス エンコーディングは、通常、タグ、インデックス、オフセットの 3 つの部分で構成されます。
(タグフィールド)
: キャッシュラインにキャッシュされたデータのアドレスがプロセッサのアドレス指定アドレスと一致するかどうかを判断するために使用されます。 (インデックスフィールド)
: アドレスがキャッシュ内のどの行にあるかインデックスを付けて検索するために使用されます。
キャッシュ ラインとタグ、インデックス、オフセットなどの関係は、図に示すとおりです。それでは、キャッシュは仮想アドレスにアクセスしているのでしょうか、それとも物理アドレスにアクセスしているのでしょうか?
回答: 必ずしもそうとは限りません。これは、仮想アドレス、物理アドレス、または仮想アドレスと物理アドレスの組み合わせのいずれかになります。ハードウェア設計ではキャッシュを整理するさまざまな方法があるため:
仮想キャッシュ: インデックス仮想アドレスのタグと仮想アドレスのタグ。
物理キャッシュ: 物理アドレスのインデックス、物理アドレスのタグ。
物理的にタグ付けされた仮想キャッシュ: 仮想アドレスのインデックス、物理アドレスのタグ。 曖昧さ (同音異義語 )
: 同じ仮想アドレスが異なる物理アドレスに対応します
エイリアス (alias
): 複数の仮想アドレスが同じ物理アドレスにマッピングされます (複数の仮想アドレスはエイリアスと呼ばれます)。
たとえば、上記の VIVT メソッドにはエイリアスの問題があります。VIVT、PIPT、VIPT のどれが優れていますか?
PIPT
は、インデックスとタグの両方が物理アドレスを使用するため、実際には理想的です。 ソフトウェア レベルでは、あいまいさやエイリアスの問題を回避するためのメンテナンスは必要ありません。
VIPT
のタグは物理アドレスを使用しているため、あいまいさの問題はありませんが、インデックスは仮想アドレスであるため、 にはエイリアスの問題も発生する可能性があります。
VIVT
メソッドには、曖昧さとエイリアシングの問題が存在します。
実際、現在ハードウェアで使用されているのは基本的に PIPT または VIPT です。 VIVT は問題が多すぎて、歴史になり、誰も使わなくなりました。さらに、PIVT 法は欠点だけで利点がなく、遅いだけでなく、曖昧性やエイリアシングの問題も存在するため存在しません。
キャッシュの構成、曖昧さおよびエイリアスの問題は、比較的大きなコンテンツです。ここで知っておく必要があるのは、キャッシュによってアクセスされるアドレスは、仮想アドレス、物理アドレス、または仮想アドレスと物理アドレスの組み合わせのいずれかである可能性があるということだけです。また、組織化方法が異なると、曖昧さやエイリアスの問題が発生します。
は、キャッシュミスが発生したときにキャッシュがどのように割り当てられるかを示します。
読み取り割り当て: CPU
がデータを読み取るとき、キャッシュ
がありません。この場合、キャッシュ ライン
キャッシュが割り当てられます。 . メインメモリから読み取られたデータ。 デフォルトでは、cache
は読み取り割り当てをサポートします。
書き込み割り当て: CPU 書き込みデータ キャッシュ
が欠落している場合、書き込み割り当て戦略が考慮されます。書き込み割り当てをサポートしていない場合、書き込み命令はメイン メモリ データを更新するだけで終了します。書き込み割り当てがサポートされている場合、最初にメイン メモリから キャッシュ ライン
にデータをロードし (最初に読み取り割り当てを実行するのと同じ)、次に キャッシュ ライン
のデータを更新します。
は、キャッシュがヒットしたときに書き込み操作でデータを更新する方法を示します。
書き込みパススルー: CPU がストア命令を実行し、キャッシュがヒットすると、キャッシュ内のデータを更新し、メイン メモリ内のデータも更新します。 キャッシュとメインメモリ内のデータは常に一貫しています。
Writeback: CPU
が store
命令を実行し、cache
データにヒットした場合にのみ cache## を更新します。で #。そして、各
キャッシュ ライン には、データが変更されたかどうかを記録するための
bit ビットがあり、これは
ダーティ ビット と呼ばれます。
ダーティビットを設定します。メイン メモリ内のデータは、
キャッシュ ライン が置換されるか、明示的な
clean 操作が実行される場合にのみ更新されます。したがって、
メイン メモリ内のデータは未変更のデータである可能性がありますが、変更されたデータは キャッシュ内にあります。 キャッシュとメインメモリ内のデータが不整合である可能性があります。
以上が入社してキャッシュとは何かを理解したの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。