Files
zeekayandHanzo Dev b1e39595f7 bench(dex): GPU-native deterministic per-book matcher harnesses
Standalone microbenchmarks for the deterministic CLOB matcher (one thread per
book, sequential price-time priority, parity-checked vs OpenMP CPU) across all
three GPU makers: CUDA, HIP, Metal.

Optimization: order-major SoA layout coalesces warp reads (adjacent books read
contiguous words instead of DEPTH-strided). Pure memory-access change; identical
deterministic fills (parity MATCH at every N).

Measured, tuned per backend (taker orders/sec):
- AMD Radeon 8060S (HIP, SoA preload TPB=64): 12.76B  (1.94B baseline, 6.6x)
- NVIDIA GB10      (CUDA, SoA lowreg TPB=32):  9.13B  (1.54B baseline, 5.9x)
- Apple M4 Max     (Metal, AoS TPB=256):       5.60B  (SoA neutral on unified mem)
- Apple M1 Max     (Metal):                    2.80B

Findings: coalescing is a discrete/APU-memory win (neutral-to-negative on Apple
unified memory); NVIDIA is occupancy-bound (prefers lowreg/small blocks) while
AMD is bandwidth-rich (prefers register-resident preload) — opposite optima.

Includes dex_tune.cu (TPB x variant sweep) + per-backend build/tune scripts.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-01 23:59:20 -07:00

20 lines
1.0 KiB
Bash
Executable File

#!/bin/bash
# build_cuda.sh — build the deterministic per-book DEX matcher for NVIDIA (CUDA).
# Verified on spark (NVIDIA GB10 Grace-Blackwell, CUDA 13.0, arm64/sbsa).
# Usage: ./build_cuda.sh [N] (N = number of books/markets, default 4000000)
set -e
CUDA_ROOT=${CUDA_ROOT:-$(dirname "$(dirname "$(command -v nvcc)")")}
[ -x "$CUDA_ROOT/bin/nvcc" ] || CUDA_ROOT=/usr/local/cuda
NVCC=$CUDA_ROOT/bin/nvcc
# sbsa (arm64) vs x86_64 include/lib target dir
TGT=$(ls -d "$CUDA_ROOT"/targets/*/include 2>/dev/null | head -1)
INCF=""; LIBF=""
[ -n "$TGT" ] && INCF="-I$TGT" && LIBF="-L${TGT%/include}/lib"
here=$(cd "$(dirname "$0")" && pwd)
N=${1:-4000000}
echo "== nvcc $($NVCC --version | grep release) =="
$NVCC -O3 -arch=native $INCF $LIBF -Xcompiler -fopenmp -o /tmp/dex_books "$here/dex_books.cu"
$NVCC -O3 -arch=native $INCF $LIBF -Xcompiler -fopenmp -o /tmp/dex_books_opt "$here/dex_books_opt.cu"
echo "--- baseline (AoS) ---"; /tmp/dex_books "$N"
echo "--- optimized (coalesced SoA) ---"; /tmp/dex_books_opt "$N"