誰かがキャッシュについて説明するためにこのメールを打ちましたが、あなたにも役立つと思います。
RAM 内のバイトを参照できる 32 ビット アドレスがあります。後で使用するために、アクセスするデータをキャッシュできるようにする必要があります。
1 MiB (2 20バイト) のキャッシュが必要だとしましょう。
職業はなんですか?
満たす必要がある 2 つの制限があります。
- キャッシングは、すべてのアドレスで可能な限り均一にする必要があります。つまり、特定の種類のアドレスに偏りたくないということです。
- これどうやってやるの?残りを使おう!mod を使用すると、任意の整数を任意の範囲に均等に分散できます。
- 簿記のコストを最小限に抑えたい。つまり、たとえば、1 バイトのブロックでキャッシュしている場合、1 バイトがどこに属しているかを追跡するためだけに 4 バイトのデータを格納したくないということです。
- どうやってそれをしますか?1 バイトより大きいブロックを格納します。
16 バイト (2 4バイト) のブロックを選択するとします。つまり、2 20 / 2 4 = 2 16 = 65,536 ブロックのデータをキャッシュできるということです。
いくつかのオプションがあります:
- 任意のメモリ ブロックのデータを任意のキャッシュ ブロックに格納できるように、キャッシュを設計できます。これは、完全連想キャッシュと呼ばれます。
- 利点は、これが「最も公正な」種類のキャッシュであることです。すべてのブロックが完全に同等に扱われます。
- トレードオフは速度です。メモリ ブロックを配置する場所を見つけるには、すべてのキャッシュ ブロックを検索して空き領域を探す必要があります。これは本当に遅いです。
- 任意のメモリ ブロックからのデータを1 つのキャッシュ ブロックにのみ格納できるように、キャッシュを設計できます。これは、ダイレクト マップ キャッシュと呼ばれます。
- 利点は、これが最速の種類のキャッシュであることです。項目がキャッシュにあるかどうかを確認するために 1 回のチェックのみを行います。
- トレードオフは、メモリ アクセス パターンが不適切な場合、2 つのブロックが連続して追い出され、未使用のブロックがキャッシュに残っている可能性があることです。
- 両方を組み合わせて実行できます。単一のメモリ ブロックを複数のブロックにマップします。これは、実際のプロセッサが行うことです。プロセッサには、N ウェイのセット連想キャッシュがあります。
直接マップされたキャッシュ:
これで、65,536 ブロックのデータがあり、各ブロックは 16 バイトです。
キャッシュ内に 65,536 の「行」として保存し、各「行」はデータ自体とメタデータ (ブロックが属する場所、有効かどうか、書き込まれたかどうかなど) で構成されます。
質問:
メモリ内の各ブロックは、キャッシュ内の各ブロックにどのようにマップされますか?
回答: ええと、mod を使用して直接マップされたキャッシュを使用しています。つまり、アドレス 0 ~ 15 がキャッシュ内のブロック 0 にマップされます。16-31 はブロック 2 などにマップされ、1-MiB マークに到達するとラップアラウンドします。
では、メモリ アドレス M が与えられた場合、行番号 N をどのように見つけますか? 簡単: N = M % 2 20 / 2 4 .
しかし、これはデータをどこに保存するかを示すだけで、データを取得する方法は示しません。一度保存して再度アクセスしようとすると、メモリのどの1 MB の部分がここに保存されたかを知る必要がありますよね?
つまり、これがメタデータの 1 つです。つまり、タグ ビットです。行 N にある場合、知っておく必要があるのは、mod 操作中に商が何であったかだけです。32ビットアドレスの場合、これは12ビットです(残りは20ビットであるため)。
したがって、タグは 12 ビット長になります。具体的には、任意のメモリ アドレスの最上位12 ビットです。また、下位 4 ビットがブロック内
のオフセットに使用されることは既にご存じでした(メモリはバイト アドレス指定され、ブロックは 16 バイトであるため)。
これにより、メモリアドレスの「インデックス」ビット用に16ビットが残り、アドレスが属する行を見つけるために使用できます。(ただの除算+剰余演算ですが、2進数です。)
また、他のビットも必要です。たとえば、ブロックが実際に有効かどうかを知る必要があります。これは、CPU の電源が入っているときに無効なデータが含まれているためです。したがって、メタデータの 1 ビット、つまり Valid ビットを追加します。
最適化、同期などに使用される、他にも学習するビットがありますが、これらは基本的なものです。:)