鉴于代码:
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
字节的缓存,在写入时,写入分配&amp; LRU,使用2way set关联方法,其中每个块为8
个字节:
当我从内存中读取内容时,每次迭代从内存中取出多少字节?
是4
还是8
?
我非常确定缓存有4个单元格或行,每行有8个字节。这是正确的吗?
有点令人困惑的是 2way 部分,我认为每种方式都有4
字节,对吗?如果我错了,请纠正我......
然后当我从内存中“取出”一个块时,我只是不完全理解有多少字节!!
提前致谢
罗恩
答案 0 :(得分:3)
缓存方式(即其关联性)不会影响传输发生时传输的数据量;块大小 块大小。
关联性只是衡量缓存中有多少可能位置可以存储来自内存的给定块的度量。所以:
xyz
将始终映射到同一缓存位置。xyz
可以映射到两个缓存位置之一。xyz
可以映射到缓存中的任何地方。我真的没有在这里说任何没有在维基百科:http://en.wikipedia.org/wiki/CPU_cache#Associativity。
答案 1 :(得分:0)
当CPU从不在高速缓存中的块引用(加载或存储)一个字时,该块需要存储器。因此,使用提供的参数,每次缓存未命中都涉及从内存到缓存的8字节传输。
与术语相关,您的缓存有4个条目,容器或缓存行(32字节/ 8字节/块)。因为它是双向关联的,所以有2组2个条目。具有偶数地址的块映射到设置0,而具有奇数地址的块映射到设置1。
通过移位字地址log2(block_size)位(缓存中的3位)来获得块地址。 例如: