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

1.3 KiB

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.