Appearance
题目
程序 P 在机器 M 上的执行时间是 20 秒,编译优化后,P 执行的指令数减少到原来的 70%,而 CPI 增加到原来的 1.2 倍,则 P 在 M 上的执行时间是( )。
错因
A
把 CPI 的变化方向搞反、还叠加了错误的折扣系数。误把"CPI 增加到 1.2 倍"理解成"机器变快了 → 时间应当 ÷1.2",又粗略把 1/1.2 当成 0.6,于是用 。CPI 变大意味着每条指令耗的周期数更多,时间应当乘而不是除。
B
只把 CPI 这一项的方向弄反了:。同样把"CPI 增加到 1.2 倍"误想成"性能变 1.2 倍 → 时间÷1.2"。CPI 在 CPU 时间公式里是分子,变大就是慢,应当 ×1.2。
C
只算了指令数那一刀:,把 CPI 增大的影响漏了。题目同时给出指令数和 CPI 两个变化,两个系数都要乘,缺一不可。
总解析
核心公式:
机器 M 不变(主频 不变),优化前后只有指令数和 CPI 在变。设原指令数 、原 CPI 。
原执行时间:
优化后(指令数 → ,CPI → ):
代入数字:
| 量 | 优化前 | 优化后 | 比例 |
|---|---|---|---|
| 指令数 | × 0.7 | ||
| CPI | × 1.2 | ||
| 主频 | 不变 | ||
| 时间 | 20 s | 16.8 s | × 0.84 |
最终答案是 D(16.8 秒)。
两个常见审题陷阱:
- "指令数减少到原来的 70%" = 新值是 (剩 70%);如果说"减少 70%",那才是剩 30%。本题是"减少到",不要再 1 - 0.7。
- "CPI 增加到原来的 1.2 倍" = 新 CPI 是 ,时间应 ×1.2 不是 ÷1.2。"优化"二字容易让人下意识觉得"什么都变快",但本题恰恰是"指令数变少 / CPI 变多"的折衷——典型的编译器以更复杂指令换更短指令序列。