chantier dense-HMX #4: 0x2e décodé = AEE_ECONNRESET (reset watchdog CDSP), pas une corruption de valeurs

Connaissance retrouvée briques archivées: 0x2e = DSP-side fault/timeout, le -inf host = conséquence (buffer non fini) -> explique le non-déterminisme. Hypothèses 'valeurs' = mauvaise catégorie. Meilleure hypothèse = accès mémoire DSP invalide chemin HMX k=4096. Log-to-host-buffer prouvé mort (briques: cache non flushé post-crash). Reprise = device rooté seul.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Richard Loyer 2026-05-27 19:20:28 +02:00
parent 97180b29a6
commit 9af47bf388
1 changed files with 20 additions and 0 deletions

View File

@ -77,6 +77,26 @@ le inf non-déterministe vient d'**en amont** (FA, KV cache, ou un autre op d
des sondes CPU-side. Récap des hypothèses éliminées : magnitude, NaN/inf-input(1 run), shape-pure (synthétique),
FA→CPU, uninit-VTCM-matmul. Reste : source non-déterministe amont du inf (instrumentation DSP requise).
## Avancement #4 — 0x2e DÉCODÉ : c'est un reset CDSP, pas une corruption de données (RECADRE)
Connaissance retrouvée dans les briques archivées (`to_delete/qwen35-lab/docs/25_mega_kernel_htp.md`,
`to_delete/briques_qwen35/skel/qwen35-forward-ops.c:777`) :
- **`0x0000002e` = `AEE_ECONNRESET`** : le **watchdog du sous-système CDSP reset la connexion FastRPC**.
Côté DSP, l'op a **fauté** (accès mémoire invalide) ou **dépassé son budget temps** ; le host ne voit que
la connexion coupée. **Ce n'est PAS une erreur de valeurs.** (Caveat : briques = leur propre skel mega-kernel,
pas le HTP officiel ; la sémantique du code transfère, la cause précise des briques non.)
- **Recadrage** : mes hypothèses overflow/NaN/uninit cherchaient une corruption *numérique* → mauvaise catégorie.
Le `inf`/94%-zéros capturé host-side = **conséquence** (host lit un buffer que le DSP n'a pas fini d'écrire),
pas la cause → **explique le non-déterminisme** observé.
- **Meilleure hypothèse mécaniste** : le chemin HMX de l'o_proj (k=4096, post-FA) déclenche un **accès mémoire DSP
invalide** (DMA/cache op sur buffer mal mappé/aliasé propre à ce k) → fault CDSP → reset → 0x2e. Cohérent avec
HMX-only, k=4096-only, post-FA, non-det host, et le synthétique isolé qui ne crashe pas (état de buffers différent).
- **Piste log-to-host-buffer = quasi-morte** : les briques l'ont déjà tentée (progress tracking 16-byte header) →
après le crash le cache DSP n'est pas flushé, le host lit `0xffffffff`. Le contournement que j'envisageais échoue.
- Survie au lieu de fix : `GGML_HEXAGON_ABORT_ON_DSP_ERR=0` (flush non-fatal) existe côté backend — survit au
reset mais ne corrige pas la sortie (garbage). Inutile pour produire du correct.
**device rooté (capture FARF DSP-side) = seule voie réaliste**, désormais étayé par l'échec prouvé du log-to-host.
## Limite atteinte (honnête)
Le root cause est un **fault HMX non-déterministe** (mémoire non-init probable) dans la région o_proj/FA à n>32,
qui ne se reproduit pas en isolation synthétique. Le **pinner exactement demande de l'instrumentation côté DSP**