mirror of
https://github.com/luxfi/dex.git
synced 2026-09-24 00:26:31 +00:00
Replace one-cross-per-dispatch matching with a batch matcher that crosses many independent books in a single call. Orders for different books share no state and are matched concurrently on a bounded worker pool; orders for the same book stay strictly sequential so price-time priority / FIFO — the determinism invariant — is never reordered. Batches larger than a tile (BatchTileSize=65536 books) are split into sequential tiles so no single dispatch is unbounded (an unbounded multi-million-book dispatch once hung a GPU). The per-book cross reuses the existing MatchOrderCPU oracle (one matching primitive, batched — not a second copy), on the flat DEXOrder/DEXTrade ABI the GPU kernel and the shadow gate already use, so a GPU batch backend slots behind the same BatchMatcher interface: flatten a tile into one device buffer, one GPU block per book, dispatch once per tile. The CPU matcher is the byte-for-byte authority a GPU backend is compared against, exactly as MatchOrderCPU is the authority for MatchOrderGPU. Determinism contract, proved by batch_match_test.go against an independent one-at-a-time sequential reference: the fills, remaining, and post-cross book state are byte-identical to the per-order path for the same input ordering — regardless of worker scheduling or tile size. Race-clean under -race. CPU speedup on a match-bound block (2048 books x 128 depth x 8 sweeping takers): 11.8ms -> 4.5ms (2.6x) on 10 cores. Co-authored-by: Hanzo Dev <[email protected]>