Skip to content

2014年 408 计算机组成原理 第 16 题

计算机组成原理2014年选择题2分

题目

采用指令 Cache 与数据 Cache 分离的主要目的是( )。

错因

A

缺失损失(miss penalty)是 Cache 未命中时去下一级(L2 / 主存)取数据的代价,由下一级存储的访问时间决定,与 I-Cache / D-Cache 是否分离无直接关系。把所有 Cache 性能指标混作一谈是这题的最大陷阱。

B

命中率主要由 Cache 容量、组织方式(关联度)和替换策略决定。把一个统一 Cache 拆成大小相加相等的 I/D 两个 Cache,每个的容量反而变小,命中率很可能降低。所以分离的目的肯定不是为了提命中率。

C

平均访存时间 。三个因子都不是 I/D 分离的直接获益——分离主要是为了带宽(同周期取指 + 访存),而不是降低这条公式里的任何一项。

总解析

为什么要分离 I-Cache 与 D-Cache?

回到流水线一个时钟周期内的访存需求——在经典 5 段流水线里:

阶段访存动作
IF(取指)指令
ID(译码)
EX(执行)
MEM(访存)读 / 写数据(仅 load/store 指令)
WB(写回)

关键观察:在某一时刻,流水线里前后多条指令同时存在——比如第 周期,I1 处于 MEM 阶段(要访问数据),同时 I4 处于 IF 阶段(要取指)。

如果只有一个统一 Cache,I1 和 I4 同时争用同一份 Cache 端口 → 这是典型的结构冒险(资源冲突),必须让其中一个等一拍。

分离方案

  • I-Cache 专给 IF 阶段用
  • D-Cache 专给 MEM 阶段用
  • 两者物理上独立、各有端口,可在同一周期并行被访问

→ 流水线的 IF 与 MEM 不再争用资源,结构冒险消失。

这正是 哈佛结构(指令和数据分离)的体现。冯·诺依曼结构(指令数据共用)在流水线场景下天然存在这种结构冒险,所以现代 CPU 的 L1 都是 I/D 分离的。

最终答案是 D(减少指令流水线资源冲突)

同类陷阱辨析

想到的"目的"是否成立?原因
降低缺失损失miss penalty 由下一级速度决定
提高命中率拆分反而可能降命中率(容量被分割)
降低平均访存时间不是直接因果
减少结构冒险(资源冲突)哈佛结构服务流水线的核心动机

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数