variantes-cpu T5 MEDIDO: zstd cortado (dispatch runtime, v3/v4=ruido con i7); zlib inconcluso pero la respuesta es zlib-ng; la lista caliente se concentra en mesa/códecs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +16 −3
- docs/plan-variantes-cpu.md +16 −3
diff --git a/docs/plan-variantes-cpu.md b/docs/plan-variantes-cpu.md
index 0de59a7d..3665477b 100644
--- a/docs/plan-variantes-cpu.md
+++ b/docs/plan-variantes-cpu.md
@@ -59,9 +59,22 @@ puñado de libs con kernels vectorizables. Lista caliente inicial (todas ya en e
| códecs (ffmpeg-clase, cuando entren) | el caso clásico AVX2 |
| `pixman`, `cairo` | raster 2D — **frontera GUI: sólo en worker** (gotcha zig-skew) |
-- **T5 — piloto medido**: v3 de `zlib` + `zstd`, benchmark antes/después con carga real de
- hammer (pack/hydrate de N artefactos). Si la ganancia no es medible ahí, la lista se corta
- temprano y barato.
+- **T5 — piloto medido (2026-07-17, laptop TigerLake, clang 3 variantes base/v3/v4,
+ corpus 200MB mixto fuente+binarios):**
+ - **zstd: v3/v4 NO pagan — CORTADO de la lista.** Bench interno (`-b3 -i7`, estable):
+ base 144.2 vs v4 146.5 MB/s comprimiendo, 702 vs 692 descomprimiendo = ruido. Causa
+ conocida: zstd ya hace dispatch BMI2/AVX2 en **runtime** ⇒ el `-march` del build casi no
+ toca los kernels calientes. (Un +24% aparente de v4 en la 1ª tanda desapareció con i7:
+ era calentamiento — lección para T6: sólo benchs con control de varianza.)
+ - **zlib (madler): INCONCLUSO en laptop con carga** (el mismo binario base osciló 112–157
+ MB/s entre tandas). Pero la pregunta estaba mal hecha: la respuesta buena no es una
+ variante v3 de zlib sino **zlib-ng** (fork con SIMD y dispatch en runtime, drop-in ABI;
+ Fedora 40 ya lo adoptó como zlib del sistema) ⇒ un solo artefacto, cero maquinaria de
+ variantes. Candidato a receta; medir zlib-ng vs zlib en máquina quieta cuando toque.
+ - **Consecuencia estructural**: los compresores modernos ya resuelven esto con dispatch
+ interno ⇒ la lista caliente de variantes se concentra donde NO hay dispatch: **mesa**
+ (llvmpipe/ACO compilan según -march) y códecs sin runtime-detect. El mecanismo T1–T4
+ sigue válido pero su primer cliente real es mesa, no la dupla zlib/zstd.
- **T6 — regla de admisión**: una lib entra a la lista caliente con benchmark que lo
justifique, no por vibras. La lista vive en el repo junto a los números.