Skill de patrones de rendimiento
Un catálogo creciente de patrones de código conocidos que causan problemas de rendimiento, con señales de detección y guías de resolución para cada uno. El catálogo central de patrones se enfoca en código CPU x86, con enrutamiento de plataforma para Windows, WSL Linux, Linux nativo y entornos CUDA/NVIDIA.
El conocimiento de optimización es portable cuando el hardware es el mismo. Lo que cambia por plataforma son los aspectos mecánicos: vocabulario del profiler, flags del compilador, formato de información de depuración, primitivas de sincronización, detección de características CPU, y si el cuello de botella es código de CPU host o trabajo de dispositivo CUDA.
Paso 0 — Enrutar la plataforma
Si el usuario menciona WSL, Linux, CUDA, NVIDIA, GPU, Nsight, falta de coincidencia de
driver/toolkit, contenedores, o la plataforma no está clara, lea
references/platform-routing.md primero.
Luego cargue la referencia específica de la plataforma:
| Plataforma / síntoma | Leer |
|---|---|
| Rendimiento CPU nativo Windows C/C++ | PORTING-NOTES.md |
| Rendimiento CPU Linux WSL | references/wsl-linux.md, luego references/linux-native.md |
| Rendimiento CPU Linux nativo | references/linux-native.md |
| Configuración CUDA/NVIDIA o rendimiento GPU | references/cuda.md |
Use scripts/collect-perf-env.ps1 en Windows y
scripts/collect-perf-env.sh dentro de WSL/Linux nativo cuando el entorno sea
el problema o el usuario no haya proporcionado suficiente contexto del toolchain/profiler.
Cómo usar este skill
Paso 1 — Cargue el archivo correcto para su contexto
| Contexto | Leer este archivo |
|---|---|
| Tiene salida de perfil (VTune, AMD uProf, ETW/WPA, perf, flamegraph, resumen de Nsight, etc.) | triggers/from-profile.md |
| Está leyendo código fuente existente y aún no tiene datos de perfil | triggers/from-source.md |
| Está escribiendo código nuevo C/C++ o SIMD sensible al rendimiento | guidelines/new-code.md |
Los archivos disparadores cubren todos los mismos patrones; están separados para que solo cargue
lo relevante. guidelines/new-code.md es una lista de verificación para escritura —
cárguelo en lugar de un archivo disparador al generar código nuevo, no al revisarlo.
Paso 2 — Identifique el patrón coincidente
Cada archivo disparador contiene una tabla compacta y descripciones breves — suficiente para decidir si el código o el perfil coincide con un patrón conocido.
Paso 3 — Lea el archivo de detalle del patrón
Cuando un patrón coincida, lea el archivo correspondiente de patterns/. No
intente la corrección de memoria.
Paso 4 — Aplique la corrección y verifique
Siga las instrucciones paso a paso y el método de verificación en el archivo del patrón, usando los aspectos mecánicos de la plataforma desde el archivo de enrutamiento cargado en el Paso 0.
Varios patrones pueden aplicarse simultáneamente. Verifique todas las coincidencias plausibles antes de elegir una.
Módulos de biblioteca reutilizables
Estas guías de implementación independientes están disponibles para cualquier agente que trabaje en este skill, no solo cuando se sigue un patrón específico. Cargue el archivo relevante directamente si la capacidad es necesaria.
| Módulo | Qué proporciona |
|---|---|
library/cpu-dispatch.md | Detección de características CPU en tiempo de ejecución y selección de variantes en Windows. Solo despacho manual con punteros a función — target_clones no está disponible en el destino PE/COFF (sin IFUNC). Cubre __builtin_cpu_supports, la ruta explícita __cpuid/_xgetbv, y __attribute__((target(...))) por variante. Neutral respecto al proveedor (Intel + AMD). Úselo siempre que una función tenga múltiples implementaciones de diferentes niveles de rendimiento que deban conectarse en tiempo de ejecución. |
patterns/simd-upconversion-impl.md | Algoritmo de cremallera completo paso a paso para duplicar el ancho del registro vectorial en intrínsecos (SSE→AVX2 o AVX2→AVX-512); plantilla de acumulador AVX-512; lista de verificación posterior a la transformación (guardas CPUID, vzeroupper, atributos target). |
patterns/fast-crc32c-impl.md | Biblioteca CRC32C lista para usar: fusión AVX-512 VPCLMULQDQ, multi-acumulador SSE4.2 + PCLMULQDQ, fallback en C puro. Incluye envoltorio de despacho CPU en tiempo de ejecución. Úselo siempre que se necesite código CRC32C nuevo o una implementación existente sea el cuello de botella. |
references/platform-routing.md | Enruta solicitudes de Windows / WSL / Linux nativo / CUDA antes de aplicar un patrón. |
references/cuda.md | Configuración CUDA y triaje de rendimiento: visibilidad de driver/toolkit, Nsight Systems vs Nsight Compute, límites de GPU WSL. |
Integración entre skills
Las habilidades de recolección de datos/perfiles pueden invocar este skill después de identificar un patrón conocido. Este skill también funciona de forma independiente a partir de código fuente, fragmentos de perfil o resultados de sondas de entorno.
Estado del skill
Migrado y revisado para Windows nativo C/C++, luego extendido con notas de enrutamiento
para WSL Linux, Linux nativo y entornos CUDA/NVIDIA. Los siguientes archivos
centrales están presentes: este SKILL.md, PORTING-NOTES.md,
triggers/from-source.md, triggers/from-profile.md, guidelines/new-code.md,
design.md, library/cpu-dispatch.md, fuentes de la biblioteca CRC32C, referencias
de plataforma, pruebas de benchmark y todos los archivos de patrones:
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 mantiene intencionalmente entradas de DLL de terceros no verificadas
en una tabla TODO; no promueva esas a recomendaciones sin verificación de fuente primaria
y medición en Windows.