Skip to content

fix: verificação dos kernels L2-L5 + investigação de performance CPU#1

Merged
peder1981 merged 3 commits into
mainfrom
fix/l2-l5-verificacao-e-perf-cpu
Jul 6, 2026
Merged

fix: verificação dos kernels L2-L5 + investigação de performance CPU#1
peder1981 merged 3 commits into
mainfrom
fix/l2-l5-verificacao-e-perf-cpu

Conversation

@peder1981

Copy link
Copy Markdown
Owner

Verificação dos kernels L2–L5 (correções de bugs + afirmações falsas) e investigação de performance CPU do BitNet-2B-4T. Motor já é SOTA (I2_S AVX2); L2–L5 não aceleram o modelo pré-treinado; autotune do gemm-config não bate o default além do ruído. Achado prático: usar -t 4 (–t 8 colapsa). Detalhes em docs/relatorio-cpu-bitnet.md.

🤖 Generated with Claude Code

peder1981 and others added 3 commits July 2, 2026 22:16
…completa)

- fwht: remove normalização 1/n² de acdc_forward_f32 — convenção era
  inconsistente com acdc_forward_i8 (unnormalized per spec CLAUDE.md);
  blocos empilhados em acdc_gemv produziam saída ~n² fora de escala
- fwht: corrige comentário do bound de erro ACDC: "→ 0 as n→∞" era
  invertido; energia capturada ≈ 1/n → 0, erro relativo ≈ 1 - 1/n → 1
- tropical: corrige fórmula de escala em tropical_attn_scores:
  dividia por head_dim em vez de sqrtf(head_dim), tornando os pesos
  softmax incorretos (seleção Top-K não afetada, era escala monotônica)
- hrr: remove acumulação incorreta em hrr_cleanup_iter — modo residual
  somava entradas do codebook a cada iteração em vez de retornar a
  entrada convergida
- wht: corrige loop em unpack_i2s_block: col < 32 → col < QK_WHT/4,
  eliminando leitura além do bloco em ARM (QK=64, bloco=16 bytes)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…real

Verificação algébrica e de desempenho dos kernels da "álgebra esquecida":

- L2 (wht): corrige unpack_i2s_block (passo *32 -> QK_WHT/4) que escrevia
  fora dos limites no build escalar (QK_WHT=32). Remove narrativa falsa de
  Walsh-Hadamard (é máscara ternária, não WHT) e a alegação de "~5x mais
  rápido": medido ~3-6x MAIS LENTO que o maddubs do L1.
- L3 (fwht): corrige acdc_error que ainda aplicava 1/n² após o fix anterior
  em acdc_forward_f32, descasando de acdc_project por n² e reportando ~100%
  de erro até para W perfeitamente ACDC. Roteado pelo próprio kernel de
  inferência para nunca mais divergir.
- docs: mathematical-foundations.md alinhado à realidade medida (L2 lento,
  L3/L5 exigem re-treino, L4 com premissa quebrada, nada integrado ao
  llama.cpp). wht_benchmark.py marcado como medição NumPy, não do kernel C.
- novo: utils/l2_vs_maddubs_microbench.cpp mede os dois kernels reais nos
  mesmos dados, confirma igualdade bit-a-bit e a lentidão do L2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- baseline I2_S AVX2 medido; build já usa -march=native (sem ganho grátis)
- achado prático: usar -t 4 (núcleos físicos); -t 8 colapsa (~0.4 t/s)
- autotune do gemm-config: "vencedor" R8 era ruído térmico, refutado por
  A-B-A controlado (o baseline oscila mais que a diferença). Default mantido.
- evidências: stats/tune_quick.csv, stats/ab_verify.txt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@peder1981 peder1981 merged commit a8e942e into main Jul 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant