次のコードを考えると:
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
キャッシュのサイズは
32
bytes で、最初はキャッシュは空ですライトスルー、ライトアロケートを使用した直接マッピングで動作する 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 がある理由を誰か説明してもらえますか?
よろしくロン