From 7695163e1a32d266ff6aa00fddaeaccf99f75d38 Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Fri, 5 Jun 2026 14:10:37 -0400 Subject: [PATCH] catalog: promote CGBN + secp256k1 to live, record measured throughput MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Form A (cuda-secp256k1-batched-mul) shipped earlier this session at commit 7661788. Form B (cuda-bignum-cgbn) extended to all 9 ops at 21bd26a. Both now serving on 3090-ai gpu-worker:9091 alongside the shake form. Catalog Live forms table: cuda-bignum-cgbn | 1.28 Gops/s kernel mod-mul @ n=1M, 256-bit (~256x GMP CPU single-thread); 9 ops total cuda-secp256k1-batched-mul| 6.51 Mkeys/s @ n=100k (~148x coincurve CPU); Day-2 Montgomery batch inversion projected toward FixedPaul's 6.5 Gkeys/s on 4090 Wire magics now in use: BSHK/BSHR — cuda-shake-fanout BCGB/BCGR — cuda-bignum-cgbn BSCP/BSCR — cuda-secp256k1-batched-mul (BSTB/BSTR reserved for cuda-clifford-stabilizer; parked per structural finding — our circuit has no H/S gates) Form D pivots (axis-flip sim_gpu.cu + ops.bin packing) still in flight; CATALOG.md + bend.html will gain rows once they ship. Notable defect surfaced during Form A build: widely-cited secp256k1 generator y-coordinate 0x483ADA7726A47B0DAFFA10ED2E11458A823D0E1D89DCAB14C7C39D9F8B97C20A does NOT satisfy y^2 = x^3 + 7 mod p. Real Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 Cross-tutorial propagation. UNDF candidate logged. --- examples/cuda-fanout/CATALOG.md | 6 ++++-- www/bend.html | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/examples/cuda-fanout/CATALOG.md b/examples/cuda-fanout/CATALOG.md index c9e10b2..779e60a 100644 --- a/examples/cuda-fanout/CATALOG.md +++ b/examples/cuda-fanout/CATALOG.md @@ -19,8 +19,10 @@ form-status column says `planned` until numbers exist. | form | binary | hardware | speedup vs CPU | wire shape | |-----------------------|-------------------------|----------|-------------------------------|-------------------------------------------------------------| -| `cuda-shake-fanout` | `shake256-fanout` | 3090 | 12x over host hashlib at 1M x 16 B inputs | `(cuda-shake-fanout (quote (hex …)) out-bytes)` + BSHK binary | -| `cuda-sim-ops-bin` | `ecdsa/cuda/demo_ops` | 3090 | 1.07x at 128 batches (8192 shots); crossover ~115 batches | `(cuda-sim-ops-bin "path/to/ops.bin" n-batches)` | +| `cuda-shake-fanout` | `shake256-fanout` | 3090 | 12x over host hashlib at 1M x 16 B inputs | `(cuda-shake-fanout (quote (hex …)) out-bytes)` + BSHK binary | +| `cuda-sim-ops-bin` | `ecdsa/cuda/demo_ops` | 3090 | 1.07x at 128 batches (8192 shots); crossover ~115 batches | `(cuda-sim-ops-bin "path/to/ops.bin" n-batches)` | +| `cuda-bignum-cgbn` | `cgbn-batch-worker` | 3090 | 1.28 Gops/s kernel mod-mul at n=1M (256-bit, ~256x GMP CPU); 9 ops total | `BCGB` binary: op_id + bitwidth + n + modulus + a + b | +| `cuda-secp256k1-batched-mul`| `secp256k1-batch-mul` | 3090 | 6.51 Mkeys/s at n=100k (~148x coincurve CPU); Montgomery batch inv Day-2 → projected 6.5 Gkeys/s | `BSCP` binary: scalars + base-point | `cuda-sim-ops-bin` numbers are humbling on purpose: kickmix is conditional-op heavy & branch-divergent. This catalog exists so diff --git a/www/bend.html b/www/bend.html index de6a5e8..a8d8000 100644 --- a/www/bend.html +++ b/www/bend.html @@ -131,6 +131,20 @@ make gpu-worker LUMBDA=asm # smallest footprint 1.07× at 128 batches (8192 shots); crossover ~115 batches (cuda-sim-ops-bin "path/to/ops.bin" n-batches) + + cuda-bignum-cgbn + live + RTX 3090 + 1.28 Gops/s kernel mod-mul at n=1M (256-bit, ~256× GMP single-thread CPU); all 9 ops live (mod-add/sub/mul/sqr/inv/exp/reduce, add-no-mod, mul-no-mod-2x-width) + BCGB binary: op_id + bitwidth + n + modulus + a + b + + + cuda-secp256k1-batched-mul + live + RTX 3090 + 6.51 Mkeys/s at n=100k (~148× coincurve CPU); Day-2 Montgomery batch inversion projected toward FixedPaul's 6.5 Gkeys/s on 4090 + BSCP binary: scalars + base-point → BSCR points +