From 9af47bf3889c63877b7224ba93d572d118174f7b Mon Sep 17 00:00:00 2001 From: Richard Loyer Date: Wed, 27 May 2026 19:20:28 +0200 Subject: [PATCH] =?UTF-8?q?chantier=20dense-HMX=20#4:=200x2e=20d=C3=A9cod?= =?UTF-8?q?=C3=A9=20=3D=20AEE=5FECONNRESET=20(reset=20watchdog=20CDSP),=20?= =?UTF-8?q?pas=20une=20corruption=20de=20valeurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- CHANTIER_HMX_DENSE.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANTIER_HMX_DENSE.md b/CHANTIER_HMX_DENSE.md index c887734..5e3340a 100644 --- a/CHANTIER_HMX_DENSE.md +++ b/CHANTIER_HMX_DENSE.md @@ -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**