3

シナリオ:

  • キャッシュ (L1) サイズ ( CS): 32kB
  • ラインサイズ(LS):64B
  • 結合性 ( A): 8
  • セットサイズ(SS):512B(ALS
  • セット ( S): 64 ( C/ SS)
  • 読み取り/書き込みオブジェクト ( O) のサイズがLS

仮定(無効な場合は修正してください):

  • 仮想メモリ ブロック (サイズ 4kB ( SS* A) で示されるB) は、モジュロのような方法でセットにマップされます。つまり、アドレス0x0 : 0xFFFF(ブロック インデックス ( BI) 0) はセット 0 にマップされ、0x1000 : 0x1FFF( BI1) は 1 にマップされます。
  • 読み取り/書き込みの要求 (非一時的な書き込み/読み取りは使用されません) では、特定のアドレスAを見つけBIて、割り当てられたセットに移動する必要があります。たとえば、A= 0x4600A はBI= 70 になります。これBIはセット 6 ( BI% S) にマッピングされます。
  • オブジェクト ( ) を適切に (ミスアライメントなしで) r/wOしてキャッシュするには、 のアライメントLSが必要です。

質問:

  1. はキャッシュ内でシリアルに整列されますOか、それとも (たとえば) 空きスロット 0 & 1 & 2 の代わりに 0 & 4 & 5 を使用できますか?
  2. Oパーティション化されたキャッシュを取得するコスト (ペナルティ) は? Oが複数の に分割されていないと仮定しBます。
  3. 上記と同じ質問ですが、 がO2 つに配置されている場合は、B2 つのセットが使用されます。
  4. サイズが(512B)Oより大きい場合はどうなりますか?SSデータを L2 に移動し、段階的にデータを L1 に移動しますか? 他のセットを使用しますか?
  5. L2 (さらに言えば L3) がすべてのデータに対して小さすぎる場合はどうなるでしょうか?
4

1 に答える 1

1

仮想メモリ ブロック (B として示されるサイズ 4kB (SS * A) の) は、モジュロのような方法でセットにマップされます。つまり、アドレス 0x0 : 0xFFFF (ブロック インデックス (BI) 0) はセット 0 にマップされ、0x1000 : 0x1FFF (BI 1) は 1 にマップされます。

L1 キャッシュとメモリ階層の間の転送: L1 キャッシュとメモリ階層 の次のレベルの間の転送単位は、ライン サイズ (LS) バイトのブロックです。つまり、L1 キャッシュに対して、メモリは 64 バイト ブロック (LS バイト) で構成されます。

メモリ ブロックとキャッシュ エントリの対応: 連続するメモリ ブロックは、連続するセットのキャッシュ ラインにマッピングされます。したがって、ブロック 0 (アドレス0x0000 : 0x003F) はセット 0 のキャッシュ ラインにマップされ、ブロック 1 (アドレス0x0040 : 0x007F) はセット 1 のキャッシュ ラインにマップされます。


特定のアドレス A の読み取り/書き込み (非一時的な書き込み/読み取りは使用されません) の要求では、その BI を見つけて、それを割り当てられたセットに移動する必要があります。たとえば、A = 0x4600A は BI = 70 になります。この BI はセット 6 (BI % S) にマップされます。

ブロック識別子 (またはインデックス) とセット インデックス (SI) を見つける正しい手順は次のとおりです。

 BI = A >> LS = 0x4600A >> 6 = 0x1180
 SI = BI & (S-1) = 0x1180 & 0x3F = 0x0000
 (when S is a power of two, BI & (S-1) = BI  mod S)

オブジェクト (O) を適切に (ミスアラインメントなしで) r/w してキャッシュするには、LS のアラインメントが必要です。

それは必要ありません。O はブロック境界である必要はありません。


Q1. O はキャッシュ内でシリアルに整列されますか、それとも (たとえば) 空きスロット 0 & 1 & 2 の代わりに 0 & 4 & 5 を使用できますか?

Oブロックは、キャッシュ ラインの粒度 (セット k、k+1、…、S-1、0、1、…) を持つ連続したセットに格納されます。

Q2. 分割された O をキャッシュから取得するコスト (ペナルティ) はいくらですか? O が複数の B にまたがって分割されていないと仮定します。 Q3. 上記と同じ質問ですが、2 つの B に O が配置されている場合は、2 つのセットが使用されます。

OCPUがキャッシュから単語を読み取るコストに関心があると思います。をシーケンシャルに参照すると仮定Oすると、キャッシュアクセス回数は参照ワード数と同じになります。コストは、ブロックが同じセットにあるか異なるセットにあるかに依存しないと思います(少なくともマルチポートキャッシュでは)。

Q4. SS(512B)よりOサイズが大きいとどうなりますか?データを L2 に移動し、段階的にデータを L1 に移動しますか? 他のセットを使用しますか?

Q5. L2 (さらに言えば L3) がすべてのデータに対して小さすぎる場合はどうなるでしょうか?

空きキャッシュ ラインのないセットにブロックを割り当てる必要がある場合は、削除するブロック (犠牲ブロック) を選択する必要があります。置換ポリシーは、アルゴリズム(LRU、pLRU、ランダム)に従って犠牲ブロックを選択します。

于 2013-05-23T12:01:46.173 に答える