1

次のコードを考えると:

typedef  int  array[4][4];

void transpose2(array dst, array src)
{
   int i, j;
   for ( i=0; i<4; i++) {
     for ( j=0; j<4; j++) {
         dst[i][j] = src[j][i];
     }
   }
}

仮定:

  • int は 4 バイト

  • src配列は address0からdst始まり、 address から始まります64

  • キャッシュのサイズは32bytes で、最初はキャッシュは空です

  • ライトスルー、ライトアロケートを使用した直接マッピングで動作する L1 キャッシュがあります。

  • ブロックのサイズは 16 バイトです

と のキャッシュミスとキャッシュヒットを把握しようとしていdstますsrc

質問 - srcおよびdst配列のテーブルに入力します。最初は空です:実行前

まず、私の教授の解決策を提示します。実行後

これが私の解決策ですが、どこかで間違いを犯しています:

i私が逃げるのでは1 to 4なく逃げると仮定して0 to 3

最初の反復:

src  dst

1,1-> 1,1

2,1-> 1,2

3,1-> 1,3

4,1-> 1,4

2 回目の反復:

src    dst 
1,2 ->2,1

2,2 ->2,2

3,2 ->2,3

4,2 ->2,4

3 回目の反復:

src    dst 
1,3 -> 3,1

2,3 -> 3,2

3,3 -> 3,3

4,3 -> 3,4

4 回目の反復:

src    dst 
1,4 -> 4,1

2,4 -> 4,2

3,4 -> 4,3

4,4 -> 4,4

の表に HITS がある理由がまったくわかりませんdst。間違っていることはわかっています。上記のソリューションに実際に HITS がある理由を誰か説明してもらえますか?

よろしくロン

4

1 に答える 1

5

キャッシュは通常、それぞれのサイズがnバイトの行に編成されるためです。特定のメモリ アドレスにアクセスすると、そのアドレスと周囲のn-1バイトがキャッシュに読み込まれます。

于 2012-04-09T16:01:53.910 に答える