Record

The specialist edge review

A document of the record, rendered on this site from the repository at build; a line the site's rules refuse is marked, not served.

12 October 2026. A team seat, independent of the relation's owner, an in-house adversarial review of the Strata and window rounds, the floor lanes and a team seat that produced the band on the record. Written against main at 98b5a317 (the inputs listed in section 10 were read from that revision; nothing was asked of the team seats that produced the claims). Earliest draft; the computation named in section 9 has not run on a box.

Grades used on every number: MEASURED (a number read back from a card, a box or a shipped machine, its source named), DERIVED (arithmetic on measured numbers), ESTIMATED (an engineering estimate from published class figures, with its band), ASSUMED (a choice this review makes and states). No number in this document is served; it is a review for the board and the record.

0. The verdict in six lines

  1. The frozen relation (version 8 revision 2c at the window gate point, features 4128, keyed twin 5152 at K 2) forces per hash: 64 dependent random 128-byte reads from a 2 GiB dataset and about 81,000 primitive 32-bit operations (DERIVED, section 2). Nothing in it forces an instruction stream: every data-dependent choice in the programme is a 3-bit lane select or a 2-bit phase, which a fixed datapath realises as a multiplexer.
  2. A placed fixed-function engine (one round pipeline, contexts parked in a waiting station while their read is in flight, the dataset on a hybrid-bonded DRAM stack of the measured X16-Q class) spends 0.09 to 0.68 uJ per hash on the programme and 0.32 to 0.34 uJ on the memory (ESTIMATED on the engine, MEASURED class on the memory): 0.41 to 1.02 uJ per hash all in, central 0.57 (section 4).
  3. Against the GPU row of record (RTX 5090 at a 500 W cap, 12.206 uJ per hash, MEASURED telemetry) the edge is 12x to 30x, central 22x, on the stacked class; 6x to 22x, central 12x, on an external GDDR board; against the most efficient card on the record (RTX 4090 at its 380 W knee, 7.05 uJ at the wall) 7x to 17x stacked, central 12x, and 3.7x to 12x on a board (section 5). Every band edge is above the 5x line; the one edge under 5x (3.7x) needs the weakest engine, the least costly memory class and the strongest card at once.
  4. The record's band (2.53x central, 3.25x jointly feasible upper, 5.54x at the stacked extreme) rests on one modelling choice: the adversary is a SIMT-lane die that EXECUTES THE GPU'S INSTRUCTION STREAM, 610,352 thread-instructions per nonce (MEASURED on the card), at 5.5 to 7 pJ each. The relation's own arithmetic is 80 FP32 operations per lane-round out of 1,192 instructions the card issues (MEASURED, section 3); the other 93 percent is SIMT overhead (gathering programme words, bit-field decode, shuffles, selects, the tree computed in every lane, loop and control) that a wired engine does not pay. That is the structural shortcut the band missed (section 7).
  5. The programme lever, as the measured kernel realises it, moves the edge the wrong way: it raises the card's energy 4.3x over the walk (12.206 against 2.844 uJ, MEASURED) and raises the engine's by about 0.1 to 0.7 uJ, so the edge on the stacked class goes from about 9x on the walk alone to about 22x on the blended relation (DERIVED).
  6. What survives: the memory-class containment the record inherited from Ethash (a stacked specialist at 6 to 9x on the walk; shipped boards at 3 to 6x), the relation's exactness and admission rows, and the finding that the specialist's die is cheap and small (review 2 prices it). What does not survive is the sentence that the specialist's central edge is under 3x or that its upper edge is under 5x.

1. Scope and the rule I read by

The brief: take the frozen relation as the only input a specialist implementer has, derive the strongest specialist implementation that can be argued for at the level of a credible engineering estimate, compare it with the GPU row of record at the same work, state the edge as a ratio with its band and every assumption, and try to find a structural shortcut the band model missed. I read the relation earliest (SPEC-R0A-v0.md revision 0.19, sections 0.4, 0.8, 0.9, 4, 5), then the measured rows (cohort.json, the pod bundle's counters), then the record's model files as the thing under review (specialist-band-primary.json, the captured-mix files, version8-c-terms.json, simt-die.json, blend-machine.json, the ablation register's jointly-feasible-upper entries). I did not ask any seat for its verdict.

The frozen relation, as this review reads it: the launch document v8-d2048-s0-r64-k32-p256-w128-b2-x16-f5152-k2 (RELATION-STATE.md section 1, admitted; features bits 5, 10 and 12; KEYED_ROUNDS 2) and its unkeyed twin at features 4128, under which the shares and the open-seat blocks hash and under which every cohort row of record is measured (cohort.json: "the gate point (2, 16) f4128"). The keyed rounds are the sealer's alone (two keyed BLAKE3 compressions per attempt on the seal lane, RELATION-STATE.md 0.9.1: "the network's hashing carries no keyed overhead"), so the specialist's work per hash is the twin's; section 2.4 prices the keyed form for completeness.

2. The relation as a specialist implementer reads it

2.1 What one hash forces (the twin, features 4128; DERIVED from the text)

StepPer roundPer hash (64 rounds)Data-dependent choiceWired or stored on an engine
item read (4.4, 5.1)one 128-byte item at a random index of 2 GiB; the index depends on the previous round's whole output64 reads, 8 KiBthe addressthe dataset in DRAM; the index arithmetic one mask
absorb (0.4 step 1)32 adds, word j into register R[j mod 8][(j div 8)]2,048nonewires and 32 adders
block schedule (0.8, revision 2c form (b))B x K = 32 descriptors, each on all 8 lanes: 256 lane-descriptors; each lane-descriptor: two 8-way lane selects (shift1 = p & 7, shift = (p >> 4) & 7), three constant masks, one binary32 operation pair (two roundings), one XOR, one register write2,048 descriptors, 16,384 lane-descriptors, 32,768 FP32 roundingsthe two lane selects per descriptor (6 bits) and the block phase (2 bits per block, from the block's earliest programme word); the source slots are fixed (d + 1, d + 2), the destination is the slot, the opcode is (d + phase) & 3, the rotate is dropped under bit 5, the masks are constantstwo 8:1 32-bit multiplexers, a 4-way-selected FP unit (one multiplier active on a quarter of the slots by the 2b class rule, two adder-subtractors), an XOR; the programme word's fields are wires (the fields are fixed bit positions, 0.8: "aligned bit fields"); at B K = n = 32 the programme words are the item words themselves with no lap constant
reduction tree (0.4 step 2)31 nodes of (x ^ rotl(y, 13)) * MUL + (y >> 7) over the 32 item words, 5 levels deep1,984 nodesnone: h is a function of the item alone (S9, granted)31 multipliers, or one 32-bit digest per item stored beside it (S9)
the cell (4.4)8 lanes x 4 quads x 8 sequential operations (two multiplies each)2,048 quads, 16,384 operationsnone32 small sequential units
the exchange (4.5)8 lanes x 4 register updates with a fixed and a data-dependent partner (X[l][1] mod 7)2,048the partner q (3 bits per lane)an 8:1 select per lane
next address (0.4 step 5)idx = (R[g][0] ^ h) mod N_ITEMS64nonewires
finalisation (4.7)once per hash: BLAKE3 over 512 state bytes1noneone compression unit, 2 compressions
the seed and the lane fill (2, 4.1)once per hash: 2 compressions and a 512-byte XOF1nonea BLAKE3 unit

Primitive 32-bit operations per hash, counting a lane-descriptor as three (two selects and one FP pair), a tree node as five, a cell quad as eight, the exchange as six per lane: about 81,000 (DERIVED). State per nonce: 512 bytes of registers, the 512-byte block snapshot T (double-buffered inside the pipeline), the 128-byte item: about 1.2 KB.

2.2 What the relation binds, as the text itself states it

The text's own list of what cannot be shortened holds under this review: every item word enters the state (the absorb is a bijection in the item for a fixed state), the tree and the address (S1, S2); the item's bytes are keyed XOF output with no redundancy (S4, measured entropy 7.9999 bits per byte); nothing across rounds is precomputable because the next index depends on the whole round (S7); recomputing an item costs 256 cache reads and 8,192 FNV steps (S6); the programme's output depends on (item, state) and cannot be cached per item (0.8); the opcode class counts per block are fixed so no programme is cheaper than another (2b). I tried each of the shortcuts the brief names and section 7.2 says why each fails. None of this binds an engine to an INSTRUCTION STREAM, which is the point of this review: the relation fixes what is computed; it does not fix that a programmable lane computes it.

2.3 What the text expected the specialist to pay, in its own words

SPEC 0.8 (form (b)): "the GPU's cost per descriptor is two shuffles and one operation with no select; the specialist's is a crossbar per read"; and "the specialist's indexed-register shortcut is replaced by a crossbar it must build, which is the register-file term an in-house adversarial review found sets its edge". The crossbar of form (b) is eight-way within one nonce's octet (the overlap ruling, 0.8: "the crossbar form (b) forces is eight-way per read (the octet), not 32-way"). An eight-way 32-bit select is a three-level multiplexer tree, about 100 transistors per bit; its energy at a 7 nm class node is of the order of 0.05 to 0.15 pJ per select (ESTIMATED from the record's own mux term in blocks_engine.py, 0.004 to 0.015 pJ per bit per stage, times 32 bits times 3 stages). The record's engine charges 0.6 to 1.2 pJ for the two crossbar reads of a descriptor plus 1.25 to 1.95 pJ for a 128-entry register file plus 0.3 to 1.5 pJ of issue and decode PER INSTRUCTION, and then counts the GPU's instructions. Section 6 takes this apart term by term.

2.4 The keyed form (features 5152, K 2), for completeness

Two keyed BLAKE3 compressions per sealing attempt, the shares bound by the once-per-block proof pi (0.9.1). On a fixed-function BLAKE3 unit a compression is about 80 pJ (the record's own figure, REDTEAM-R0A.md 2.2, ESTIMATED), so the keyed form adds about 0.2 nJ per hash to the seal lane and nothing to the share lane. It does not move the edge. The split-execution and appliance questions of 0.9.2 are custody questions, outside this review.

3. The GPU row of record, and how the card spends its energy

3.1 The rows (cohort.json at main 98b5a317; MEASURED)

Card and boundaryRate (MH/s)In uJ per hashNote
RTX 5090, rented pod, 500 W cap, telemetry: THE ROW OF RECORD40.612.206495.4 W; m (walk over full) 0.233; 0.197 of the matched memory ceiling
the same card, walk only (features 4384, the block's output a constant)about 174 (DERIVED from 2.844 uJ at the cap)2.844the memory term of the relation on this card
the same card, programme only (bit 9, no fetch)about 4411.211the programme term alone costs the card nearly the whole relation
RTX 5090 Founders Edition, 575 W free clock, telemetry42.513.44screening
RTX 4090 at the 380 W knee, wall-differential46.37.05the most energy-efficient reading of any card at a wall; the record names it the candidate comparator
RX 9070 XT, wall-differential15.513.34AMD's card of record

The brief names the GPU row of record; this review reads the edge against it and, beside it, against the 4090 knee, because the record itself names that row the candidate comparator and a reader of the public text will do the same division.

3.2 Where the 12.2 uJ goes

Thread-instructions executed per nonce: 610,352 (640 x 10^9 predicated-on thread-instructions over the launch), that is 1,192 per lane per round. By class:

ClassShare of thread-instructionsPer lane-roundWhat the relation needs per lane-round
integer (ALU)55.9 percent667the cell 32, the absorb 4, the tree 20 (one eighth of 155 if shared, 155 if every lane computes it), the field decode 0 (wires on an engine)
inter-thread communication (shuffles)18.6 percent22164 lane selects (two per descriptor): on an engine, multiplexers
control11.2 percent1330
FP326.7 percent8064 roundings (32 descriptors x 2) plus the masks
bit manipulation5.9 percent70the three constant masks per descriptor: wires
memory, misc, fp16, uniform1.7 percent20the item load

So the relation's arithmetic (the FP32 operations the programme exists to force, plus the cell and the tree) is about 15 percent of what the card issues; the rest is the SIMT cost of expressing a data-chosen lane as a shuffle, a bit field as an extract, a phase as control, and the tree as eight redundant copies. The card's issue slots are 57 percent active (smsp__issue_active), warps active 39 percent, the chief stall reasons short scoreboard (29 percent, the shuffle and shared-memory latency) and fixed-latency wait (27 percent): the kernel is bound by its own dependent chains and shuffle latency, at a power cap it reaches whatever it does. A leaner kernel could cut the count; the card's energy per thread-instruction on this kernel is 20 pJ for the whole relation and 15 pJ attributed to the programme (DERIVED). The record's "13.7 pJ at the sheet rate" is the right order; the count is the problem, not the energy per instruction.

Per lane-descriptor the card spends 571 pJ (9,362 nJ of programme over 16,384 lane-descriptors, DERIVED). An FP32 multiply and add at a 7 nm class node cost about 1 to 2 pJ placed (section 4.2). The gap on the programme term is two orders of magnitude, and it is the whole story of this review.

4. The specialist design: a placed estimate

4.1 The machine

One compute die per 2 GiB dataset, the dataset on a hybrid-bonded DRAM stack (the X16-Q class, the record's stacked machine: a DRAM die bonded to a logic die, the row of record for Ethash's identical 64 x 128-byte random pattern), or, for the chip anyone can build, the same die beside commodity GDDR6 on a board (the Antminer E9 class). The compute die holds:

  • R round pipelines, each fully pipelined over contexts: one round of one nonce enters per cycle and leaves about 45 to 60 stages later. Stages, in order: absorb (1 stage); block 0 (16 slots x 8 lanes in parallel, each slot a multiplexer pair, the mask wiring, one FP unit: about 6 to 8 stages of FP latency); block 1 the same, reading block 0's output (the snapshot T of the text is the pipeline register between the two block stages); the tree (5 levels of a multiply node, about 15 stages; or one SRAM or DRAM-beside-the-item read of the precomputed digest, S9, if the builder prefers the memory to the 31 multipliers); the cell (4 quads per lane in parallel, 8 sequential operations with two multiplies, about 12 to 16 stages); the exchange and the next address (2 stages). The pipeline's registers carry the context's 512 bytes of lane state plus the item and the snapshot; no register file exists.
  • A waiting station: when a round leaves the pipeline its context (512 bytes of state and the next index) is written to a slot and its read is issued; when the item returns, the slot is read back into the pipeline's entry. Slots needed: the rate times the per-round latency. At the X16-Q class's random latency (the record's stacked-machine band 150 to 300 ns, ESTIMATED) plus about 40 ns of pipeline, a nonce takes 64 x (190 to 340) ns = 12 to 22 us; at 670 MH/s per stack (the record's central machine, MEASURED class) that is 8,000 to 15,000 contexts in flight, 5 to 10 MB. On a GDDR6 board the latency is 300 to 600 ns and the station 2 to 3x larger per MH/s. A station is an SRAM (the conventional form) or, for the strong band, banks of latches read through a multiplexer; either is a few mm2 at a 7 nm class node (N7 HD SRAM 24.8 Mbit per mm2, the record's sram_machine.json, DERIVED class).
  • The memory controller and PHY (the stacked class's bond interface, or a GDDR6 PHY on the board class), the BLAKE3 units for the seed, the lane fill and the finalisation (3 to 4 compressions per hash, one unit per several pipelines), the nonce scheduler, the result filter and the host interface.

Throughput: one pipeline at 1.0 GHz completes 10^9 rounds per second, 15.6 MH/s; a stack serving 670 MH/s needs 43 pipelines, a 2,000 MH/s board about 130. Area at N7 (ESTIMATED from synthesis-class cell figures: an FP32 add-subtract about 600 um2, an FP32 multiply about 1,500 um2, a 32-bit integer multiply about 1,000 um2, simple ALU cells 100 to 200 um2): a pipeline holds 2 x 128 FP multipliers (one per slot per block, a quarter active), 2 x 256 FP adder-subtractors, 31 + 64 integer multipliers, about 1,500 simple cells and its multiplexers: about 1.5 to 2.5 mm2; 43 pipelines 65 to 110 mm2, plus the station, the controller and the PHY: a compute die of 100 to 180 mm2 at N7, or 250 to 450 mm2 at 28 nm (the Ethash boards' node class). Feasible on every count; review 2 prices it.

4.2 Energy per round on the engine (ESTIMATED; bands [strong, central, weak]; nJ)

Datapath energies at a 7 nm class node, placed: from the published 45 nm energy-per-operation table (ISSCC 2014 keynote: FP32 add 0.9 pJ, FP32 multiply 3.7 pJ, 32-bit integer multiply 3.1 pJ, 32-bit add 0.1 pJ; REPORTED) scaled by 5 to 8x for the node and multiplied by 2 to 2.5 for pipeline registers, clock and local wiring (ASSUMED, the usual placed-over-datapath factor; the record's own datapath term, 1.5 to 4.0 pJ per instruction in version8-c-terms.json, is the same class of figure and is not disputed here).

TermStrongCentralWeakBasis
256 lane-descriptors: two 8:1 selects, masks, one FP pair (a quarter multiply-add, three quarters add-subtract pairs), XOR, pipeline write0.51 (2 pJ each)1.02 (4 pJ)2.05 (8 pJ)the FP pair 1.0 to 2.5 pJ placed, the selects 0.1 to 0.3, the write 0.3
the tree, 31 nodes with a multiply0.060.120.24or an S9 digest read, cheaper; the term is small either way
the cell, 32 quads x 8 operations with two multiplies0.120.240.48
absorb, exchange, address, the field wiring0.060.120.24
the context station: 512 bytes written and read per round0.200.802.50strong: latch banks and a multiplexer (about 0.02 to 0.04 pJ per bit moved); central: an N7 SRAM at about 0.1 pJ per bit with routing; weak: 0.3 pJ per bit over long wires; the one engine term that is not pure datapath and the one I would measure before the rest
item delivery from the controller to the pipeline, 1,024 bits over 2 to 5 mm0.100.200.40the record's wire band 0.03 to 0.08 pJ per bit-mm
per round1.052.505.91
per hash, 64 rounds67160378
whole-machine factor (clock trees, leakage, VRM and board, cooling, the controller's logic)x 1.3x 1.5x 1.8ASSUMED; the record's stacked machine applies 1.2 to 1.5 at the board
THE PROGRAMME AND ARITHMETIC TERM PER HASH, whole machine88 nJ240 nJ681 nJ

Beside it, the record's engine for the same work: 9,362 nJ divided by c, c 4.99 / 2.16 / 0.9: 1,876 / 4,334 / 10,402 nJ per hash (DERIVED from captured-mix). The two estimates differ by 5x at the record's stacked extreme and by 18x at the centrals. Section 6 says why.

4.3 The memory term per hash (the walk; the classes the record itself keeps apart)

ClassIn nJ per hash [strong, central, weak]Grade and source
hybrid-bonded stacked DRAM320 / 326 / 340MEASURED class: the Jasminer X16-Q wall row on Ethash's identical access pattern (the record's historical-frontier and stacked-machine files; founder-verified video, the independent reviewer's admitted interval)
the same, the record's model band292 / 366 / 476DERIVED: the card's walk 2,844 nJ over the record's stacked A band 9.74 / 7.78 / 5.98
external GDDR board480 / 800 / 1,250MEASURED class: the Jasminer X4 family 0.42 to 0.52 J per MH, the Antminer E9 0.75 to 0.86, the E9 Pro 0.54 to 0.60, the A11 Pro 1.18 to 1.32 (the band's primary rows, specialist-band-primary.json); the X4 is taken as the strong edge, the E9 as the central, the A11 Pro as the weak
HBM3E on a logic die through an interposer150 / 250 / 400ESTIMATED, no shipped miner; an activate per random 128-byte read dominates (about 1 to 2 nJ per access all in at 64 accesses); the record's capacity-machines reading puts the HBM specialist at 3.2 to 6.9x on the walk, consistent

The memory term does not change between the walk and the blended relation: the fetch pattern of version 8 is version 4's (0.8: "the fetch stream is version 4's walk"), and the AMD walk-only rows confirm the version 8 round without the block costs nothing over Strata W128 (TUNING-R0A.md, MEASURED on the 9060 XT).

4.4 The specialist's energy per hash, all in (DERIVED from 4.2 and 4.3)

ClassStrongCentralWeak
stacked DRAM, measured class4085661,021
stacked DRAM, the record's model band3806061,157
external GDDR board5681,0401,931
HBM3E (hypothesis)2384901,081

Throughput per watt at the central stacked point: 566 nJ per hash is 1.77 MH/s per watt, against the 5090 row's 0.082 and the 4090 knee's 0.142 (DERIVED). Per die: a stack at 670 MH/s draws about 380 W central (the X16-Q's measured share 219 W plus the engine's 160 W at 0.24 uJ), a figure the X16-Q's own 620 W machine at 1,850 MH/s brackets.

5. The edge

x = (the GPU row's uJ per hash) / (the specialist's uJ per hash), the specialist strong against the GPU row gives the attacker-favourable edge (the record's convention: upper = the strongest credible specialist).

GPU rowMemory classEdge [weak engine, central, strong engine]Central sentence
RTX 5090 pod, 12.206 uJ (the row of record)stacked, measured class12.0x / 21.6x / 30.0x"a stacked specialist at about 22x, between 12x and 30x"
stacked, the record's model band10.6x / 20.1x / 32.2x
external GDDR board6.3x / 11.7x / 21.5x"a board at about 12x, between 6x and 22x"
HBM3E (hypothesis)11.3x / 24.9x / 51.4xnot governing: no shipped case, the supply in review 2
RTX 4090 knee, 7.05 uJ (the record's candidate comparator)stacked, measured class6.9x / 12.4x / 17.3x"about 12x, between 7x and 17x"
external GDDR board3.7x / 6.8x / 12.4x"about 7x, between 3.7x and 12x"

Beside these, the record's own reading on the same GPU row: 2.53x central, 3.25x jointly feasible upper, 5.54x at the stacked extreme (captured-mix, DERIVED by the record); and the walk-alone edge on the stacked class, 2,844 over 326: 8.7x (DERIVED).

The ratio with its band, in one line each:

  • Condition 1's headline, this review: against the GPU row of record the specialist's energy edge is 22x central with a band of 12x to 30x on the stacked class (ESTIMATED on the engine, MEASURED class on the memory and the card), and 12x central, 6x to 22x, for the board any mining-ASIC vendor can build; against the most efficient card on the record the same machines read 12x (7x to 17x) and 7x (3.7x to 12x).
  • The record's sentence ("central 2.53x, upper 3.25x, under 3x and under 5x") does not survive this review. The sentence the record's own class ruling allowed for Strata ("substantially limits conventional external-memory ASIC advantage, but does not presently limit hybrid-bonded stacked-memory specialists below 5x") survives for the walk and, on this review, no longer holds its earliest clause for the blended relation: the board class reads 6x to 22x against the row of record.

6. Why the record's band reads 2.5x and this review reads 20x: the reconciliation

The record's engine (version8-c-terms.json, captured-mix, the ablation register's jointly-feasible-upper rows, cycle_util.py, upper_published_file.py) is defined as follows, in its own words: "c = (the GPU's energy per programme instruction at 70 percent of its native rate) / (the placed engine's energy per instruction)"; the placed engine's energy per instruction is the sum of a datapath term (1.5 to 4.0 pJ), a register-file term (0.8 to 2.5 pJ at 16 entries, 1.25 to 1.95 at the 128-entry depth eight interleaved contexts need), an issue-and-decode term (0.3 to 1.5 pJ: "a fixed per-nonce schedule read from an on-die programme store") and a clock-and-leakage share (0.5 to 2.0 pJ), over a utilisation (0.75 to 1.0) and a package factor; the engine's energy per hash is then the GPU's programme energy over c, which is the GPU's INSTRUCTION COUNT times the engine's energy per instruction (upper_published_file.py: e = engine(mix, ...), the GPU's Nsight mix). The combined edge is 1 / (m / A + (1 - m) / c) with m the memory share of the card's energy (0.202) and A the memory class's edge.

Three things in that construction are, on this review, wrong for the frozen relation, and one is right:

  1. THE COUNT. The engine is charged the GPU's 610,352 thread-instructions per nonce. The relation needs about 81,000 primitive operations per hash, and the heavy ones (the FP pairs) are 32,768 roundings. The card issues 7.6 instructions per primitive operation and 15 per FP operation (section 3.2) because a data-chosen lane is a shuffle, a bit field is an extract, a phase is a branch or a select, the programme words must be gathered across lanes, and the tree is computed in every lane. A wired engine pays none of these: the fields are wires, the lane choice is a multiplexer, the phase steers a 4-way FP unit, the tree is computed once, there is no loop. Correcting the count alone, at the record's own per-instruction engine energy (5.5 to 7 pJ), takes the engine's programme term from 3,400 to 4,300 nJ down to about 81,000 x 5.5 to 7 pJ = 450 to 570 nJ, and the combined edge on the stacked class to about 14x. This is the dominant correction and it does not depend on any energy figure of mine.
  2. THE REGISTER FILE. The text (0.8) and the record price the specialist's lane as a programmable lane with a 2R1W register file, deepened to 128 entries so that eight contexts can interleave to hide the fetch (the ablation register's jointly-feasible-upper entry, cycle_util.py's output: "the utilisation the schedule allows needs eight contexts interleaved per lane"). A fixed round pipeline has no register file: the lane state travels in pipeline registers, the block snapshot is the register between the two block stages, and contexts waiting on memory sit in a station that is written once and read once per round (0.2 to 2.5 nJ per round, section 4.2, the engine's largest term). The register-file term the text names as "the term an in-house adversarial review found sets its edge" is a property of the SIMT-lane die the record chose as adversary, not of the relation.
  3. THE CALIBRATION. c's band (1.3 to 4.0, "a GPU-shaped random program") was anchored on the Antminer X5 against a CPU on RandomX (REDTEAM-RANDOMX.md: "the specialist for a RandomX-class program is itself a CPU"). That anchor is right for RandomX, whose program space (about 30 instructions over 20 registers, a 2 MiB scratchpad, branches, double precision with program-set rounding modes, superscalar dependency shapes) defeats a fixed pipeline, and the same file says RXE1 "lacks the scratchpad, branches, FP and the superscalar shapes" and "as written buys the class nothing". Version 8 revision 2c has: fixed destination slots, fixed source slots, fixed opcode class counts per block, no scratchpad, no branch, no rotate under bit 5, no data-indexed register; its per-descriptor "programme" is 256 possibilities (8 x 8 x 4), all multiplexable. The late binding per nonce and per round (the item draws the fields) prevents COMPILING a programme; it does not prevent WIRING the datapath, because the datapath is the same for every programme and only its select lines change. The RandomX calibration was imported into a relation that is not in the RandomX class, and the record's own RandomX file says what the class needs.
  4. WHAT IS RIGHT: the memory side. The stacked class's A band (5.98 to 9.74 on the walk) and the external board's (2.36 to 5.77) rest on measured shipped machines, and this review uses them unchanged. The record's finding that the 40 nm Ethash incumbent die cannot run the programme (SUPPLY-CORNERS.md section 11, superseded by 12) is also right; the error is in what replaces it (a GPU-class SIMT die) rather than the fixed pipeline of section 4.

The independent reviewer's gate conditions as the record read them ("combined central at most 4x, c upper at most 5x") were met by construction of c, not by the relation. The condition the independent reviewer wrote for closure, "an independent placed-design review", was the right instrument: a placed design is where the count assumption breaks.

7. The structural shortcut found, and the ones that fail

7.1 Found: the wired descriptor (the headline)

Stated once, plainly: under form (b) with bit 5 the programme is not code. Each descriptor's effect on lane l is R[l][d] = bits(f) ^ T[l][d] where f is one of four fixed two-rounding binary32 expressions of mask(T[l][d]), mask(T[(l + s1) & 7][d + 1]) and mask(T[(l + s2) & 7][d + 2]), with s1, s2 (3 bits each) and the block's phase (2 bits) the only data. An engine realises descriptor (b, d) for all eight lanes as sixteen 8:1 multiplexers, the mask wiring, eight 4-way FP units and eight XORs, all in one pipeline stage group; the 32 descriptors of a round are two such stage groups in series; the whole round is one pipeline. The cost per lane-descriptor is one FP pair and two multiplexers, 2 to 8 pJ placed, against the card's 571 pJ (MEASURED on the card, ESTIMATED on the engine). The relation's whole-item rule, the address path and the trace identity are untouched: the engine computes exactly the text, exactly as the reference does, and its proofs verify. Nothing in the text, the window ruling ("no shortcut that removes programme execution from the address path"), the verify ruling (2b) or the overlap ruling excludes it, because it removes nothing from the address path; it executes the programme on wires.

Four lesser shortcuts sit beside it, each granted or cheap:

  • The tree once, not eight times: the engine computes h once per round (31 nodes) where the SIMT kernel computes it in every lane or shuffles it across them; or stores the 32-bit digest beside each item (S9, granted by the record for version 4 and still true of version 8, whose tree is version 4's over unkeyed leaves).
  • The programme words are the item words: at B K = 32 = n there is no lap constant and no second read; the engine's select lines are tapped from the item register.
  • The block snapshot is a pipeline register, not a double-buffered file: the text's T semantics ("a snapshot of every lane's register file at the block's entry") is the natural form of a pipelined datapath and costs nothing.
  • The station replaces the register file: contexts in flight are a capacity question (5 to 10 MB), not a port question; the engine runs at full utilisation with one context per stage, which the record's cycle_util.py found a programmable lane could reach only with eight contexts and a 128-entry file.

7.2 Tried and failed against the relation as frozen (each with why)

ShortcutResultWhy it fails
a shorter sufficient statistic of the item (read fewer than 128 bytes)failsthe absorb is a bijection in the item; every word reaches h, the registers and the next address (S1, S2 on the port, 32 of 32 words move the address)
compressing the dataset or the itemsfailskeyed XOF output; measured entropy 7.9999 bits per byte, zlib 1.0003 (S4); the only compression is the derivation itself
recomputing items instead of holding the dataset (a smaller memory)failsone item costs 256 random reads of a 32 MiB cache and 8,192 FNV steps plus a keyed hash (5.3): 50 to 140x a stacked read in energy and 256x in accesses; the 32 MiB cache resident on die buys nothing because every parent walk is 256 reads of it
partial residency (a fraction of the dataset in SRAM, the rest in DRAM)fails to matteruniform addresses (ME-01); a fraction f served from SRAM saves at most f of the memory term and costs SRAM at 31 Mbit per mm2 (N5 class): the full-SRAM die at 2 GiB is two reticle-class dies (sram_cost.json) and its edge is bounded by the same engine term; the stacked DRAM class is cheaper per hash than the SRAM die once the programme term is small, which is the record's own die-versus-board reading
precomputing the programme's output per itemfailsthe output is a function of (item, state) and the state is the nonce's history (0.8); only the DECODE is item-only, and on an engine the decode is wires with no energy to save
caching across rounds or noncesfailsthe next index is a function of the whole previous round (S7: cross-nonce reuse 0.015 percent of reads at 10,000 nonces in flight)
sharing state across pipelinesnothing to shareeach nonce's state is private; the only shared structure is the dataset, which every pipeline on a die already shares through the stack; sharing the station's slots across pipelines is a layout choice, not a saving
a time-memory trade on the walk (hold fewer bytes, work more)failsthe dataset is reached only by the parent walk (above); no intermediate structure is cheaper than the items
exploiting the keyed roundsnothingthe shares are unkeyed; the seal's two compressions are 0.2 nJ; the custody questions are 0.9.2's
exploiting the 2b class rule (fixed opcode counts)already usedthe fixed K / 4 multiplies per block are what lets a quarter of the FP units be multipliers; the rule is a cost reduction for the engine, which is its purpose on the GPU side too
exploiting the FP maskingnothing beyond the standardthe specials are unreachable by masking, so the engine's FP units need no exception logic; a standard round-to-nearest-even binary32 multiplier and adder are exact by definition, as on every vendor
HBM or 3D-stacked SRAM instead of bonded DRAMHBM reads 11x to 51x (hypothesis), unmeasured and supply-bound; stacked SRAM no better than the stacked DRAM rowthe memory term is already one twentieth of the card's; moving it further changes the edge's band, not its verdict; review 2 reads the supply
a near-memory reducer streaming the tree as words arrivegranted and smallthe tree is 2 to 4 percent of the engine's round energy either way

8. Assumptions, ranked by how far each moves the edge

RankAssumptionGradeIf wrong, the edge movesBy how much
1the specialist is a fixed round pipeline, not a programmable lane (section 7.1)DERIVED from the textif a reviewer shows the relation forces an instruction stream, the record's band returnsthe whole gap: 22x to 2.5x central
2the GPU row of record stays at 12.2 uJ (the kernel's 610k thread-instructions per nonce)MEASURED todaya kernel at half the instruction count and the same stall profile halves the card's energycentral 22x to about 11x stacked, 12x to 6x board; a kernel at the card's sheet rate on the programme (about 1.8 uJ of programme) would put the blended relation at about 4.6 uJ and the stacked edge at about 8x, the walk's own figure: the programme lever is at strongest neutral
3the context station's energy (0.2 to 2.5 nJ per round)ESTIMATEDthe engine's largest term; a placed station at 5 nJ per round puts the weak engine at about 1.2 uJ all inthe weak edges to 10x stacked and 5.5x board on the 5090 row
4the memory class and its row (the X16-Q at 326 nJ; the boards at 480 to 1,250)MEASURED classa stacked machine at the record's 208 nJ model edge raises the central to 27x; the A11 Pro's 1,250 nJ as the board's row gives the 6.3x floorthe band's edges, not its centre
5the FP pair placed at 1.0 to 2.5 pJ at a 7 nm class nodeESTIMATED from published 45 nm figures and scalingat 28 nm the datapath is about 3x dearer, the station similarthe central to about 17x stacked at 28 nm; the board class's capital falls (review 2)
6the whole-machine factor 1.3 to 1.8ASSUMEDa 2.5 factor at the weak endthe weak edges down about a third
7the 4090 knee as comparatorMEASUREDif the public text compares against the most efficient card, every edge above divides by 1.7312x central stacked, 7x board

The single most dangerous assumption in the RECORD's band is the count: that the engine executes the GPU's instructions. The single most dangerous assumption in THIS review is the station term (rank 3), because it is the one engine term that is not a datapath and the one a placed design could show heavier than estimated; even at three times the weak estimate the edge stays above 5x on the row of record.

9. What would turn the edge from estimated to measured

  1. A placed round pipeline on an open or licensed PDK: RTL of one pipeline (the absorb, two block stages, the tree, the cell, the exchange, the address) and a station of 256 contexts, synthesised and placed at a 7 nm predictive or a 28 nm open process, power-analysed on the reference's descriptor stream (the trace sets' block and regs records give the exact switching activity), read against the reference's vectors for exactness. This is one engineer-week of RTL and a box with the tools; the output is a MEASURED-class energy per round and an area, which replaces section 4.2's bands. This is the computation the earliest draft has not run; it needs a box allocated with a synthesis flow.
  2. The memory side needs nothing new: the X16-Q wall row and the shipped-board rows are measured; a wall reading of a bonded stack running the version 4 walk would add nothing the Ethash pattern has not shown.
  3. The GPU side: the card's energy per hash is measured; the one row that would move it is a leaner kernel, which is the project's own lever and is read on the card when it exists.
  4. For the sentence on the public text, the artefact that would let the project say "measured" is an FPGA implementation of one pipeline against an HBM card (review 2 section 3.4): it measures the pipeline's exactness and energy at an FPGA's efficiency, a lower bound on the ASIC's.

10. Record: inputs, by path at main 98b5a317

One line of the record is not served here (a name, a machine or a path).

Grade summary: the card's rows and counters MEASURED; the memory classes MEASURED class (shipped machines, the record's admitted rows); the operation counts DERIVED from the text; the engine's energies ESTIMATED with bands; the whole-machine factors ASSUMED and stated. No em dash; no personal name; no box name; times UK.

Generated from the repository at build time. Every figure carries the grade the record gives it. Times are UTC unless a date alone is given.