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

peder1981and 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 mainJul 6, 2026
1 check passed
Sign up for freeto 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

@peder1981