cpu-pipelines-and-hazards
Helps developers understand how computer processors execute instructions to speed up their code.
Installation
Paste this into Claude Code, Cursor, or any agent that can run commands.
SKILL.mdShow the author's original SKILL.md
---
name: cpu-pipelines-and-hazards
description: CPU pipeline skill for hazards, forwarding, and stalls. Use when explaining pipeline stages, data/control hazards, forwarding paths, or branch stalls in performance analysis. Activates on queries about pipeline hazard, data hazard, control hazard, forwarding, pipeline stall, or superscalar basics.
---
# CPU Pipelines and Hazards
## Purpose
Explain classic and modern CPU pipeline concepts: stages, data and control hazards, forwarding/bypassing, stalls, and branch handling — foundational for optimization and understanding microarchitecture counters.
## When to Use
- Interpreting pipeline stall metrics from `skills/profilers/intel-vtune-amd-uprof`
- Teaching why instruction order affects throughput
- Relating assembly scheduling to hardware behavior
- Debugging unexpected performance cliffs in hot loops
## Workflow
### 1. Five-stage classic pipeline (MIPS-style mental model)
```
IF → ID → EX → MEM → WB
```
Overlapped execution: instruction N in EX while N+1 in ID.
### 2. Data hazards
| Type | Example | Mitigation |
|------|---------|------------|
| RAW (true) | `add r1,r2,r3` then `sub r4,r1,r5` | Forwarding from EX/MEM/WB |
| WAR / WAW | Rare in in-order; relevant in OoO rename | Register renaming |
Without forwarding:
```
stall until writeback completes
```
### 3. Control hazards (branches)
```
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)
```
See `skills/computer-architecture/branch-prediction-and-speculation`.
### 4. Structural hazards
Limited functional units (single memory port) cause stalls even without dependencies.
### 5. Practical optimization hints
```c
/* 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;
```
Pair with `skills/low-level-programming/cpu-cache-opt` — memory often dominates.
### 6. Reading uops / ports (x86)
```bash
perf stat -e instructions,cycles,stalls-frontend,stalls-backend ./app
```
VTune "Microarchitecture Exploration" maps to pipeline slots.
### 7. Agent usage
```
/cpu-pipelines-and-hazards Explain RAW hazard in this ARM assembly loop and how to break it
```
## Common Problems
| Symptom | Cause | Fix |
|---------|-------|-----|
| High `stalls-frontend` | I-cache misses / branch mispredict | Align hot loop; see branch skill |
| No speedup from unroll | Memory bound | Profile loads; prefetch |
| Wrong cycle model | Ignored OoO execution | Use perf hardware counters |
| "NOP fixes it" | Timing-sensitive MMIO | Never tune device delays by NOP |
## Related Skills
- `skills/computer-architecture/branch-prediction-and-speculation` — mispredict cost
- `skills/computer-architecture/memory-hierarchy-and-caches` — load latency
- `skills/low-level-programming/cpu-cache-opt` — cache-line effects
- `skills/profilers/intel-vtune-amd-uprof` — pipeline analysis
- `skills/low-level-programming/assembly-arm` — instruction schedulingMirrored from the author's public source. Install counts from the open skills registry.