[解決済み] キャッシュとキャッシュヒット/ミスについていくつか質問があります。
質問内容
これは宿題の問題なのですが、宿題はすでに提出されていて、答えも与えられていたのですが、実際にどうやってこの答えを導き出したのかが全くわかりません。
キャッシュに関連するもので、いろいろな概念がごちゃごちゃになっているんです。
ここで質問です。
32ビットアドレスのダイレクトマップド・キャッシュ設計の場合、以下のビットは アドレスはキャッシュにアクセスするために使用されます。
私の理解では、インデックスビットは、メモリ内の特定の場所がキャッシュのどのブロックにマッピングされるかを決定します。アドレスの最下位 log(base2) ビットがキャッシュブロックを決定し、ここでは 5 つのインデックスビットがあるので、キャッシュには合計 2^5 ブロック、つまり 32 が存在することがわかります。
キャッシュブロックのサイズ(単位:ワード)は?
TAから渡されたメモによると、ブロックサイズは2^(オフセットビット数)で、この場合5となります。しかし、この場合、答えは32となり、どこからが8なのかがわかりません。さらに、この本のどこにも、オフセットビットという用語が定義されていないので、誰かこの意味を正確に教えてください。
**ここで私が考えているのは、同じメモリアドレスを2回参照することはないので、キャッシュ内に探しているデータがすでにあることはないため、ヒットはないはずだ、ということです。しかし、解答によると、ヒット率は0.25のはずなので、もう一度言いますが、私は何が起こっているのか理解していないようです。 最後に、最後の質問について、答えは次のように書いてあります。
<000001, 0001, mem[1024]>
<000001, 0011, mem[16]>
<001011, 0000, mem[176]>
<001000, 0010, mem[2176]>
<001110, 0000, mem[224]>
<001010, 0000, mem[160]>
これは、元の質問にさえなかったいくつかのメモリアドレス(176、2176)を含んでおり、この時点で私は完全にすべてを失っています。誰かこれらのことをクリアにするのを助けてくれますか?
解決方法は?
この例では、キャッシュ・ブロックのサイズは32です。 バイト つまり、バイト・アドレッシングが使用されており、4バイト・ワードの場合、8バイト・ワードとなります。 単語 .
ブロックのサイズは32バイトで、ブロック全体がキャッシュにロードされるため、インデックスを得るには、まずアドレスを32で割ってメモリ上のブロック番号を探します。ブロック番号の32乗(5ビットインデックス)がインデックスとなります。ブロック番号を32で割ったものがタグとなります。トレースは次のようになります。
0 miss <00000, 0000, mem[0..31]>
4 hit <00000, 0000, mem[0..31]>
16 hit <00000, 0000, mem[0..31]>
132 miss <00100, 0000, mem[128..159]>
232 miss <00111, 0000, mem[224..255]>
160 miss <00101, 0000, mem[160..191]>
1024 miss <00000, 0001, mem[1024..1055]>
30 miss <00000, 0000, mem[0..31]>
140 hit <00100, 0000, mem[128..159]>
3100 miss <00000, 0011, mem[3072..3103]>
180 hit <00101, 0000, mem[160..191]>
2180 miss <00100, 0010, mem[2176..2207]>
見ての通り12アクセス中4回ヒットしているので、ヒット率は33%のはずです。(回答提供者は16アクセスと勘違いしていたようです)。
サイドコメント 空のキャッシュからスタートしているので、コンフリクトミスは1回(mem[30]のアクセス)だけで、残りの7回は強制(ファーストアクセス)ミスです。しかし、これがループの本体であった場合、最初の反復以降の各反復では、インデックス00000で4つの競合ミス(アドレス0、1024、30、3100)、00100で2つの競合ミス(アドレス132、2180)、6つのヒット(アドレス4、16、140は各反復でキャッシュブロックが再ロードされたヒットで競合ミスに対応、アドレス232、160、180は最初の反復でロードされて退避されていないヒット)であると思われます。
このトレースを実行すると、最後に以下のブロックが有効であることがわかります(そのインデックスに対して最後にアクセスされたもの)。
<00000, 0011, mem[3072..3103]>
<00100, 0010, mem[2176..2207]>
<00101, 0000, mem[160..191]>
<00111, 0000, mem[224..255]>
32 バイトのブロックでは、どのブロックも mem[16] から始まることはなく、1024 を 32 で割るとブロック番号(メモリ上)は 32 となり、32 のモジュロは 0(1ではない)なので、明らかに間違っている答えとなることに注意してください。
ちなみに、ブロックの開始アドレスを提供するよりも、ブロックにキャッシュされているバイトレンジを提供する方が、おそらく有用でしょう。
関連
-
[解決済み] コンフリクトミスとキャパシティミスの違いについて
-
[解決済み] キャッシュとキャッシュヒット/ミスについていくつか質問があります。
-
[解決済み] フラッシュ・トゥ・ディスク」とはどういう意味ですか?
-
[解決済み] ライトバックキャッシングとライトスルーキャッシングの違いは?
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み】Redisは単なるキャッシュなのか?
-
[解決済み] Redisキャッシュとメモリ直接使用との比較
-
[解決済み] Notepad++のキャッシュファイルの場所
-
[解決済み] キャッシュとメモライゼーションの違いは何ですか?
-
[解決済み] Angular 2のサイトでブラウザキャッシュを防ぐには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IISで静的リソースのHTTPヘッダーに有効期限や最大年齢を設定する方法
-
[解決済み] コンフリクトミスvsコンパルソリーミス
-
[解決済み] コンフリクトミスとキャパシティミスの違いについて
-
[解決済み] FIFOキャッシュとLRUキャッシュの比較
-
[解決済み] キャッシュとキャッシュヒット/ミスについていくつか質問があります。
-
[解決済み] Memcached vs. Redis? [クローズド]
-
[解決済み】Redisは単なるキャッシュなのか?
-
[解決済み】開発機でAngularJSの部分的なキャッシュを無効にする
-
[解決済み] Redisキャッシュとメモリ直接使用との比較
-
[解決済み] Angular 2のサイトでブラウザキャッシュを防ぐには?