测验:CPU
把流水线划分为 5 个阶段有什么好处?
- 一条指令完成所需时间缩短为五分之一
- 不再需要分支预测
- 单位时间内完成的指令数量增加
- 内存访问次数减少
遍历已排序数组比未排序数组快得多,主要原因是什么?
- 已排序数据更容易进入缓存
- 编译器会对已排序数组进行向量化
- 条件分支结果有规律,分支预测更准确
- 排序会让数据在内存中连续排列
通常只需几个周期的浮点加法指令突然耗时 677 个周期,最可能的原因是什么?
- CPU 时钟频率自动降低
- 编译器关闭优化后重新编译
- 该指令不在缓存中,取指被延迟
- 操作数是非规格化数,走了微代码辅助路径
读取映射为 MMIO 的设备寄存器时,mov 指令为什么可能比读取 DRAM 慢数十万倍?
- MMIO 总会触发内核态切换
- 设备驱动每次都会产生中断
- mov 指令在 MMIO 地址上会被拆成多条指令执行
- MMIO 地址不会进入缓存,读取又是必须等待响应的非过账事务
IPC(每周期指令数)测得低至 0.3,首先应怀疑什么?
- 流水线因等待内存或 I/O 访问而停顿
- CPU 时钟频率设置过低
- 指令数量过多
- 编译器没有使用向量指令
关于监控指标“CPU 使用率 100%”,哪项说明最准确?
- 表示运算单元一直不停地计算
- 表示该核心一直处于非空闲状态,但运算单元可能因内存延迟等原因停顿
- 表示时钟正以最高频率运行
- 该指标能够确定进程受 CPU 限制
共享微基准测试结果时,以下哪项最不需要一并注明?
- 测试时缓存是热的还是冷的
- 同一机器上是否同时运行其他负载
- 输入数据的性质(例如是否包含非规格化数)
- 测量时使用的编辑器和 shell 类型