mcpField
C
cpu-pipelines-and-hazards

cpu-pipelines-and-hazards

github.com/mohitmishra786开发269322 次安装18 周前更新
代码仓库

关于 cpu-pipelines-and-hazards

面向开发者和学习者的计算机体系结构技能,介绍流水线阶段、冒险、转发、停顿和分支处理,并联系指令调度与性能计数器。

主要功能

  1. 01经典流水线阶段
  2. 02数据与控制冒险
  3. 03转发与寄存器重命名
  4. 04分支预测与流水线清空
  5. 05指令级并行提示
  6. 06性能计数器示例

适用场景

  1. 01解读流水线停顿指标
  2. 02说明指令顺序对执行的影响
  3. 03分析汇编指令调度
  4. 04排查热点循环的性能下降

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill cpu-pipelines-and-hazards

安装后在 Claude Code 中输入/cpu-pipelines-and-hazards确认已加载。

详细介绍

CPU 流水线与冒险

目的

讲解经典和现代 CPU 流水线概念:阶段、数据与控制冒险、转发/旁路、停顿和分支处理——这些是优化和理解微架构计数器的基础。

适用场景

  • 解读 skills/profilers/intel-vtune-amd-uprof 中的流水线停顿指标
  • 讲解指令顺序为何会影响吞吐量
  • 关联汇编调度与硬件行为
  • 排查热点循环中意外的性能断崖

工作流

1. 经典五阶段流水线(MIPS 风格的思维模型)
IF → ID → EX → MEM → WB

重叠执行:指令 N 在 EX 阶段时,指令 N+1 在 ID 阶段。

2. 数据冒险
类型示例缓解方法
RAW(真相关)add r1,r2,r3 后接 sub r4,r1,r5从 EX/MEM/WB 阶段转发
WAR / WAW在顺序执行中较少见;与 OoO 重命名相关寄存器重命名

没有转发时:

stall until writeback completes
3. 控制冒险(分支)
Branch in ID → target unknown until EX
├── Predict taken/not-taken (static or dynamic)
├── Flush wrong-path instructions on mispredict
└── Penalty = pipeline depth (varies by CPU)

参见 skills/computer-architecture/branch-prediction-and-speculation。

4. 结构冒险

功能单元受限(例如只有一个内存端口)时,即使没有依赖也会导致停顿。

5. 实用优化提示
/* Bad — tight dependency chain */
for (int i = 0; i < n; i++)
    acc = acc + data[i];   /* each iter waits on acc */

/* Better — multiple accumulators (ILP) */
acc0 = acc1 = 0;
for (int i = 0; i < n; i += 2) {
    acc0 += data[i];
    acc1 += data[i+1];
}
acc = acc0 + acc1;

搭配 skills/low-level-programming/cpu-cache-opt 使用——内存通常是主要瓶颈。

6. 解读 uops / 端口(x86)
perf stat -e instructions,cycles,stalls-frontend,stalls-backend ./app

VTune 的“Microarchitecture Exploration”映射到流水线槽位。

7. Agent 使用方式
/cpu-pipelines-and-hazards Explain RAW hazard in this ARM assembly loop and how to break it

常见问题

症状原因修复方法
stalls-frontend 较高I-cache 未命中 / 分支预测错误对齐热点循环;参见分支技能
循环展开后没有提速受内存限制分析加载操作;预取
周期模型不准确忽略了 OoO 执行使用 perf 硬件计数器
“NOP 能解决问题”对时序敏感的 MMIO绝不要用 NOP 调整设备延迟

相关技能

  • skills/computer-architecture/branch-prediction-and-speculation — 分支预测错误的开销
  • skills/computer-architecture/memory-hierarchy-and-caches — 加载延迟
  • skills/low-level-programming/cpu-cache-opt — 缓存行的影响
  • skills/profilers/intel-vtune-amd-uprof — 流水线分析
  • skills/low-level-programming/assembly-arm — 指令调度

评论

支持 Markdown