@@ -101,12 +101,54 @@ points must flush NetReceiveBuffer.
101101| ** Th1** | OpenACC detect over slots (device ` vec_v ` , atomic hit buffer) | ** Done** |
102102| ** Th2** | Skip full ` vec_v ` host pull when device detect handles SoA PreSyns (lazy pull for host/WATCH) | ** Done** |
103103| ** Th3** | Re-qualify ringtest 0.025/1/1.025/100 after Th0–Th2; traffic notes | ** Done** (2026-07-25) |
104- | ** Th4** | Traub-scale threshold load | Pending |
104+ | ** Th4** | Traub-scale threshold load | ** In progress ** — NMODL Traub build/load on GPU install green; Gate B/C next |
105105
106106Today: Th1 device ` pscheck ` + Th2 (no forced host voltage sync before detect) +
107107Th3 green long gate. Host still pulls flags/hit indices then
108108` deliver_threshold_spike ` .
109109
110+ ### Resume: Traub / Th4 (2026-07-25+)
111+
112+ NMODL ** CPU** Traub M0–M2 is green in ` ~/neuron/nrnnmodl `
113+ (` local/nmodl-cpu-traub ` ; see ` GROK-NMODL-CPU.md ` ). Do not re-do M0–M2 there.
114+
115+ ** #3826 tip absorbed** via cherry-pick (full rebase of merge-heavy GPU history
116+ conflicted on unrelated commits):
117+
118+ | Cherry-pick | Content |
119+ | -------------| ---------|
120+ | ` 3b273d4e3 ` (from ` dcdbf97fe ` ) | Weight SoA by index (drop reverse NetCon map) — Traub hang fix |
121+ | ` c267a0788 ` (from ` a49fbad57 ` ) | ` nrnivmodl ` defaults for ` NMODL_PYLIB ` / ` NMODLHOME ` |
122+
123+ ** Progress after absorb:**
124+
125+ | Step | Status |
126+ | ------| --------|
127+ | Rebuild + ringtest 688 @ 100 | ** Green** (noise-level cellstate) |
128+ | NMODL Traub mechs on this install | ** Green** — see recipe below |
129+ | CPU Traub smoke (` enable_gpu=0 ` ) | ** Green** — load ok; t=0.025 run; t=100 → ** 4474** spikes exact |
130+ | Gate B/C / Th4 GPU | ** Next** |
131+
132+ #### Traub NMODL build on GPU install
133+
134+ ``` bash
135+ source ~ /neuron/bin/nrnenv nrngpu build-gpu
136+ mkdir -p /tmp/traub-nrngpu-nmodl && cd /tmp/traub-nrngpu-nmodl
137+ ln -sfn ~ /models/82894/mod/* .mod .
138+ # Default GPU nrnivmodl still uses nocmodl unless -nmodl is passed.
139+ nrnivmodl -nmodl " $( which nmodl) " .
140+ # special: /tmp/traub-nrngpu-nmodl/x86_64/special
141+ ```
142+
143+ ** Linkage fix (required for NMODL mechs on GPU installs):** public headers
144+ declared C++ ` hoc_register_net_send_buffering ` / ` …_receive_… ` , but GPU defs
145+ in ` neuron/gpu/net_*_buffer.cpp ` are ` extern "C" ` → runtime
146+ ` undefined symbol: _Z31hoc_register_net_send_bufferingi ` . Fixed by matching
147+ ` extern "C" ` in ` mech_api.h ` , ` nrniv_mf.h ` , and CPU stubs in ` init.cpp ` .
148+
149+ OpenACC/device mech codegen (` -nmodlflags ` ACC path) and Gate B/C still open.
150+ ` model_data.hpp ` install may still matter for ACC only. M3 stays deferred.
151+
110152---
111153
112154## Key paths
@@ -140,11 +182,11 @@ After ACC codegen changes to built-ins: `rm -f build-gpu/src/nrnoc/expsyn.cpp &&
140182```
141183Read GROK-GPU-NATIVE.md and AGENTS.md.
142184
143- Stages 2–3c + threshold Th0–Th3 done; long gate green: 688 spikes @ tstop=100,
144- threshold dV=0, noise-level cellstate diffs only .
185+ Stages 2–3c + threshold Th0–Th3 done; long gate green: 688 spikes @ tstop=100.
186+ NMODL CPU Traub M0–M2 green in ~/neuron/nrnnmodl — do not re-do there .
145187
146- Next options: Traub incremental (Th4 threshold load when ready); optional pure
147- device NET_RECEIVE apply .
188+ #3826 tip absorbed; ringtest 688@100 green. NMODL Traub on GPU install builds
189+ and runs CPU (4474 spikes @ 100). Next: Gate B/C / Th4 GPU .
148190
149191Do not reintroduce NetCon::weight_ heap or host vec_rhs voltage hot path.
150192source ~/neuron/bin/nrnenv nrngpu build-gpu before GPU runs.
0 commit comments