缓存内存组织

时间:2015-03-01 18:44:41

标签: c caching computer-architecture

我想了解以下程序在主内存更新方面的工作原理。

int main() { 
    short a[256], b[256]; 
    register i; 

    for (i=0 ; i < 256 ; i++) 
       a[i] = i; 
    for (i=0 ; i < 256 ; i++) 
       b[i] = 255 - i; 
    for (i=0 ; i < 256 ; i++) 
       b[i] = b[i] - a[i]; 
    return 0; 
} 

我有一个16位的地址总线,主存储器以字节为单位,高速缓冲存储器大小为512 2路组关联,块大小为16字节,CPU只能从高速缓冲存储器中读取信息。

当我们使用Write Through no write allocate策略时会发生什么 什么时候我们使用Write back write分配策略?

1 个答案:

答案 0 :(得分:0)

我假设

  

缓存内存大小为512

你的意思是512 byte

我们假设缓存为空,并且其中没有任何内容映射到a[]b[]区域。

如果您的代码以回写方式运行,那么第一个循环将完全缓存。当发生未命中时,第三个循环将在a[i]b[i]之后获取16个字节,并继续命中直到达到下一个块(8个迭代中1个未命中)。

使用write-allocate,前两个将每8次迭代一次,第三次循环全部命中。

在这种情况下,a[]b[]属于同一组,因此对于“双向关联”部分来说很好。 但是,如果您声明超过4个大小为short[256]的数组,则会产生冲突。

int main() { 
    short a[256], b[256], c[256], d[256], e[256]; 
    register i; 

    for (i=0 ; i < 256 ; i++) 
       a[i] = i;// a in set0 
    for (i=0 ; i < 256 ; i++) 
       c[i] = 255 - i; //c in set 1
    for (i=0 ; i < 256 ; i++) 
       e[i] = c[i] - a[i]; // e/c/a evacuates each other
    return 0; 
}