C 双向缓存关联?我从内存中读取多少字节?

C 双向缓存关联?我从内存中读取多少字节?,c,caching,memory,memory-management,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]; } } } void transpose2(数组dst、数组src) { int i,j; 对于(i=0;i,缓存方式(也称为其关联性)不影响传输发生时传输的数据量;块大小为块大小 关联性只是衡量缓存中

鉴于代码:

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];
    }
  }
}
void transpose2(数组dst、数组src)
{
int i,j;
对于(i=0;i,缓存方式(也称为其关联性)不影响传输发生时传输的数据量;块大小为块大小

关联性只是衡量缓存中一个给定的内存块可以存储多少个可能的位置。因此:

  • 对于直接映射缓存(关联性=1),内存地址
    xyz
    将始终映射到同一缓存位置
  • 对于双向缓存,
    xyz
    可以映射到两个缓存位置中的任何一个
  • 对于完全关联缓存,
    xyz
    可以映射到缓存中的任何位置
我在这里说的不是维基百科上没有解释过的任何东西。

当CPU引用(加载或存储)一个不在缓存中的块中的字时,该块被要求存储到内存中。因此,根据提供的参数,每次缓存未命中都涉及从内存到缓存的8字节传输

与术语相关,您的缓存有4个条目、容器或缓存线(32字节/8字节/块)。由于它是双向关联的,因此有2组2个条目。偶数addreses的块映射到设置0,而奇数地址的块映射到设置1

块地址是通过移动字地址log2(块大小)位(缓存中的3位)获得的。 例如:

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

这是家庭作业还是自学/好奇?32字节缓存不存在。@Mystical:这不是家庭作业,这是我下周考试前的练习。所以你的意思是,每次迭代,我需要8个字节。@ron:这取决于命中和未命中的数量。有8个、16个或24个字节传输。缓存的每个单元有2个路径?每个路径有4个字节?谢谢。@ron:路径数是缓存本身的属性,而不是每个块的属性。块没有细分为路径。对不起,Oli,但我失去了你。我只是想描绘缓存的外观。正如我目前看到的,缓存有4个单元,each单元有8个字节(因此总共32个字节),缓存的每个单元最多可以有两个位置,每个位置有4个字节。如果我错了,请纠正我。