Skill des motifs de performance
Un catalogue croissant de motifs de code bien connus causant des problèmes de performance, avec des signaux de détection et des playbooks de résolution pour chacun. Le catalogue principal de motifs se concentre sur le code CPU x86, avec un routage par plateforme pour Windows, WSL Linux, Linux natif et les environnements CUDA/NVIDIA.
Les connaissances d'optimisation sont portables lorsque le matériel est le même. Ce qui change par plateforme, ce sont les mécanismes : le vocabulaire du profileur, les drapeaux du compilateur, le format des informations de débogage, les primitives de synchronisation, la détection des fonctionnalités CPU, et si le goulot d'étranglement est le code hôte CPU ou le travail sur périphérique CUDA.
Étape 0 — Router la plateforme
Si l'utilisateur mentionne WSL, Linux, CUDA, NVIDIA, GPU, Nsight, une incohérence
pilote/boîte à outils, des conteneurs, ou si la plateforme n'est pas claire, lisez
d'abord references/platform-routing.md.
Chargez ensuite la référence spécifique à la plateforme :
| Plateforme / symptôme | Lire |
|---|---|
| Performances CPU Windows natif C/C++ | PORTING-NOTES.md |
| Performances CPU WSL Linux | references/wsl-linux.md, puis references/linux-native.md |
| Performances CPU Linux natif | references/linux-native.md |
| Configuration CUDA/NVIDIA ou performances GPU | references/cuda.md |
Utilisez scripts/collect-perf-env.ps1 sur Windows et
scripts/collect-perf-env.sh dans WSL/Linux natif lorsque l'environnement est
le problème ou que l'utilisateur n'a pas fourni suffisamment de contexte sur la
chaîne d'outils/le profileur.
Comment utiliser ce skill
Étape 1 — Charger le bon fichier pour votre contexte
| Contexte | Lire ce fichier |
|---|---|
| Vous avez une sortie de profilage (VTune, AMD uProf, ETW/WPA, perf, flamegraph, résumé Nsight, etc.) | triggers/from-profile.md |
| Vous lisez du code source existant sans aucune donnée de profilage | triggers/from-source.md |
| Vous écrivez du nouveau code C/C++ ou SIMD sensible aux performances | guidelines/new-code.md |
Les fichiers déclencheurs couvrent tous les mêmes motifs ; ils sont séparés pour que vous
ne chargiez que ce qui est pertinent. guidelines/new-code.md est une liste de contrôle
au moment de l'écriture — chargez-le à la place d'un fichier déclencheur lorsque vous
générez du nouveau code, pas lors d'une révision.
Étape 2 — Identifier le motif correspondant
Chaque fichier déclencheur contient un tableau compact et des descriptions brèves — assez pour décider si le code ou le profil correspond à un motif connu.
Étape 3 — Lire le fichier détaillé du motif
Lorsqu'un motif correspond, lisez le fichier correspondant dans patterns/. Ne
tentez pas la correction de mémoire.
Étape 4 — Appliquer la correction et vérifier
Suivez les instructions pas à pas et la méthode de vérification dans le fichier motif, en utilisant les mécanismes de la plateforme chargés à l'étape 0.
Plusieurs motifs peuvent s'appliquer simultanément. Vérifiez toutes les correspondances plausibles avant d'en choisir une.
Modules de bibliothèque réutilisables
Ces guides d'implémentation autonomes sont disponibles pour tout agent travaillant dans ce skill, pas seulement lors du suivi d'un motif spécifique. Chargez le fichier pertinent directement si la capacité est nécessaire.
| Module | Ce qu'il fournit |
|---|---|
library/cpu-dispatch.md | Détection des fonctionnalités CPU au runtime et sélection de variantes sous Windows. Dispatch manuel par pointeur de fonction uniquement — target_clones n'est pas disponible sur la cible PE/COFF (pas d'IFUNC). Couvre __builtin_cpu_supports, le chemin explicite __cpuid/_xgetbv, et __attribute__((target(...))) par variante. Neutre vis-à-vis du fabricant (Intel + AMD). À utiliser lorsqu'une fonction a plusieurs implémentations de niveaux de performance qui doivent être connectées au runtime. |
patterns/simd-upconversion-impl.md | Algorithme zip complet pas à pas pour doubler la largeur des registres vectoriels en intrinsèques (SSE→AVX2 ou AVX2→AVX-512) ; modèle d'accumulateur AVX-512 ; liste de contrôle post-transformation (garde CPUID, vzeroupper, attributs de cible). |
patterns/fast-crc32c-impl.md | Bibliothèque CRC32C prête à l'emploi : fusion AVX-512 VPCLMULQDQ, multi-accumulateur SSE4.2 + PCLMULQDQ, repli en C simple. Dispatch CPU au runtime inclus. À utiliser chaque fois qu'un nouveau code CRC32C est nécessaire ou qu'une implémentation existante est le goulot d'étranglement. |
references/platform-routing.md | Router les requêtes Windows / WSL / Linux natif / CUDA avant d'appliquer un motif. |
references/cuda.md | Configuration CUDA et triage des performances : visibilité pilote/boîte à outils, Nsight Systems vs Nsight Compute, limites GPU WSL. |
Intégration avec d'autres skills
Les skills de collecte de données/profilage peuvent invoquer ce skill après avoir identifié un motif connu. Ce skill fonctionne également de manière autonome à partir du code source, d'extraits de profileur ou de la sortie de sondes d'environnement.
Statut du skill
Porté et révisé pour Windows natif C/C++, puis étendu avec des notes de routage
pour WSL Linux, Linux natif et les environnements CUDA/NVIDIA. Les fichiers
suivants sont présents : ce SKILL.md, PORTING-NOTES.md,
triggers/from-source.md, triggers/from-profile.md, guidelines/new-code.md,
design.md, library/cpu-dispatch.md, les sources de la bibliothèque CRC32C, les
références de plateforme, les tests de performance et tous les fichiers de motifs :
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 conserve intentionnellement des entrées de DLL
tierces non vérifiées dans un tableau TODO ; ne les promouvez pas en recommandations
sans vérification de la source primaire et mesure sous Windows.