gpt4 book ai didi

高速缓冲存储器的组织

转载 作者:行者123 更新时间:2023-11-30 19:44:03 25 4
gpt4 key购买 nike

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

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路组相联, block 大小为16字节,CPU只能从缓存中读取信息。

当我们使用 Write Through 无写分配策略时会发生什么当我们使用回写写分配策略时会发生什么?

最佳答案

我假设

cache memory size of 512

你的意思是512字节

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

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

使用写分配,前两个循环每 8 次迭代就会出现一次未命中,第三个循环是全命中。

在本例中,a[]b[] 位于同一集合中,因此对于“2 路关联”部分来说没问题。但如果您声明超过 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;
}

关于高速缓冲存储器的组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com