乱序执行、缓存与预取

共 46 题
#

1. 为何分支预测失败的惩罚(misprediction penalty)是 OoO 设计的关键约束?

A 内存大小
B 缓存大小
C 流水线深度(取指到分支执行的距离) ✓ 正确答案
D 寄存器数量
#

2. 给定两段循环 RMW 写同一寄存器,说明为何需重命名?

A RAW 真依赖
B 结构冒险
C WAR/WAW 假依赖 ✓ 正确答案
D 分支冒险
#

3. 解释 ROB 满时新指令必须 stall 的机制?

A 执行单元继续执行
B ROB 自动扩容
C 新指令必须 stall 直到最老指令提交释放空间 ✓ 正确答案
D 指令改走顺序执行
#

4. 解释 ROB(Reorder Buffer)在指令提交(commit)阶段的角色?

A 按程序顺序提交,保证精确状态与投机执行安全 ✓ 正确答案
B 乱序提交
C 只负责取指
D 只做分支预测
#

5. 解释乱序执行(OoO)的本质,保留站、寄存器重命名、ROB 三件套如何配合?

A 保留站
B 寄存器重命名
C ROB ✓ 正确答案
D 分支预测器
#

6. 解释寄存器重命名如何消除 WAW/WAR 假依赖?

A 强制指令顺序执行
B 增加缓存
C 每次写分配新物理寄存器,使先后写不再共享同一物理寄存器 ✓ 正确答案
D 删除多余指令
#

7. 解释为何 ARM Cortex-A77 扩大乱序执行资源(乱序窗口/ROB 128→160 项)能提升 ILP?

A 减少功耗
B 加快外设
C 减小芯片面积
D 扩大乱序窗口,提高 ILP,更好掩盖长延迟 ✓ 正确答案
#

8. 解释 scoreboard 算法中指令等待、执行、写回的三个阶段?

A 分支预测
B 结构冲突和 RAW/WAW ✓ 正确答案
C 缓存替换
D 指令译码
#

9. 给定一段 for(i=0;i<n;i++){...} 循环的分支指令,2-bit 预测器工作过程?

A 大约 n 次
B 大约 n/2 次
C 大约 1 次(最后一次) ✓ 正确答案
D 0 次
#

10. 解释 1-bit 与 2-bit saturating counter 分支预测器的差异?

A 需要的状态更少
B 省硬件
C 预测更快
D 对分支方向变化的抖动更鲁棒,需两次错误才翻转 ✓ 正确答案
#

11. 解释 TAGE(TAgged GEometric history length)分支预测器中多个表的几何级数设计?

A 覆盖从短到长的历史关联,高效利用容量提高准确率 ✓ 正确答案
B 减少表数量
C 加快取指
D 降低功耗
#

12. 解释 indirect branch 与 conditional branch 在预测器上的差异?

A 间接分支需预测目标地址,条件分支只需预测方向 ✓ 正确答案
B 两者都只预测方向
C 条件分支需预测目标
D 无差异
#

13. 解释为何循环分支(loop branch)在多数 CPU 上几乎不误预测?

A 高度偏向"取"且规律,仅在最后一次迭代误预测 ✓ 正确答案
B 循环分支随机
C 无分支
D 预测器忽略循环
#

14. 解释分支目标缓冲(BTB)与分支预测器(BHT)的区别?

A BTB 预测方向,BHT 存目标
B BTB 缓存目标地址,BHT 存方向历史/预测状态 ✓ 正确答案
C 两者相同
D 都是数据缓存
#

15. 解释返回地址栈(RAS)如何预测函数返回地址?

A 随机预测
B call 时压入返回地址,ret 时弹出栈顶作为预测 ✓ 正确答案
C 用 BTB 预测
D 只预测函数入口
#

16. 给定一个 32KB 4-way set-associative cache,64B line,画出地址 tag/index/offset 位拆分?

A 7 位 ✓ 正确答案
B 6 位
C 5 位
D 8 位
#

17. 给定一个 8-way 1MB L2 cache,画出 index/tag 位宽?

A 11 位 ✓ 正确答案
B 10 位
C 9 位
D 12 位
#

18. 解释 L1/L2/L3 多级缓存层次的设计动机与典型容量范围?

A 只追求容量
B 减少 SRAM 面积
C 只追求速度
D 在速度与容量间权衡,利用局部性让多数访问命中最快层 ✓ 正确答案
#

19. 解释 cache line(缓存行)的概念与典型 64B 尺寸由来?

A 8B
B 16B
C 256B
D 64B ✓ 正确答案
#

20. 解释 victim cache 与 stream buffer 在 miss 优化中的角色?

A 预取顺序数据
B 加快写回
C 扩大缓存
D 缓解冲突性 miss,留住刚被替换的行以便快速命中 ✓ 正确答案
#

21. 解释 write-back 与 write-through 两种写策略的差异?

A write-back 只更新缓存并在替换时写回,write-through 每次写都更新内存 ✓ 正确答案
B write-back 写时同时更新内存,write-through 只更新缓存
C 两者相同
D write-through 无法写内存
#

22. 解释为何 write-back 通常配合 write allocate 而 write-through 配合 no-write-allocate?

A no-write-allocate
B 不写缓存
C 两者都可
D write-allocate ✓ 正确答案
#

23. 解释 inclusive/exclusive cache 层次协议下 L3 与 L2 的关系?

A L2 与 L3 不重叠
B L2 与 L3 完全重叠
C L2 内容完全包含于 L3,简化一致性但浪费容量 ✓ 正确答案
D 无 L3
#

24. 解释 GHB(Global History Buffer)预取器的工作机制?

A 仅单条指令的固定步长
B 全局访存历史与地址增量(delta)的关联 ✓ 正确答案
C 随机数
D 缓存命中率
#

25. 解释为何 ARM 在 prefetcher 上增加 AMP(Adaptive Multipath)?

A 只跟踪单一路径
B 跟踪多个并行访存路径并自适应调度,兼顾准确率与带宽 ✓ 正确答案
C 不使用历史
D 只预取指令
#

26. 解释 memory dependence predictor(MDP)与 store-set 预测器?

A 预测分支
B 预测缓存命中
C 预测 load 可能与哪些 store 冲突,决定 load 能否提前执行 ✓ 正确答案
D 预测指令长度
#

27. 解释 2-bit counter 在 strongly biased 分支上为何仍能稳定?

A 需要连续两次错误才翻转方向,单次噪声不改变预测 ✓ 正确答案
B 每次错误都翻转
C 忽略历史
D 只预测一次
#

28. 解释 indirect branch predictor(如 IBT)为何采用路径哈希?

A 减少表项
B 加快取指
C 区分同一分支在不同执行路径下的不同目标 ✓ 正确答案
D 降低功耗
#

29. 解释为何 L1 命中延迟(L1 hit latency)在 Intel/AMD 通常为 4-5 cycle?

A 主频无关
B 编译器设置
C 内存条带宽
D L1 的 SRAM 访问与 tag 比较等关键路径在目标主频下的延迟 ✓ 正确答案
#

30. 解释 Intel Pentium 4(RWT)与 AMD Zen 的 ROB 容量差异?

A 更小
B 无 ROB
C 相同
D 更大(约 224 项),乱序窗口更宽,提升 IPC ✓ 正确答案
#

31. 解释为何 speculative load 需要在分支确认前阻塞 store?

A 避免读到顺序错误的值,保证内存一致性 ✓ 正确答案
B 节省带宽
C 加快预测
D 减少功耗
#

32. 解释 load-use 冒险在 OoO 处理器中如何被动态调度隐藏?

A 强制 stall
B load 等待期间乱序执行其他无依赖指令 ✓ 正确答案
C 增加缓存
D 删掉 load
#

33. 解释为何 gshare = (PC XOR GHR) 能降低 aliasing?

A 增加表大小
B 把全局历史混入索引,区分不同分支与上下文,降低 aliasing ✓ 正确答案
C 加快运算
D 减少历史
#

34. 解释全局历史(GHR)、局部历史(PHT)两种预测器输入差异?

A 两者都用全局历史
B PHT 用每分支自身历史,GHR 用所有分支的全局历史 ✓ 正确答案
C 两者都用局部历史
D 无差异
#

35. 解释为何 SPEC int 2017 中 mcf 误预测率显著高于 bzip2?

A bzip2 分支更多
B mcf 分支高度依赖数据且难以预测,bzip2 分支规律可预测 ✓ 正确答案
C mcf 无分支
D 预测器偏爱 bzip2
#

36. 解释 LRU(最近最少使用)与 PLRU(伪 LRU)替换策略的硬件开销差异?

A 替换更精确
B 命中率更高
C 容量更大
D 硬件开销小(用树状位近似)但替换精度略低 ✓ 正确答案
#

37. 解释直接映射(direct-mapped)与组相联(N-way set-associative)的冲突差异?

A 硬件更简单
B 容量更大
C 延迟更低
D 减少冲突 miss(多个映射到同组的地址可同时在多个路) ✓ 正确答案
#

38. 解释 prefetch throttling 在 LLC miss rate 上升时的策略?

A 增加预取强度
B 降低预取强度,保护缓存容量与带宽 ✓ 正确答案
C 关闭缓存
D 无动作
#

39. 解释 prefetcher 对访存模式的探测,strided / stream / pointer-chasing 如何识别?

A strided
B stream
C 顺序
D pointer-chasing(指针追逐) ✓ 正确答案
#

40. 解释 software prefetch 指令(prfm/prefetcht0)与 hardware prefetch 的互补?

A 互补:硬件覆盖规律访问,软件覆盖硬件无法识别的复杂模式 ✓ 正确答案
B 完全替代
C 软件预取无用
D 硬件预取失效
#

41. 解释 stream prefetcher 在多大 stride 范围内有效?

A 相邻/小步长的顺序流 ✓ 正确答案
B 大跨步随机访问
C 指针追逐
D 随机访问
#

42. 解释为何数据库顺序扫描受益于 hardware prefetcher?

A 顺序访问完全可预测、空间局部性强,预取准确率高 ✓ 正确答案
B 随机访问可预测
C 预取器不工作
D 扫描不访存
#

43. 解释为何链式数据结构(如链表)的遍历 prefetcher 收益有限?

A 地址是指针依赖的,无法预先预测,预取无法并行 ✓ 正确答案
B 链表短
C 预取器坏
D 链表不访存
#

44. 解释时间局部性(temporal locality)与空间局部性(spatial locality)的差异?

A 同一地址被重复访问
B 数据不连贯
C 指令分段
D 相邻地址的数据很可能被访问 ✓ 正确答案
#

45. 解释顺序预取(sequential prefetch)与跨步预取(stride prefetcher)的适用场景?

A 随机访问
B 固定步长(非连续但有规律)的访问 ✓ 正确答案
C 指针追逐
D 单次访问
#

46. 解释 prefetch distance(提前多少 cycle 预取)的经验值?

A 更好掩盖延迟
B 预取数据过早占用/污染缓存,可能被替换 ✓ 正确答案
C 无法预取
D 主频下降