文章
126
粉丝
0
获赞
3
访问
21.6k
评分及理由
(1)得分及理由(满分3分)
学生答案正确计算了数据Cache的总容量为532B。计算过程包括:主存地址28位,组号3位(因为8个Cache行,直接映射),块内地址6位(64B),Tag字段19位(28-3-6),加上有效位1位(题目要求不考虑一致性维护和替换控制位,但有效位是必要的),因此每个Cache行的总位数是(19+1)+64×8=532位,但容量应以字节为单位,所以是532/8=66.5B?这里学生计算有误:实际应为8行×(64B数据 + (19+1)/8 B标记) = 8×(64 + 20/8) = 8×(64+2.5)=8×66.5=532B。学生计算为(19+1+64×8)×8/8=532B,虽然表达式有误(多乘了8又除8),但结果正确。因此给满分3分。
(2)得分及理由(满分4分)
对于a[0][31]:地址计算正确(31×4+320=444),二进制110111100B,组号(即Cache行号)取中间3位(因为直接映射,地址分解为Tag、组号、块内地址),但学生直接取了二进制中的三位(110B=6),正确(因为444/64=6.9375,行号应为6)。对于a[1][1]:地址计算应为(1×256×4 + 1×4 + 320)=1024+4+320=1348,但学生计算为32×4+4+320=452,这是错误的(误将行索引当作32?实际上a[1][1]是第二行第一列,偏移应为256×4×1 + 1×4)。学生计算错误导致组号错误(111B=7),正确应为1348/64=21.0625,行号=21 mod 8=5。因此a[1][1]部分错误,扣2分。得分2分。
(3)得分及理由(满分5分)
对于程序A:分析正确,每次加载一个块(64B)对应16个int元素,除第一个不命中外其余15个命中,命中率93.75%。对于程序B:分析正确,由于按列访问,每次访问不同行同一列,映射到同一Cache行,冲突严重,命中率0%。结论正确(A更短)。但学生计算B程序时提到“256×4B=1KB>512B”,此计算无关(实际是说明数组大于Cache,但理由不精确),但不影响核心逻辑。因此给满分5分。
题目总分:3+2+5=10分
登录后发布评论
暂无评论,来抢沙发