パフォーマンスパターンスキル
パフォーマンス問題を引き起こす既知のコードパターンの拡大するカタログです。各パターンには検出シグナルと解決プレイブックが含まれています。コアパターンカタログはx86 CPUコードに焦点を当て、Windows、WSL Linux、ネイティブLinux、CUDA/NVIDIA環境向けのプラットフォームルーティングを備えています。
最適化知識は、ハードウェアが同じであれば移植可能です。プラットフォームによって変わるのは、プロファイラ用語、コンパイラフラグ、デバッグ情報形式、同期プリミティブ、CPU機能検出、そしてボトルネックがCPUホストコードかCUDAデバイスワークかという点です。
ステップ0 — プラットフォームをルーティングする
ユーザーがWSL、Linux、CUDA、NVIDIA、GPU、Nsight、ドライバ/ツールキットの不一致、コンテナ、またはプラットフォームが不明な場合は、まず references/platform-routing.md を読んでください。
次に、プラットフォーム固有のリファレンスを読み込んでください:
| プラットフォーム / 症状 | 読むファイル |
|---|---|
| Windows ネイティブ C/C++ CPU パフォーマンス | PORTING-NOTES.md |
| WSL Linux CPU パフォーマンス | references/wsl-linux.md、その後 references/linux-native.md |
| ネイティブ Linux CPU パフォーマンス | references/linux-native.md |
| CUDA/NVIDIA セットアップまたは GPU パフォーマンス | references/cuda.md |
環境が問題である場合、またはユーザーが十分なツールチェーン/プロファイラのコンテキストを提供していない場合、Windowsでは scripts/collect-perf-env.ps1 を、WSL/ネイティブLinux内では scripts/collect-perf-env.sh を使用してください。
このスキルの使い方
ステップ1 — コンテキストに合った正しいファイルを読み込む
| コンテキスト | 読むファイル |
|---|---|
| プロファイリング出力がある(VTune、AMD uProf、ETW/WPA、perf、flamegraph、Nsightサマリーなど) | triggers/from-profile.md |
| 既存のソースコードを読んでいて、プロファイリングデータがない | triggers/from-source.md |
| パフォーマンスに敏感なC/C++またはSIMDコードを新しく書いている | guidelines/new-code.md |
トリガーファイルは同じパターンをすべてカバーしていますが、関連するものだけを読み込めるよう分離されています。guidelines/new-code.md は作成時のチェックリストです — レビュー時ではなく、新しいコードを生成する際にトリガーファイルの代わりに読み込んでください。
ステップ2 — 一致するパターンを特定する
各トリガーファイルには、コードまたはプロファイルが既知のパターンに一致するかどうかを判断するのに十分なコンパクトな表と簡単な説明が含まれています。
ステップ3 — パターン詳細ファイルを読む
パターンに一致した場合は、patterns/ から対応するファイルを読んでください。記憶から修正を試みないでください。
ステップ4 — 修正を適用して検証する
パターンファイルのステップバイステップの手順と検証方法に従い、ステップ0で読み込んだルーティングファイルのプラットフォームメカニクスを使用してください。
複数のパターンが同時に適用される可能性があります。1つを選ぶ前に、可能性のあるすべての一致を確認してください。
再利用可能なライブラリモジュール
これらのスタンドアロン実装ガイドは、特定のパターンに従う場合だけでなく、このスキル内で作業する任意のエージェントが利用できます。必要な機能がある場合は、関連するファイルを直接読み込んでください。
| モジュール | 提供内容 |
|---|---|
library/cpu-dispatch.md | Windows上でのランタイムCPU機能検出とバリアント選択。手動関数ポインタディスパッチのみ — target_clones はPE/COFFターゲットでは利用不可(IFUNCなし)。__builtin_cpu_supports、明示的な __cpuid/_xgetbv パス、バリアントごとの __attribute__((target(...))) をカバー。ベンダーニュートラル(Intel + AMD)。実行時に複数のパフォーマンスレベルの実装を結合する必要がある関数で使用してください。 |
patterns/simd-upconversion-impl.md | イントリンシクスでのベクトルレジスタ幅を倍にする完全なステップバイステップのジッパーアルゴリズム(SSE→AVX2またはAVX2→AVX-512)。AVX-512アキュムレータテンプレート。変換後のチェックリスト(CPUIDガード、vzeroupper、ターゲット属性)。 |
patterns/fast-crc32c-impl.md | ドロップインCRC32Cライブラリ:AVX-512 VPCLMULQDQ融合、SSE4.2 + PCLMULQDQマルチアキュムレータ、プレーンCフォールバック。ランタイムCPUディスパッチラッパー付き。新しいCRC32Cコードが必要な場合、または既存の実装がボトルネックになっている場合に使用してください。 |
references/platform-routing.md | パターンを適用する前にWindows/WSL/ネイティブLinux/CUDAリクエストをルーティングします。 |
references/cuda.md | CUDAセットアップとパフォーマンストリアージ:ドライバ/ツールキットの可視性、Nsight SystemsとNsight Computeの比較、WSL GPU境界。 |
クロススキル統合
プロファイラ/データ収集スキルは、既知のパターンを特定した後、このスキルを呼び出すことができます。このスキルは、ソースコード、プロファイラスニペット、または環境プローブ出力からスタンドアロンでも動作します。
スキルステータス
Windows ネイティブ C/C++ 向けに移植およびレビューされ、その後WSL Linux、ネイティブLinux、CUDA/NVIDIA環境向けのルーティングノートが拡張されました。以下のコアファイルが存在します:この SKILL.md、PORTING-NOTES.md、triggers/from-source.md、triggers/from-profile.md、guidelines/new-code.md、design.md、library/cpu-dispatch.md、CRC32Cライブラリソース、プラットフォームリファレンス、ベンチマークテスト、およびすべてのパターンファイル:
parallel-accumulator,missing-vzeroupper,missing-restrictttas,false-sharing,per-cpu-stats,cold-path-annotationcv-thundering-herd,mutex-to-rwlock,simd-sortsimd-upconversion+simd-upconversion-implfast-crc32c+fast-crc32c-impllibrary-version-upgrade
references/library-versions.md には、検証されていないサードパーティDLLエントリが意図的にTODOテーブルに残されています。一次ソースの検証とWindowsでの測定なしに、これらを推奨事項に昇格させないでください。