Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions docs/BUILDS.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,28 @@ backend arm's derived baseline is 1.469 (§2, and the value `scripts/gpu-benchma
MEASURED default-constants straggler is **1.438** (§1). The regression is real on any of the three —
they are quoted here so a reader is not left reconciling two numbers for one claim. The likely cause is rescaling Ghost's Schnorr constant by the old
13.77x ECDSA ratio, when the hint removes decompression from *both* curves — taproot key-path spends
call `lift_x` too — so that ratio should have narrowed. **Ghost needs its own calibration; it does
not have one.**
call `lift_x` too — so that ratio should have narrowed.

✅ **Ghost DOES now have its own calibration — measured 2026-09-05, two L40S, real GPU proving on
block 962,000.** The predicted narrowing is confirmed: the fitted Schnorr:ECDSA ratio is **1.97x**,
not the old 13.77x.

```
HAZYNC_COST_EC_OP=85636 HAZYNC_COST_SCHNORR_OP=168542
HAZYNC_COST_INPUT_BYTE=2 HAZYNC_COST_INPUT_BASE=53162
```

| arm | straggler | max | mean |
|---|---|---|---|
| shipped defaults | 1.462x | 149 s | 102 s |
| Ghost refit | **1.189x** | 124 s | 104 s |

⚠ These are GHOST's constants and they are NOT Core's (§2). Neither set transfers: Core's refit
moves Ghost 1.407 → 1.884, about a card. Each channel carries its own fit, and a build that takes
the wrong one is worse off than one that takes none.

⚠ The card arithmetic was not re-derived — read this as "the ≤1.35 straggler target of §4.2 is
met", not as a card count.

✅ **#139 and the field backend are orthogonal and stack**: 10.676x → 11.467x, +7.4%. They accelerate
different things — #139 replaces `secp256k1_ecmult`; the field backend replaces the representation
Expand Down
42 changes: 42 additions & 0 deletions docs/GHOST_NEXT_BUILD.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,48 @@ The packer balances its own model perfectly; that is what makes a wrong model in
and block 741000 carries **2 Schnorr verifies out of 723** — so it cannot inform the curve split at
all, and the curve split is the dimension Ghost most needs right.

## ✅ MEASURED ON HARDWARE 2026-09-05 — the refit is worth 1.462x → 1.189x

Two L40S, block 962,000, 16 chunks, **real GPU proving**. Same guest, same block, one box per arm,
differing only in the four `HAZYNC_COST_*` values:

| arm | straggler | max | mean |
|---|---|---|---|
| shipped defaults | **1.462x** | 149 s | 102 s |
| refit | **1.189x** | 124 s | 104 s |

That clears the ≤1.35 threshold §4.2 of `BUILDS.md` states for the fourth card. ⚠ I have not
re-derived the card arithmetic itself, so read this as "the straggler target is met", not as a
card count.

Refit constants, fitted on block 965,500 (7.7% Schnorr), intercept forced to zero:

```
HAZYNC_COST_EC_OP=85636 HAZYNC_COST_SCHNORR_OP=168542
HAZYNC_COST_INPUT_BYTE=2 HAZYNC_COST_INPUT_BASE=53162 Schnorr:ECDSA = 1.97x
```

### ⛔ How this nearly came out backwards

The run first measured **1.567x — WORSE than doing nothing** — and that was reported. It was one
chunk. Across 32 chunk timings on two boxes every measurement sits at **2.4–3.0 s/segment**; hz-b
chunk 1 came in at **4.89 s/segment** (171 s for 35 segments). Re-run twice: **94 s, 94 s, 2.69
s/segment** both times. The 171 s never reproduced.

Three checks were needed to get there, and two of them refuted a hypothesis rather than confirming it:

1. **The segment straggler said the opposite** — 57 → 49 max segments, i.e. the refit was *better*
by the machine-independent metric. That is what said the wall-clock number was wrong.
2. **"The boxes differ in speed"** — plausible, and *false as an explanation*: an identical
33-segment chunk runs 87 s on hz-a and 90 s on hz-b, only 3.4% apart, **and a straggler is a
ratio, so box speed cancels out of it entirely.**
3. **Wall time is proportional to segments** — 2.4–3.0 s/seg across 31 of 32 samples — which
isolated the 32nd as a transient rather than a property of the partition.

⇒ A single un-replicated chunk timing was enough to invert the conclusion. Re-run an outlier before
believing it, and prefer the quantised metric (segments) over the continuous one (cycles): proving
bills in whole segments.

## The work, in order

1. **Profile the Ghost arm on a taproot-bearing block.** `HAZYNC_PROFILE_EXEC=1`, 16 chunks, execute
Expand Down
Loading