【发布时间】:2012-04-12 17:01:49
【问题描述】:
给定代码:
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数组从地址0开始,dst从地址64开始缓存大小为
32字节,一开始缓存为空
假设我有一个大小为32 bytes 的缓存,在 write through、write allocate & LRU 下,使用 2way set associative 方法,其中每个块是8 bytes:
当我从内存中读取时,我每次从内存中获取多少字节?
是 4 还是 8 ?
我很确定的是缓存有 4 个单元或行,每行有 8 个字节。这是正确的吗?
2way 部分有点令人困惑,我认为每个方式都有4 字节,对吧?如果我错了,请纠正我...
然后,当我从内存中“取出”一个块时,我只是不完全了解多少字节!!?
提前致谢
罗恩
【问题讨论】:
-
这是作业还是只是自学/好奇心? 32 字节缓存不存在。
-
@Mysticial:这不是作业,这是我下周考试前的练习。
标签: c caching memory memory-management