Appearance
题目
某 32 位计算机,CPU 主频为 800MHz,Cache 命中时的 CPI 为 4,Cache 块大小为 32 字节;主存采用 8 体交叉存储方式,每个体的存储字长为 32 位、存储周期是 40ns;存储器总线宽度为 32 位,总线时钟频率为 200MHz,支持突发传送总线事务。每次读突发传送总线事务的过程包括:送首地址和命令、存储器准备数据、传送数据。每次突发传送 32 字节,传送地址或者 32 位数据均需要一个总线时钟周期。请回答下列问题,要求给出理由或者计算过程。
(1) CPU 和总线的时钟周期各是多少?总线的带宽(即最大数据传输率)为多少?
(2) Cache 缺失时,需要用几个读突发传送总线事务来完成一个主存块的读取?
(3) 存储器总线完成一次读突发传送总线事务所需的时间是多少?
(4) 若程序 BP 执行过程中,共执行了 100 条指令,平均每条指令需要 1.2 次访存,Cache 缺失率是 5%,不考虑替换等开销,则 BP 的 CPU 执行时间是多少?
解析
本题的核心是 8 体低位交叉 + 32B 突发传送 的协同:把"等待存储器准备 40ns"和"通过 32 位总线传 8 次 4B"的时间用 流水线式重叠 算清楚。
各问层层递进:(1) 算时钟周期 → (2) 数突发次数 → (3) 算单次突发耗时 → (4) 综合 CPU 执行时间。
(1) 时钟周期与总线带宽 [3 分]
CPU 时钟周期。
总线时钟周期。
总线带宽。 总线宽度 32 位 = 4B,每个总线时钟周期传 1 次数据:
(2) Cache 缺失时的突发次数 [1 分]
每次读突发传送 32B,正好等于一个 Cache 块的大小 32B:
故 Cache 缺失只需 1 次 读突发总线事务。
(3) 一次读突发传送的耗时 [4 分]
读突发事务的三阶段:送地址 → 等存储器准备 → 传 32B 数据。8 体低位交叉的精髓在于"准备"和"传送"可以重叠。
Step 1. 送首地址:1 个总线周期。
Step 2. 第一个体准备数据:40 ns。
8 个体每隔 ns 启动一个,整个 8 体启动完成需要 40 ns(与第一个体的存储周期同步结束)。第一个体的数据 40ns 后就绪。
Step 3. 传 32B 数据:8 个总线周期。
总线宽度 4B,要传 32B 需要 拍。从第一个体数据就绪开始,每 5 ns 拿一个体的数据上总线(其余体的"准备"已与之前的传送重叠):
总耗时:
易错点(必须重叠): 不要把"8 个体各 40 ns"理解成 ns。低位交叉的设计目的就是让 8 个体的存取时间像流水线一样重叠——只在最开始的第一个体时多等了 40 ns,之后每 5 ns 就有新数据可拿。这是本题的精华。
(4) 程序 BP 的 CPU 执行时间 [3 分]
模型: 总执行时间 = Cache 命中部分 + Cache 缺失带来的额外开销。
Step 1. 命中时的指令执行时间。
100 条指令,每条 CPI = 4:
Step 2. Cache 缺失带来的额外开销。
每条指令访存 1.2 次,缺失率 5%,每次缺失需 1 次突发传送(85 ns):
Step 3. 合计。
易错点: 命中时的开销已经把"访问 Cache 的时间"算进 CPI(CPI = 4 包含命中访问)。所以"额外开销"只算"缺失才需要的下钻到主存"那部分,不能再叠加一遍 4 个 CPU 周期。
【评分说明】 ① 执行时间采用 执行时间 = 指令条数 × CPI × 时钟周期 + 访存次数 × 缺失率 × 缺失损失 公式可酌情给分。 ② 公式正确但运算结果错误,酌情给分。