2way缓存关联?我从内存中读取了多少字节?

时间:2012-04-12 17:01:49

标签: c caching memory memory-management

鉴于代码:

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字节,对吗?如果我错了,请纠正我......

然后当我从内存中“取出”一个块时,我只是不完全理解有多少字节!!

提前致谢

罗恩

2 个答案:

答案 0 :(得分:3)

缓存方式(即其关联性)不会影响传输发生时传输的数据量;块大小 块大小。

关联性只是衡量缓存中有多少可能位置可以存储来自内存的给定块的度量。所以:

  • 对于直接映射缓存(associativity = 1),内存地址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位)来获得块地址。 例如:

  • 地址64属于第8块
  • 地址72属于第9块