flybrain/infra/docs/lif-cuda-spike.md
acamilo 660c3cf00d
Some checks failed
ci / node 22 (test + typecheck) (push) Has been cancelled
ci / rust stable (cargo test --workspace --release) (push) Has been cancelled
ci / infra/tests/lint.sh (push) Has been cancelled
ci / playwright apps/stage (allowed to fail) (push) Has been cancelled
flybrain v0.4.0: public tree (history retained privately)
2026-09-21 15:09:46 +00:00

21 lines
1.3 KiB
Markdown

# LIF-on-CUDA spike — method
> **The record lives in the operator's infra repo** (`services/flybrain/lif-cuda-spike.md`), verbatim and dated.
> This file keeps only the method and what it settled.
**Bit-exactness: PASS.** 10,000 ticks on `data/fafb-v783`, comparing membrane,
refractory, the spike list, the RNG, the clock, the rates and the whole plasticity state
after **every** tick: zero divergences. The existing golden suite also passes through the
GPU backend unchanged. `docs/design/gpu.md` section 6 said not to try this; section 6 is
wrong, and the moved record says why.
**Speed: not a win in absolute terms, a large win per CPU core.** The GPU tick reaches
roughly the same realtime factor as the CPU kernel at four whole Haswell cores, on **one**
host core — and hands the other three to the page and the encoder, which is the resource
the infra docs keep fighting over. That is the whole argument for the backend; the
per-box figures are in the moved record.
Method: run the same seeded configuration through both backends, comparing state after
every tick rather than at the end (a late divergence is invisible in an end-state diff);
then measure the tick in isolation and the backend's host-core cost under `pidstat`; then
restore a checkpoint taken on each backend onto the other.