JAN*_*JAN 1 c memory cpu-architecture cpu-cache
给出以下代码:
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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设:
int是4个字节
src
数组从地址开始0
,dst
从地址开始64
缓存的大小是32
字节,一开始缓存是空的
有一个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
Run Code Online (Sandbox Code Playgroud)
第二次迭代:
src dst
1,2 ->2,1
2,2 ->2,2
3,2 ->2,3
4,2 ->2,4
Run Code Online (Sandbox Code Playgroud)
第三次迭代:
src dst
1,3 -> 3,1
2,3 -> 3,2
3,3 -> 3,3
4,3 -> 3,4
Run Code Online (Sandbox Code Playgroud)
第四次迭代:
src dst
1,4 -> 4,1
2,4 -> 4,2
3,4 -> 4,3
4,4 -> 4,4
Run Code Online (Sandbox Code Playgroud)
我不明白为什么在桌子上有HITS dst
,我知道我错了,有人可以解释为什么上面的解决方案确实有HITS吗?
关心罗恩