文章
156
粉丝
195
获赞
0
访问
28.4k
1)
时间局部性:循环中 x[i] 和 y[i] 在每次循环只访问一次,之后不再访问,所以时间局部性差。
空间局部性:数组元素在内存中连续存放,访问 x[i] 后会访问 x[i+1](下一次循环),且一次访问一个 float(4 字节),一个缓存块可存多个元素,所以空间局部性好。
2)
数据区容量 32B,块大小 16B → 块数 = 32/16=232/16=2 块。
直接映射:主存块映射到 Cache 块号 = (主存块地址) mod 2。
主存块大小 16B → 每个块可放 4 个 float(4×4=16B)。
数组 x 起始地址 0000 0040H(十六进制),y 紧接 x 存放。
x 有 8 个 float = 32B,占用 2 个主存块:
块地址计算:主存块号 = 物理地址 / 16(取整)。
0000 0040H = 64 十进制,64 / 16 = 4(主存块号 m4)。
0000 0050H = 80 十进制,80 / 16 = 5(主存块号 m5)。
y 起始地址 = 0000 0060H(x 结束地址 0000 005FH 下一个是 0060H),
y 的 32B 占用主存块:
0000 0060H = 96 / 16 = 6(m6)
0000 0070H = 112 / 16 = 7(m7)。
映射规则:
主存块号 mod 2 → Cache 块号
m4 (4 mod 2 = 0) → 块 0
m5 (5 mod 2 = 1) → 块 1
m6 (6 mod 2 = 0) → 块 0
m7 (7 mod 2 = 1) → 块 1
访问过程(循环 i=0 到 7):
每个循环访问 x[i] 和 y[i],顺序为:
x[0](m4 块 0)→ 未命中,装入 Cache 块 0(m4)
y[0](m6 块 0)→ 冲突,未命中,装入 Cache 块 0(m6)
x[1](m4 块 0)→ 冲突,未命中,装入 Cache 块 ...
登录后发布评论
暂无评论,来抢沙发