综合题

某 8 位计算机主存容量 32K 字节, 组相联 Cache 容量 2K 字节, 每组 4Blocks, 每 Block64 个字节。 假设 Cache 开始是空的, CPU 从主存存储单元 0 开始顺序读取 2176 个字节数据(即按地址 0、 1、 2 的顺序一直读取到地址单元 2175), 然后再重复这样的读数过程 7 遍(共 8 遍), Cache 速度是主存速度的 10 倍, 采用 LRU 替换算法, 假定块替换的时间忽略不计, 计算采用 Cache 后的加速比。

【正确答案】

(1) 分析 CPU 第一遍从主存读取数据的情况。 由于 Cache 每个字块有 64 个字节, 而且初态 Cache 为空,因此 CPU 读第 0 号单元时, 未命中, 必须访问主存, 同时将该字节所在单元的主存块调入 Cache 第 0 组中的任一块, 接着 CPU 读 1~63 号单元都命中。 同理, CPU 读第 64, 128, …, 1984 号单元时均未命中, 而其余 65~127, …, 1985~2047 都命中。 此时, Cache 中的 8 组, 每组 4 块, 全部都已装满, 而 CPU 再读第 2048 号单元时, 未命中, 必须访问主存, 同时需要按照 LRU 策略替换掉 Cache 中近期长久未被访问的字块, 也就是第 0 号单元所在的字块, 接着 CPU 读 2048~2111 号单元都命中。 同理, CPU 读第 2112 单元时, 也需替换掉 Cache 中的字块, 而根据 LRU 策略, 会换掉第 64 号单元所在的字块。 综上述, 在 CPU 第一遍读取时, 共 34 次未命中,其余 2142 次命中。
(2) CPU 第 2 遍读取时, 由于第 0 号单元所在的字块在前面被换出了, 所以未命中, 同时需要按照 LRU策略进行替换, 但是, 注意这次并不是将 2048 号单元所在的字块替换掉(因为 LRU 算法保护新调入的块), 而将第 512 号单元所在的字块替换掉, 所以等到 CPU 读取 512 号单元时, 会出现未命中, 必须再替换, 同理, 也根据 LRU 策略进行。 这样, 在整个 Cache 的第 0 组和第 1 组中所有的块都会不断地进行这种替换。 而第 2 组到第 7 组由于在第一遍中没有出现替换, 在第二遍读时也不会出现, 所以 CPU 读取的字节全部命中。 综上述, 第二遍读时, 第 0, 64, 512, 576, …, 2048, 2112 号共 10 个单元未命中, 其余 2166 个单元命中。
(3) 第 3 到第 8 遍读取与此相同。
根据题意, 设主存存取周期为 10t, Cache 的存取周期为 t, 采用 Cache 后的访问时间为:(34+10* 7) * 10t+(2142+2166* 7) t, 而未采用 Cache 的主存访问时间为 2176* 8*10t, 所以加速比为:

【答案解析】