From 7f310005ead873ed67528df88e7da6255962ed01 Mon Sep 17 00:00:00 2001 From: sergio Date: Thu, 16 Jul 2026 23:09:50 -0400 Subject: [PATCH] =?UTF-8?q?variantes-cpu=20T5=20MEDIDO:=20zstd=20cortado?= =?UTF-8?q?=20(dispatch=20runtime,=20v3/v4=3Druido=20con=20i7);=20zlib=20i?= =?UTF-8?q?nconcluso=20pero=20la=20respuesta=20es=20zlib-ng;=20la=20lista?= =?UTF-8?q?=20caliente=20se=20concentra=20en=20mesa/c=C3=B3decs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- docs/plan-variantes-cpu.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) 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.