# RESULTS — the print lab's own graphs, drawn on a 95-watt laptop GPU

*What this is, for a reader who scrolled straight here: the render bench the estate's 24 GB
desktop cards ran — R1, the print lab's three certified graphs at batch 3, and R4, ten minutes of
continuous drawing — run again on the **NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** soldered into
a gaming laptop, through the same instrument (`renderlib.py`, byte-identical across all five legs
of this ladder by a fence) on the pinned **ComfyUI 0.21.1** the published comparison tables
demand, with the same certified graph bytes at the same seeds and the same weights by digest.
Measured 2026-09-21 between **19:20:01Z and 19:34:29Z**. Every table below is generated from
`results/*.json` by `summarize.py`; nothing here is typed in by hand.*

*⚠ **This leg carries no `PREREG.md` and no `PROVENANCE.md` of its own, and that is stated
rather than left to be discovered.** Both legs of this bench are pre-registered in ONE document,
[`../gpu-5090-laptop-2026-09-21/PREREG.md`](../gpu-5090-laptop-2026-09-21/PREREG.md), whose §5 is
this leg — its two arms, their shapes, R4's 83 °C stop and the order it runs in — and whose
registered absences cover both. The instrument's own delta from the sibling legs is in
[`INSTRUMENT-NOTE-2026-09-21.md`](INSTRUMENT-NOTE-2026-09-21.md), with both `renderlib.py`
digests. The sibling legs each ship their own pair of files; this one does not, and a reader
looking for them here should look there.*

*The language half of this bench — the eleven-arm bank, ollama 0.32.13 — is a separate document:
[`../gpu-5090-laptop-2026-09-21/RESULTS.md`](../gpu-5090-laptop-2026-09-21/RESULTS.md).*

---

## The one sentence

**In ten minutes of continuous drawing this board made 294 images at 95 watts, where a 3090 at
350 watts made 311.** That is **94.5 % of the throughput on 29 % of the board power** — 0.0529
watt-hours an image against 0.1763 — at a peak of 58 °C against 74, with the fan held at maximum
by hand because the driver will not report it.

## What changed the shape of this bench, before any number

**There is no cap ladder here.** The operator's 17:20Z read-back on the day — *"Changing power
management limit is not supported for GPU: 00000000:01:00.0"* — withdrew it: this board refuses
to have a power limit SET, at any wattage. What replaced it is three POSTURES:

| posture | what it is | its cap cell | state |
|---|---|---|---|
| **fixed, 95 W** | `nvidia-powerd` stopped, clocks released; the board flat at its own default limit. | the number **95 W** | **measured — this document** |
| **dynamic-boost** | `nvidia-powerd` running, no cap set, clocks **released**; the limit floats 95–175 W against the CPU's draw. | a **RANGE** with its `n`, from that pass's own 2 Hz trace | **measured — this document** |
| **shipped** | `nvidia-powerd` running **and** this box's boot-time 1,200–2,550 MHz clock lock IN FORCE. **This is how the machine actually boots.** | the same shape — and both floating passes' timed windows came back **`150 W, flat`** with their `n` and the finding stated | **measured — this document** |

**All three postures are in the tables below, and each pass's rows were ADDED rather than re-cutting
anything written here** — which is what the empty columns were for while they were empty.

**The dynamic-boost pass, and the attempt before it — written 2026-09-21.** What this paragraph is
about, for a reader who scrolled straight to it: every `dynamic-boost` figure in this document
comes from ONE pass over both legs of this bench, run **2026-09-21 between 21:01:51Z and
21:50:30Z** with the card otherwise empty (the receipt is
`../gpu-5090-laptop-2026-09-21/RUNG-DYNBOOST-RECEIPT.txt`, and both legs exited 0).
**It is the second attempt, and this leg is the reason there is a second.** The first pass started
at **2026-09-21 20:24Z** and THIS leg's contention gate refused to start it at **20:56:19Z**,
because another process held the card — the system `ollama`'s resident embedding model, 610 MiB,
loaded by the archive's hourly embed job at about 19:51Z — and an arm that shares a card is not
measuring this card. The 95 W pass had run with the card empty, so the tenant was unloaded, the
hourly timer was paused for the window and put back, and the whole pass was re-run into fresh
files. **The first attempt's LANGUAGE leg is kept rather than deleted**, under
`../gpu-5090-laptop-2026-09-21/results/superseded-tenant-resident-20260921T2024Z/` with a README
of its own; it never produced a render arm at all, so nothing in THIS document has a superseded
twin. That language leg reads as a replication rather than a casualty: against the re-run its
widest disagreement over gemma4's eight windows is **0.897 tokens a second** (0.58 % of the
reading, at the 32,768 rung). The operator-side half of the story, the paused timer included, is
in [`../gpu-5090-laptop-2026-09-21/OPERATOR-CONDITIONS.md`](../gpu-5090-laptop-2026-09-21/OPERATOR-CONDITIONS.md).

**The shipped pass — what this laptop does on an ordinary day — written 2026-09-22.** What this
paragraph is about, for a reader who scrolled straight to it: a THIRD render pass on the same
soldered NVIDIA GeForce RTX 5090 Laptop GPU 24 GB, in the posture this machine actually **boots**
in — NVIDIA Dynamic Boost running **and** this box's own `ai-perf.service` clock lock
(`nvidia-smi -lgc 1200,2550`) IN FORCE, where the first two passes released it so their seconds
could sit beside benchbox's unlocked desktop seats. It ran **2026-09-22 between 00:10:49Z and
00:56:33Z** (both legs of the bench; this leg's arms are the tail of that window), on a card
verified empty at the render leg's own gate, in the same pinned ComfyUI **0.21.1 (`26515acd`)** and
against the same three certified graphs. an operator ruled it at about 23:10Z the night before, against
the registered question `Q-BOOST-1`; `../gpu-5090-laptop-2026-09-21/PREREG.md` Amendment 4 carries
the registration.

**The comparison, in one sentence: under load the shipped posture draws the same pictures in the
same seconds as the unlocked boost pass, and the lock shows up only at idle.** R1's three graphs
came back at **1.247 · 1.240 · 4.675 seconds an image** against the boost pass's **1.246 · 1.245 ·
4.649** — within a thousandth on the first, five thousandths on the second and twenty-six on the
third, at
**47.50 · 47.47 · 12.68 images a minute** against **47.50 · 47.49 · 12.75**. R4 drew **382 images in
600.5 s** (38.17 a minute, 1.507 s an image) against the boost pass's **378 in 600.6 s** (37.76,
1.521), plateaued at the same **68.0 °C** — reached at 4.6 minutes rather than 5.5 — peaked at
**70 °C** against 71, and **the 83 °C stop did not fire in either**. What the lock changes is the
board at rest: the idle baseline this leg reads before each arm is **11.3 W** here against **6.5 W**
in both unlocked passes, and the idle link sits at **x8 gen 2** rather than gen 1. And the enforced
limit **never moved from 150 W** — all **1,224** samples of this pass's timed windows — so its cap
cell reads `150 W, flat` with its `n` and the finding stated, never a span. ⚠ **The two floating
passes are flat for different reasons and the document says so twice, once per posture**: the boost
pass's own files read **140 W at their preflight** and 150 W throughout the scored windows, so what
was flat there is the window; the shipped pass's files show 150 W at every point there is a reading
at all. With the clock floor up the card never idles low enough for the platform to shift budget
away.

## Two conditions ride every table, and no instrument on this box can read either

1. **The laptop's fan was at MAXIMUM, set by the operator's hand** (Fn+Up, held for the whole
   pass), recorded in [`../gpu-5090-laptop-2026-09-21/OPERATOR-CONDITIONS.md`](../gpu-5090-laptop-2026-09-21/OPERATOR-CONDITIONS.md). `fan.speed`
   reads `[N/A]` on this board: `fan_curve_2hz` is **empty** in the R4 file and every
   `fan.speed` reduction carries `n: 0`. It is a CONDITION of the measurement, never a figure.
2. **The boot-time clock lock was OFF for two passes and ON for the third, read FROM THE CARD.**
   For the fixed 95 W rung and for `dynamic-boost` it was released — a sampled SM clock of
   **180 MHz against the lock's own 1,200 MHz floor, over twelve reads**, recorded in the language
   leg's `../gpu-5090-laptop-2026-09-21/results/gpu-5090-laptop-24g-clock-lock-OFF-BY-CARD-95w.txt`.
   For `shipped` it was in force, and the proof is the other direction: a card **at rest** whose
   `clocks.sm` could not fall, pinned at **1,192 MHz over twelve reads at 0 % utilisation**
   (`logs/clock-lock-shipped.txt` here, and the `ON-BY-CARD` receipt in the language leg). ⚠ 1,192
   and not 1,200 because the driver snaps the requested floor to the nearest supported SM clock,
   eight MHz low on this board. The unit `ai-perf.service` reads `active` whatever `-rgc` did
   since, because it is a `Type=oneshot`, so **the unit is not evidence in either direction**.
   `run_rung.sh` REFUSES a pass on the wrong side of that line rather than footnoting it.

## The seat, and the one thing about it that is not the desktop legs'

**The card is SOLDERED.** There is no slot, no partner, and no board that can replace it for a
control — which is why this leg publishes no control column and says so rather than inventing
one. Its link is **PCIe x8 of generation 5 under load**, read from each timed window's own 2 Hz
trace; the desktop legs of this ladder ran x16. That is a reading of this machine, not a choice,
and every render-second below carries it.

**Watts are CARD BOARD POWER** at 2 Hz, never the wall: no UPS, no NUT, no battery power sensor,
RAPL root-only. R4 records itself **unwatched** — the 80 % UPS stop could not arm — which is not
the same as quiet. Every watt-hour figure in this document is derived from three printed columns
(mean board watts × the window's wall seconds ÷ 3,600 ÷ its image count) so a reader can redo it.

**`same_build` is FALSE for this seat, on purpose.** The pinned checkout IS ComfyUI 0.21.1, the
tag the reference seats ran — but the stack underneath is not theirs: torch 2.12.1+cu130 on
Python 3.13.14 against driver 595.91.07, because a Blackwell `sm_120` board cannot run their
cu128 build. Calling it the same build because the tag matches would be the substitution this
bench refuses everywhere else, and it changes what every ratio in this document may claim.

## The four findings, before the tables

1. **Sustained, this board is within 6 % of a 3090's ten-minute image count on 29 % of its
   power.** 294 images against 311; 1.958 s an image against 1.886; **0.0529 Wh an image against
   0.1763** — **3.3× the images per watt-hour**. Against the 3090 Ti at 350 W it is 294 against
   331 and 0.0529 against 0.1640; against a single 3080 at 250 W it is 294 against **158**, and
   0.0529 against 0.2371.
2. **The short arm agrees with the long one, and the margin is small enough to be worth naming
   precisely.** On the print lab's own 8-step graph, R1 timed batches: **1.640 s an image at
   95 W against the 3090's 1.509 at 350 W — 1.087×**. On the 32-step graph, 6.086 against 5.670
   — **1.073×**. On the pixel graph, 1.627 against 1.528 — **1.065×**. A card allowed 27 % of the
   power takes 6–9 % longer per image on this work.
3. **It runs cold, and the thermal record is the least confounded number here.** R4 plateaued at
   **54.0 °C at 3.3 minutes** and peaked at **58 °C**, against the 3090's plateau of 71 °C and
   peak of 74 — while drawing 94.5 % as many images. The 83 °C stop never came near firing and
   the threshold was not moved. ⚠ Read that against the fan condition above: the fan was held at
   maximum by hand, and no instrument on this box can say what it was doing.
4. **The power cap was active for 93 to 100 % of every timed window.** At 95 W, `sw_power_cap`
   reads **0.9474** on the 8-step R1 window, **1.0000** on the 32-step, **1.0000** on the pixel
   graph, and **0.9343** across R4's 1,141 samples — two of the four windows were capped for every
   single sample. This board is **power-bound for essentially the whole of this work**, which is
   the reading that made the dynamic-boost pass worth running; its column is now filled, and the
   comparison is in the tables rather than in this sentence.

## What this leg did NOT measure

Named here and again in a table at the foot of the page: **no comparison between the shipped pass
and any desktop seat** (that posture IS measured now — 2026-09-22 00:10:49–00:56:33Z, its rows are
in every table below — but benchbox runs no clock lock at all, and `PREREG.md` §11.2 says no cell
from a locked pass may sit beside a benchbox row; Amendment 4 does not weaken it, so the shipped
seconds are set beside THIS machine's other two postures and nothing else, and the ratio column is
`—` for that row rather than a number) · no control
seat (soldered) · no cell filled across caps (all three desktop seats are WITHHELD by the harness
at this rung, each with its own reason) · no wall watts · no fan figure · no memory-die
temperature · no peak-bandwidth ceiling (GDDR7 against a GDDR6 formula; the memory *clock* is a
reading and prints) · no published pixels · no batch-1 R1 leg · R2/R3a/R3b **NOT APPLICABLE** on
one card.

## ⚠ One receipt in this leg is defective, and it is stated rather than left to be found

The inventory arm's three model rows read **`absent`**. It looked in `/workshop/ComfyUI/models`
— the LIVE checkout's model directory — while the arms rendered against the pinned checkout's
own. **The bytes ARE certified**: all three weights were hashed on both ends and matched before
the bench (`../gpu-5090-laptop-2026-09-21/RECEIPTS.md`, and `../gpu-5090-laptop-2026-09-21/logs/klein-staging.log` prints all six digests), and
the three certified graph fences all read `reproduced` in the same file. What is missing is the
inventory arm's own re-proof of the weights. **No figure in this document depends on that cell**,
and the fix belongs in a commit of its own now that all three passes are in — the inventory arm was
left exactly as it was for the third pass for the same reason the harness's inherited notes were:
changing the instrument between postures would have cost the comparison the pass exists to make.

---

<!-- GENERATED:BEGIN — everything to the END marker is written by ./report.sh -->

### The seat, and the two postures every table below is keyed on

| posture | state | cap cell | read from the field | declared posture | idle baseline (the card, before the arm) | PCIe at idle | the contention gate |
|---|---|---|---|---|---|---|---|
| fixed · 95 W | measured | 95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board) | `enforced.power.limit` | fixed · the clock lock must read **OFF-BY-CARD** | 6.5 W at 33 °C, 15 MiB used | x8 gen 1 at idle | mean 5.0 % ceiling, passed: **True** |
| dynamic-boost · 95–175 W | measured | 150 W, flat (n=1223) | `enforced.power.limit` | dynamic-boost · the clock lock must read **OFF-BY-CARD** | 6.5 W at 33 °C, 15 MiB used | x8 gen 1 at idle | mean 5.0 % ceiling, passed: **True** |
| shipped · boost + clock lock | measured | 150 W, flat (n=1224) | `enforced.power.limit` | shipped · the clock lock must read **ON-BY-CARD** | 11.3 W at 33 °C, 15 MiB used | x8 gen 2 at idle | mean 5.0 % ceiling, passed: **True** |

> **⚠ The dynamic-boost · 95–175 W posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,223 samples of that pass's timed windows read 150 W. It was NOT flat across the pass: the same files read 140 W at `r1-r1-dynboost`'s preflight (2026-09-21T21:34:43Z); 140 W at `r4-r4-dynboost`'s preflight (2026-09-21T21:40:16Z). So what is flat here is the scored window, not the posture — and the cap cells print the window they measured.
> **⚠ The shipped · boost + clock lock posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,224 samples of that pass's timed windows read 150 W. Nothing in these files shows the limit moving at any point, which is the reading `nvidia-powerd` was expected to contradict; it is stated rather than smoothed into a span.

**The link, UNDER LOAD.** An idle card drops its link to save power, so a width read at rest flatters the result. These are read from each timed window's own 2 Hz trace.

| posture | graph | PCIe under load | source file |
|---|---|---|---|
| fixed · 95 W | `klein-4b-8st` | x8 gen 5 | `results/r1-r1-95w.json` |
| fixed · 95 W | `klein-4b-8st-pixel4` | x8 gen 5 | `results/r1-r1-95w.json` |
| fixed · 95 W | `klein-4b-32st` | x8 gen 5 | `results/r1-r1-95w.json` |
| dynamic-boost · 95–175 W | `klein-4b-8st` | x8 gen 5 | `results/r1-r1-dynboost.json` |
| dynamic-boost · 95–175 W | `klein-4b-8st-pixel4` | x8 gen 5 | `results/r1-r1-dynboost.json` |
| dynamic-boost · 95–175 W | `klein-4b-32st` | x8 gen 5 | `results/r1-r1-dynboost.json` |
| shipped · boost + clock lock | `klein-4b-8st` | x8 gen 5 | `results/r1-r1-shipped.json` |
| shipped · boost + clock lock | `klein-4b-8st-pixel4` | x8 gen 5 | `results/r1-r1-shipped.json` |
| shipped · boost + clock lock | `klein-4b-32st` | x8 gen 5 | `results/r1-r1-shipped.json` |

> ⚠ **This is an x8 link, and it is not the x16 the desktop legs of this ladder ran on.** It is a reading of this machine, not a choice: the board is soldered and there is no slot. Every render-second below carries it.
> ⚠ **The clock lock is a confound for two of these postures and the DECLARED CONDITION of the third.** `fixed · 95 W` and `dynamic-boost` are measured with this box's boot-time 1,200–2,550 MHz lock RELEASED, which is what lets their seconds sit beside benchbox's unlocked desktop seats; `shipped` is measured with it IN FORCE, because that is what the machine does for its owner on an ordinary day. `run_rung.sh` REFUSES a pass on the wrong side of that line rather than footnoting it, reading the verdict FROM THE CARD (never from `ai-perf.service`, a oneshot that reads `active` for the whole uptime), and writes it to `logs/clock-lock-<posture>.txt`. The column above states which verdict each posture requires; the verdict each pass GOT is in that file and in the language leg's own posture table.
> **The fan** — **a declared non-figure.** `fan.speed` reads `[N/A]` on this board: the driver reports no fan for it, and every `fan.speed` reduction in every result file here carries `n: 0`. The operator held the laptop's own maximum-fan key by hand for the whole of the fixed pass (`../gpu-5090-laptop-2026-09-21/OPERATOR-CONDITIONS.md`) — a CONDITION of the measurement, which no instrument on this box can read, and never a figure.

#### The version pin the published render tables demand

| posture | ComfyUI | the weights, as the inventory arm read them | the certified graph fences | source file |
|---|---|---|---|---|
| fixed · 95 W | **0.21.1 (`26515acd`)** — refused-unless, by `run_rung.sh` | `flux-2-klein-4b.safetensors` absent · `qwen_3_4b.safetensors` absent · `flux2-vae.safetensors` absent | `klein-4b-32st` reproduced · `klein-4b-8st` reproduced · `klein-4b-8st-pixel4` reproduced | `results/inventory-inventory-95w.json` |
| dynamic-boost · 95–175 W | **0.21.1 (`26515acd`)** — refused-unless, by `run_rung.sh` | `flux-2-klein-4b.safetensors` absent · `qwen_3_4b.safetensors` absent · `flux2-vae.safetensors` absent | `klein-4b-32st` reproduced · `klein-4b-8st` reproduced · `klein-4b-8st-pixel4` reproduced | `results/inventory-inventory-dynboost.json` |
| shipped · boost + clock lock | **0.21.1 (`26515acd`)** — refused-unless, by `run_rung.sh` | `flux-2-klein-4b.safetensors` absent · `qwen_3_4b.safetensors` absent · `flux2-vae.safetensors` absent | `klein-4b-32st` reproduced · `klein-4b-8st` reproduced · `klein-4b-8st-pixel4` reproduced | `results/inventory-inventory-shipped.json` |

> **How strong this proof is, stated rather than implied.** `run_rung.sh` REFUSES to start unless the pinned checkout's own `comfyui_version.py` reads exactly `0.21.1`, and it prints the version and the commit into the pass log (`../gpu-5090-laptop-2026-09-21/logs/rung-95w.log`: `comfy version 0.21.1 (26515acd)`). **No result file in this leg carries a version FIELD**, so the pin is proved by a refusal and a log line, not by a column — which is weaker than the language leg's `/api/version` read, and is said here rather than left to be found.
> ⚠ **The weights read `absent` above, and that is a defect in the RECEIPT and not in the bench.** The inventory arm looked in `/workshop/ComfyUI/models` — the live checkout's model directory — while the arms ran against the pinned checkout's own. The three files WERE hashed on both ends and matched before the bench (`../gpu-5090-laptop-2026-09-21/RECEIPTS.md`, and `../gpu-5090-laptop-2026-09-21/logs/klein-staging.log` prints all six digests), so the bytes are certified; what is missing is the inventory arm's own re-proof of them. **No figure in this document depends on that cell.**
> ⚠ **`same_build` is FALSE for this seat, on purpose.** The pinned checkout IS ComfyUI 0.21.1, the tag the reference seats ran — but the stack underneath is not theirs (torch 2.12.1+cu130 on Python 3.13.14 against driver 595.91.07; a Blackwell `sm_120` board cannot run their cu128 build). Calling it the same build because the tag matches would be the substitution this bench refuses everywhere else.

#### R1 · the print lab's certified graphs, at batch 3

**`klein-4b-8st`** — graph `79df5a8bb3f46ece…`, 8 steps, 512×512, cfg 1.0, euler, batch 3.

| posture | cap, printed beside the figure | timed submits | timed images | s per submit (median) | s per submit (spread) | s per image (median) | s per image (spread) | Wh per image | warm-up first submit s (EXCLUDED) | W median/max | core temp max °C | SM clock median MHz | mem clock median MHz | card MiB max | sw_power_cap active fraction | images/min (wall) | source file |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | 2 | 6 | 4.921 | n=2; 4.750–5.093 | **1.640** | n=2; 1.583–1.698 | 0.0431 | 15.588 | 94.3 / 96.0 | 44.0 | 1,575 | 14,001 | 16,355 | 0.9474 | 35.59 | `results/r1-r1-95w.json` |
| dynamic-boost · 95–175 W | **150 W, flat (n=14)** | 2 | 6 | 3.738 | n=2; 3.605–3.871 | **1.246** | n=2; 1.202–1.290 | 0.0500 | 9.959 | 148.1 / 151.3 | 50.0 | 2,085 | 14,001 | 16,355 | 1.0000 | 47.50 | `results/r1-r1-dynboost.json` |
| shipped · boost + clock lock | **150 W, flat (n=15)** | 2 | 6 | 3.742 | n=2; 3.613–3.870 | **1.247** | n=2; 1.204–1.290 | 0.0498 | 9.618 | 148.4 / 150.3 | 49.0 | 1,987 | 14,001 | 16,355 | 0.9333 | 47.50 | `results/r1-r1-shipped.json` |

**`klein-4b-8st-pixel4`** — graph `94bfd633a7e47633…`, 8 steps, 512×512, cfg 1.0, euler, batch 3.

| posture | cap, printed beside the figure | timed submits | timed images | s per submit (median) | s per submit (spread) | s per image (median) | s per image (spread) | Wh per image | warm-up first submit s (EXCLUDED) | W median/max | core temp max °C | SM clock median MHz | mem clock median MHz | card MiB max | sw_power_cap active fraction | images/min (wall) | source file |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | 2 | 6 | 4.881 | n=2; 4.736–5.026 | **1.627** | n=2; 1.579–1.675 | 0.0429 | 6.676 | 94.8 / 96.0 | 50.0 | 1,526 | 14,001 | 16,355 | 1.0000 | 36.76 | `results/r1-r1-95w.json` |
| dynamic-boost · 95–175 W | **150 W, flat (n=15)** | 2 | 6 | 3.735 | n=2; 3.583–3.887 | **1.245** | n=2; 1.194–1.296 | 0.0513 | 5.921 | 148.7 / 153.2 | 57.0 | 2,032 | 14,001 | 16,355 | 1.0000 | 47.49 | `results/r1-r1-dynboost.json` |
| shipped · boost + clock lock | **150 W, flat (n=15)** | 2 | 6 | 3.721 | n=2; 3.584–3.858 | **1.240** | n=2; 1.195–1.286 | 0.0512 | 5.591 | 149.6 / 152.7 | 58.0 | 2,062 | 14,001 | 17,827 | 0.9333 | 47.47 | `results/r1-r1-shipped.json` |

**`klein-4b-32st`** — graph `7dd85f010ad76a82…`, 32 steps, 512×512, cfg 1.0, euler, batch 3.

| posture | cap, printed beside the figure | timed submits | timed images | s per submit (median) | s per submit (spread) | s per image (median) | s per image (spread) | Wh per image | warm-up first submit s (EXCLUDED) | W median/max | core temp max °C | SM clock median MHz | mem clock median MHz | card MiB max | sw_power_cap active fraction | images/min (wall) | source file |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | 2 | 6 | 18.258 | n=2; 18.083–18.434 | **6.086** | n=2; 6.028–6.145 | 0.1607 | 37.655 | 94.8 / 96.4 | 49.0 | 1,545 | 14,001 | 16,355 | 1.0000 | 9.77 | `results/r1-r1-95w.json` |
| dynamic-boost · 95–175 W | **150 W, flat (n=53)** | 2 | 6 | 13.948 | n=2; 13.752–14.145 | **4.649** | n=2; 4.584–4.715 | 0.1934 | 57.573 | 149.5 / 154.2 | 56.0 | 2,047 | 14,001 | 16,355 | 1.0000 | 12.75 | `results/r1-r1-dynboost.json` |
| shipped · boost + clock lock | **150 W, flat (n=54)** | 2 | 6 | 14.026 | n=2; 13.849–14.203 | **4.675** | n=2; 4.616–4.734 | 0.1930 | 16.098 | 149.3 / 150.9 | 57.0 | 2,028 | 14,001 | 17,827 | 0.9815 | 12.68 | `results/r1-r1-shipped.json` |

> **Every second here is from the TIMED batches and none is from the warm-up.** The warm-up's first submit is printed in its own column, labelled EXCLUDED, because a cold submit on this board is three to eight times a warm one and a reader who sees only a median deserves to know how far it was from the first draw.
> **Every render-second is ComfyUI's own execution clock**, not a wall measurement around it; the wall figure is carried in the same files and is printed only as images-per-minute.
> `Wh per image` = the timed window's mean BOARD watts × its wall seconds ÷ 3,600 ÷ its image count. All three inputs are columns of this table or of the file it names, so the arithmetic can be redone. **There is no wall-socket figure on this box** and none is estimated.
> The peak-bandwidth cells this ladder prints elsewhere are **WITHHELD** here: this is a GDDR7 part and the harness's two-bits-per-clock formula is a GDDR6 fact. The memory CLOCK is a reading and is in the table.

> **⚠ The dynamic-boost · 95–175 W posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,223 samples of that pass's timed windows read 150 W. It was NOT flat across the pass: the same files read 140 W at `r1-r1-dynboost`'s preflight (2026-09-21T21:34:43Z); 140 W at `r4-r4-dynboost`'s preflight (2026-09-21T21:40:16Z). So what is flat here is the scored window, not the posture — and the cap cells print the window they measured.
> **⚠ The shipped · boost + clock lock posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,224 samples of that pass's timed windows read 150 W. Nothing in these files shows the limit moving at any point, which is the reading `nvidia-powerd` was expected to contradict; it is stated rather than smoothed into a span.

#### R4 · ten minutes of continuous drawing

| posture | cap, printed beside the figure | graph | batch | ran s | images | images/min (wall) | s per image (median) | s per image (spread) | Wh per image | temp at start °C | plateau | core temp max °C | W median/max | SM clock median MHz | card MiB max | sw_power_cap active fraction | the 83 °C stop | source file |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | `klein-4b-8st` | 1 | 600.9 | 294 | 29.36 | **1.958** | n=294; 1.918–2.019 | 0.0529 | 48 | 54.0 °C at 3.3 min | 58.0 | 93.8 / 100.6 | 1,635 | 16,451 | 0.9343 | did not fire (threshold 83.0 °C, unmoved) | `results/r4-r4-95w.json` |
| dynamic-boost · 95–175 W | **150 W, flat (n=1141)** | `klein-4b-8st` | 1 | 600.6 | 378 | 37.76 | **1.521** | n=378; 1.476–1.574 | 0.0633 | 55 | 68.0 °C at 5.5 min | 71.0 | 145.9 / 156.9 | 2,055 | 16,451 | 0.9220 | did not fire (threshold 83.0 °C, unmoved) | `results/r4-r4-dynboost.json` |
| shipped · boost + clock lock | **150 W, flat (n=1140)** | `klein-4b-8st` | 1 | 600.5 | 382 | 38.17 | **1.507** | n=382; 1.475–1.590 | 0.0629 | 55 | 68.0 °C at 4.6 min | 70.0 | 146.4 / 155.2 | 2,058 | 16,451 | 0.9377 | did not fire (threshold 83.0 °C, unmoved) | `results/r4-r4-shipped.json` |

> **The `reduced` block is the source of every second in this row** — 294 submits at batch 1, each one its own image, reduced by the harness rather than by this file.
> **The UPS stop could not arm.** There is no readable UPS on this box; the arm records itself unwatched, which is not the same as quiet.
> The fan cell is a declared non-figure here too: `fan_curve_2hz` is **empty** in this file, with `fan.speed n=0` in the trace — the board reports no fan. The operator's hand-set maximum fan is in `../gpu-5090-laptop-2026-09-21/OPERATOR-CONDITIONS.md`.

> **⚠ The dynamic-boost · 95–175 W posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,223 samples of that pass's timed windows read 150 W. It was NOT flat across the pass: the same files read 140 W at `r1-r1-dynboost`'s preflight (2026-09-21T21:34:43Z); 140 W at `r4-r4-dynboost`'s preflight (2026-09-21T21:40:16Z). So what is flat here is the scored window, not the posture — and the cap cells print the window they measured.
> **⚠ The shipped · boost + clock lock posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,224 samples of that pass's timed windows read 150 W. Nothing in these files shows the limit moving at any point, which is the reading `nvidia-powerd` was expected to contradict; it is stated rather than smoothed into a span.

#### R1 · this board against the desktop seats — a BOX-AND-BOARD comparison

**`klein-4b-8st`**

| seat | cap, printed beside every figure | the seat, and its build | s per image (median) | spread | W median/max | Wh per image | this board at 95 W ÷ that seat | source file |
|---|---|---|---|---|---|---|---|---|
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | soldered · PCIe x8 gen 5 under load | **1.640** | n=2; 1.583–1.698 | 94.3 / 96.0 | 0.0431 | — | `results/r1-r1-95w.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · dynamic-boost · 95–175 W | **150 W, flat (n=14)** | soldered · PCIe x8 gen 5 under load | **1.246** | n=2; 1.202–1.290 | 148.1 / 151.3 | 0.0500 | — | `results/r1-r1-dynboost.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · shipped · boost + clock lock | **150 W, flat (n=15)** | soldered · PCIe x8 gen 5 under load | **1.247** | n=2; 1.204–1.290 | 148.4 / 150.3 | 0.0498 | — | `results/r1-r1-shipped.json` |
| a GeForce RTX 3090 24 GB | **350 W** | ComfyUI 0.21.1, torch 2.11.0+cu128, Python 3.12.13, driver 595.71.05 | **1.509** | n=2; 1.457–1.562 | 337.3 / 341.5 | 0.1369 | **1.087×** | `../references/render-3090-r1-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **350 W — the shared-cap rung** | ComfyUI 0.21.1, the same box and build as the 3090 above | **1.397** | n=2; 1.351–1.443 | 347.5 / 349.9 | 0.1309 | **1.174×** | `../references/render-3090ti-r1-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **450 W — this board's own limit** | ComfyUI 0.21.1, the same box and build as the rows above | **1.369** | n=2; 1.330–1.409 | 378.5 / 382.7 | 0.1391 | **1.198×** | `../references/render-3090ti-r1-450w.json` |
| a GeForce RTX 3080 10 GB, one of a pair | **250 W** | ComfyUI 0.21.1 (292814c3) | **2.074** | n=2; 1.825–2.323 | 248.6 / 249.8 | 0.1398 | **0.791×** | `../references/render-2x3080-r1-8st.json` |

**`klein-4b-8st-pixel4`**

| seat | cap, printed beside every figure | the seat, and its build | s per image (median) | spread | W median/max | Wh per image | this board at 95 W ÷ that seat | source file |
|---|---|---|---|---|---|---|---|---|
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | soldered · PCIe x8 gen 5 under load | **1.627** | n=2; 1.579–1.675 | 94.8 / 96.0 | 0.0429 | — | `results/r1-r1-95w.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · dynamic-boost · 95–175 W | **150 W, flat (n=15)** | soldered · PCIe x8 gen 5 under load | **1.245** | n=2; 1.194–1.296 | 148.7 / 153.2 | 0.0513 | — | `results/r1-r1-dynboost.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · shipped · boost + clock lock | **150 W, flat (n=15)** | soldered · PCIe x8 gen 5 under load | **1.240** | n=2; 1.195–1.286 | 149.6 / 152.7 | 0.0512 | — | `results/r1-r1-shipped.json` |
| a GeForce RTX 3090 24 GB | **350 W** | ComfyUI 0.21.1, torch 2.11.0+cu128, Python 3.12.13, driver 595.71.05 | **1.528** | n=2; 1.477–1.580 | 338.0 / 339.0 | 0.1427 | **1.065×** | `../references/render-3090-r1-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **350 W — the shared-cap rung** | ComfyUI 0.21.1, the same box and build as the 3090 above | **1.379** | n=2; 1.332–1.426 | 348.1 / 356.4 | 0.1307 | **1.180×** | `../references/render-3090ti-r1-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **450 W — this board's own limit** | ComfyUI 0.21.1, the same box and build as the rows above | **1.350** | n=2; 1.308–1.392 | 387.7 / 389.0 | 0.1418 | **1.205×** | `../references/render-3090ti-r1-450w.json` |
| a GeForce RTX 3080 10 GB, one of a pair | **250 W** | ComfyUI 0.21.1 (292814c3) | **2.067** | n=2; 1.830–2.305 | 248.9 / 249.6 | 0.1397 | **0.787×** | `../references/render-2x3080-r1-rest.json` |

**`klein-4b-32st`**

| seat | cap, printed beside every figure | the seat, and its build | s per image (median) | spread | W median/max | Wh per image | this board at 95 W ÷ that seat | source file |
|---|---|---|---|---|---|---|---|---|
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | soldered · PCIe x8 gen 5 under load | **6.086** | n=2; 6.028–6.145 | 94.8 / 96.4 | 0.1607 | — | `results/r1-r1-95w.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · dynamic-boost · 95–175 W | **150 W, flat (n=53)** | soldered · PCIe x8 gen 5 under load | **4.649** | n=2; 4.584–4.715 | 149.5 / 154.2 | 0.1934 | — | `results/r1-r1-dynboost.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · shipped · boost + clock lock | **150 W, flat (n=54)** | soldered · PCIe x8 gen 5 under load | **4.675** | n=2; 4.616–4.734 | 149.3 / 150.9 | 0.1930 | — | `results/r1-r1-shipped.json` |
| a GeForce RTX 3090 24 GB | **350 W** | ComfyUI 0.21.1, torch 2.11.0+cu128, Python 3.12.13, driver 595.71.05 | **5.670** | n=2; 5.598–5.741 | 336.5 / 340.4 | 0.5292 | **1.073×** | `../references/render-3090-r1-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **350 W — the shared-cap rung** | ComfyUI 0.21.1, the same box and build as the 3090 above | **5.130** | n=2; 5.082–5.177 | 348.6 / 352.9 | 0.4956 | **1.186×** | `../references/render-3090ti-r1-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **450 W — this board's own limit** | ComfyUI 0.21.1, the same box and build as the rows above | **5.015** | n=2; 4.972–5.059 | 388.7 / 390.6 | 0.5381 | **1.214×** | `../references/render-3090ti-r1-450w.json` |
| a GeForce RTX 3080 10 GB, one of a pair | **250 W** | ComfyUI 0.21.1 (292814c3) | **7.278** | n=2; 7.025–7.531 | 249.2 / 249.7 | 0.5014 | **0.836×** | `../references/render-2x3080-r1-rest.json` |

> **Read the ratio column as a box-and-board ratio and nothing else.** Every reference seat differs from this one in the BOX, the driver, the torch build, the link width AND the board, and each was measured at a cap this board's whole envelope sits below. Above 1.000 means this board took longer per image.
> **No cell here is filled across caps.** The harness's own `reference_seats_at_the_measured_cap` withheld all three desktop seats with a per-seat reason — *a reference is never matched across caps* — so this table prints each seat at ITS OWN cap, in its own column, and never places one in a cap column it did not run at.
> **⚠ The 3090 Ti has TWO rows in every table above, and they are ONE board at two caps.** `450 W — this board's own limit` is that board at the limit it ships with; `350 W — the shared-cap rung` is the rung every board of this ladder shares, which is 78 % of the Ti's own limit while the 3090's 350 W is 100 % of its. Both are printed so neither reading can stand in for the other, and each row names the file it was read from.

> **⚠ The dynamic-boost · 95–175 W posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,223 samples of that pass's timed windows read 150 W. It was NOT flat across the pass: the same files read 140 W at `r1-r1-dynboost`'s preflight (2026-09-21T21:34:43Z); 140 W at `r4-r4-dynboost`'s preflight (2026-09-21T21:40:16Z). So what is flat here is the scored window, not the posture — and the cap cells print the window they measured.
> **⚠ The shipped · boost + clock lock posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,224 samples of that pass's timed windows read 150 W. Nothing in these files shows the limit moving at any point, which is the reading `nvidia-powerd` was expected to contradict; it is stated rather than smoothed into a span.

#### R4 · ten minutes of continuous drawing, seat by seat

| seat | cap, printed beside every figure | ran s | images | images/min (wall) | s per image (median) | Wh per image | plateau | core temp max °C | W median/max | source file |
|---|---|---|---|---|---|---|---|---|---|---|
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · fixed · 95 W | **95 W (`enforced.power.limit`; `power.limit` reads `[N/A]` on this board)** | 600.9 | 294 | 29.36 | **1.958** | 0.0529 | 54.0 °C at 3.3 min | 58.0 | 93.8 / 100.6 | `results/r4-r4-95w.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · dynamic-boost · 95–175 W | **150 W, flat (n=1141)** | 600.6 | 378 | 37.76 | **1.521** | 0.0633 | 68.0 °C at 5.5 min | 71.0 | 145.9 / 156.9 | `results/r4-r4-dynboost.json` |
| **this board — an NVIDIA GeForce RTX 5090 Laptop GPU 24 GB** · shipped · boost + clock lock | **150 W, flat (n=1140)** | 600.5 | 382 | 38.17 | **1.507** | 0.0629 | 68.0 °C at 4.6 min | 70.0 | 146.4 / 155.2 | `results/r4-r4-shipped.json` |
| a GeForce RTX 3090 24 GB | **350 W** | 601.6 | 311 | 31.02 | **1.886** | 0.1763 | 71.0 °C at 0.9 min | 74.0 | 325.8 / 344.8 | `../references/render-3090-r4-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **350 W — the shared-cap rung** | 601.4 | 331 | 33.02 | **1.715** | 0.1640 | 55.0 °C at 0.4 min | 60.0 | 316.2 / 353.9 | `../references/render-3090ti-r4-350w.json` |
| a GeForce RTX 3090 Ti 24 GB | **450 W — this board's own limit** | 602.1 | 348 | 34.68 | **1.672** | 0.1742 | 57.0 °C at 0.3 min | 62.0 | 357.1 / 390.4 | `../references/render-3090ti-r4-450w.json` |
| a GeForce RTX 3080 10 GB, one of a pair | **250 W** | 602.6 | 158 | 15.77 | **3.737** | 0.2371 | 77.0 °C at 5.6 min | 82.0 | 220.0 / 252.6 | `../references/render-2x3080-r4.json` |

> **The rows did NOT do the same amount of work.** The image counts are in the table, and a seat that draws more images in ten minutes makes more heat for that reason and not because it runs hotter. Read every temperature against the image count beside it, and every plateau against the cap beside that.
> **⚠ The 3090 Ti has TWO rows in every table above, and they are ONE board at two caps.** `450 W — this board's own limit` is that board at the limit it ships with; `350 W — the shared-cap rung` is the rung every board of this ladder shares, which is 78 % of the Ti's own limit while the 3090's 350 W is 100 % of its. Both are printed so neither reading can stand in for the other, and each row names the file it was read from.

> **⚠ The dynamic-boost · 95–175 W posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,223 samples of that pass's timed windows read 150 W. It was NOT flat across the pass: the same files read 140 W at `r1-r1-dynboost`'s preflight (2026-09-21T21:34:43Z); 140 W at `r4-r4-dynboost`'s preflight (2026-09-21T21:40:16Z). So what is flat here is the scored window, not the posture — and the cap cells print the window they measured.
> **⚠ The shipped · boost + clock lock posture's enforced limit was FLAT across every scored window, and under this posture that is a FINDING rather than a range.** All 1,224 samples of that pass's timed windows read 150 W. Nothing in these files shows the limit moving at any point, which is the reading `nvidia-powerd` was expected to contradict; it is stated rather than smoothed into a span.

#### What this leg did NOT measure, named so nobody quotes a gap as a result

| the absence | the reason |
|---|---|
| **a control seat** | **This card is soldered.** Nothing comes out of this machine and nothing goes in, so no board can sit in the same seat and be measured by the same instrument. The harness's own `no_cross_box_seat` note says the matching thing about the other direction: no other box in this estate carries this part, so there is no same-card cross-box row and none is invented. |
| **any cell filled across caps** | All three desktop seats are WITHHELD by the harness at this rung, each with its own reason — *a reference is never matched across caps*. Every comparison above prints each seat at ITS OWN cap, in its own column. |
| **wall watts** | No UPS, no NUT, no battery power sensor, RAPL root-only. Every watt and every watt-hour in this document is CARD BOARD POWER from `nvidia-smi` at 2 Hz. |
| **the fan** | **a declared non-figure.** `fan.speed` reads `[N/A]` on this board: the driver reports no fan for it, and every `fan.speed` reduction in every result file here carries `n: 0`. The operator held the laptop's own maximum-fan key by hand for the whole of the fixed pass (`../gpu-5090-laptop-2026-09-21/OPERATOR-CONDITIONS.md`) — a CONDITION of the measurement, which no instrument on this box can read, and never a figure. |
| **the memory-die temperature** | `temperature.memory` is unreadable on this board as on every board of this ladder; the refusal is cited, not re-proven. Every thermal figure here is CORE. |
| **the peak-bandwidth ceiling** | **WITHHELD** — a GDDR7 part against a GDDR6 formula. The memory CLOCK prints. |
| **the pixels** | No image is published. Every PNG this leg drew is in the bench directory's `results/images/`, which `collect.sh` deliberately does not copy into the repo. |
| **a batch-1 R1 leg** | Not run, exactly as the 3090 leg did not run one: both reference seats are batch-3 measurements. So no solo-against-sustained delta is computed for this board, and none is estimated. |
| **R2, R3a and R3b** | **NOT APPLICABLE** on one card — two cards at once, the component split, and the split on a stack that does not fit all need a second device on the bus. No figure is carried across from a sibling's versions of them. |

<!-- GENERATED:END -->

---

*Every table above the END marker was generated by `summarize.py` from `results/*.json` and, for
the comparison tables, from three sibling legs' result files — one 3090, one 3090 Ti and one of
the two 3080s — each row naming its own file. The prose around them is written and is never
touched by the generator. Regenerate with `./report.sh`; prove it current with
`./report.sh --check`.*
