假设某计算机主存地址空间大小为64MB,计算机组成习题答案(清华大学出版社)...

本文通过分析三个程序段A、B、C,探讨了数组访问的时间局部性和空间局部性,以及对Cache的影响。针对不同程序段,计算了写操作次数、写不命中次数和写缺失率。同时,讨论了不同主存地址空间大小下,采用不同写策略对数据一致性及性能的影响,并举例说明了某些特定地址访问序列可能导致的Cache缺失率差异。最后,对比了不同Cache设计方案的缺失率和执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struct pt_color { int c; int m; int y; int k; } struct pt_color square[8][8]; int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { square[i][j].c = 0; square[i][j].m = 0; square[i][j].y = 1; square[i][j].k = 0; } } struct pt_color { int c; int m; int y; int k; } struct pt_color quare[8][8]; int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { square [j] [i].c = 0; square [j] [i].m = 0; square [j] [i].y = 1; square [j] [i].k = 0; } } struct pt_color { int c; int m; int y; int k; } struct pt_color square[8][8]; int i, j; for (i = 0; i < 8; i++) for (j = 0; j < 8; j++) square[i][j].y = 1; for (i = 0; i < 8; i++) for (j = 0; j < 8; j++) { square[i][j].c = 0; square[i][j].m = 0; square[i][j].k = 0; }

程序段A 程序段B 程序段C

假设cache的数据区大小为512B,采用直接映射,块大小为32B,存储器按字节编址,sizeof(int)=4。编译时变量i和j分配在寄存器中,数组square按行优先方式存放在000008C0H开始的连续区域中,主存地址为32位。要求: (1) 对三个程序段A、B、C中数组访问的时间局部性和空间局部性进行分析比较。 (2) 画出主存中的数组元素和cache中行的对应关系图。 (3) 计算三个程序段A、B、C中的写操作次数、写不命中次数和写缺失率。 参考答案:

(1)对于时间局部性来说:

程序段A、B和C中,都是每个数组元素只被访问一次,所以都没有时间局部性; 对于空间局部性来说:

程序段A访问顺序和存放顺序一致,所以,空间局部性好; 程序段B访问顺序和存放顺序不一致,所以,空间局部性不好;

程序段C虽然访问顺序和存放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值