cpu-pipelines-and-hazards について
開発者や学習者向けに、パイプラインの段階、ハザード、フォワーディング、ストール、分岐処理を解説し、命令スケジューリングや性能カウンターとの関係も扱うコンピューターアーキテクチャのスキルです。
主な機能
- 01基本的なパイプライン段階
- 02データハザードと制御ハザード
- 03フォワーディングとレジスタリネーミング
- 04分岐予測とパイプラインフラッシュ
- 05命令レベル並列性のヒント
- 06性能カウンターの例
活用シーン
- 01パイプラインストール指標の解釈
- 02命令順序が実行に与える影響の説明
- 03アセンブリのスケジューリング分析
- 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. 5 ステージの古典的なパイプライン(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. 構造ハザード
機能ユニットが限られていると(メモリーポートが 1 つなど)、依存関係がなくてもストールが発生します。
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. エージェントの使用方法
/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 対応