Weighing flipped bits with heat: the camera half of the Hamming ladder

AI Foundry lab · E63 (request Q122) · aifoundry2, Fri 23 Oct 2026, 12:55–14:00 PDT · pre-registered in 5740cdb7 before the first launch

E60 weighed a flipped bit with the board's power meter. This experiment weighs it with heat. The thermal camera behind aifoundry2's card watched the back of the board while 256 of the chip's cores switched every 10 seconds between E60's top rung, with all 23 mantissa bits of one operand flipping on every cycle, and its zero, the same arithmetic with nothing flipping. The flips put 5.44 W on the board, and the back of the board followed: 194 ± 9 mK at 0.05 Hz over the die, 59 mK per watt of power at that frequency, the heat 87° (about 5 s) behind the power. A middle rung moved it in proportion to its watts, a null of equal watts in the same place stayed flat, and the whole run repeated on 192 cores.

194 mKthe back of the board over the die at 0.05 Hz, top rung against its zero (SE 9)
5.44 Wwhat the flips add on the board: 154 fJ per flipped bit, 256 cores at 800 MHz
36 mK/Wper watt switched; 59 ± 3 per watt of power at 0.05 Hz
2 ± 15 mKthe null, ones against pi: equal watts in the same place (0.04 W apart)

The camera reads the watts the flips draw

top rung, lq_h23middle rung, lq_h8null: ones vs pidashed: 31.7 mK per watt, through zero
● session 1, 256 minions■ session 2, 192 minions
-5005010015020025001234567watts switched: the board's step between the two armscamera, mK at 0.05 Hznull: ones vs pimiddle rungtop rung
Every block's camera amplitude at 0.05 Hz over the die (the warm quarter of the frame), along its session's top-rung phase, against the watts its two arms differ by (each lap's median board power in the first arm's launch minus the second's). Bars: ±1 SE over laps. Dashed: the least-squares line through zero.
The numbers
sessionblockboard step, WSEcamera along the top rung's phase, mKSE
session 1, 256 minionsnull: ones vs pi-0.0440.006-3.315.0
session 1, 256 minionsmiddle rung, lq_h8+1.4960.009+44.714.4
session 1, 256 minionstop rung, lq_h23+5.4430.008+192.913.2
session 1, 256 minionstop rung again+5.4570.011+177.414.5
session 2, 192 minionsnull: ones vs pi-0.0330.006-13.38.4
session 2, 192 minionsmiddle rung, lq_h8+1.1090.006+36.33.8
session 2, 192 minionstop rung, lq_h23+4.0200.014+118.511.7
session 2, 192 minionstop rung again+4.0380.012+103.622.1

The middle rung, eight flipping bits instead of 23, added 1.50 W and moved the camera 49 ± 10 mK: 0.24 of the top rung's amplitude where its power was 0.27 of the top rung's. The top rung run again at the end of the session read 179 ± 9 mK. Session 2, the same run on 192 cores, put 4.02 W on the board and read 119 ± 13 mK, 30 mK per watt switched against session 1's 36. Three quarters of the cores drew three quarters of the watts for the same price per flipped bit: 152 and 152 fJ on 192 cores against 154 and 154 on 256. The camera's gain fell through the hour as the board and the camera warmed: 59, 53, 48 and 42 mK per watt for the four top-rung blocks in order, the lag growing from 87° to 109°. Each session's middle rung is read against its own top rungs, before and after it.

One cycle, averaged

top rung, lq_h23middle rung, lq_h8null: ones vs pi
-15-10-50505101520seconds into the 20 s cycle (the rung runs in the first half)board power, W from its mean
The board's power over the 20 s cycle, every analysed lap of session 1 averaged, its own mean taken off. The rung runs in the shaded first half, the zero in the second; the sharp dips are the ~1 s idle tails between launches, the same in both halves, so they sit at 0.1 Hz, not 0.05.
The numbers
block0.25 s2.25 s4.25 s6.25 s8.25 s10.25 s12.25 s14.25 s16.25 s18.25 s
top rung, lq_h23-10.67+4.67+4.74+4.92+3.82-11.39-0.60-0.65-0.55-0.92
middle rung, lq_h8-9.81+2.39+2.48+2.53+2.60-9.97+0.91+0.83+0.93+0.90
null: ones vs pi-9.26+1.61+1.65+1.59+1.63-9.06+1.63+1.66+1.71+1.21
top rung, lq_h23middle rung, lq_h8null: ones vs pi
-400-200020005101520seconds into the 20 s cycle (the rung runs in the first half)back of the board, mK
The back of the board over the same cycle, over the die (reduce_hm.py's bridged frames with a 20 s running mean taken off: a picture of the shape, while every number comes from the registered fit). The rung's half climbs, the zero's half falls; the idle tails add the same quick dip to both.
The numbers
block0.25 s2.25 s4.25 s6.25 s8.25 s10.25 s12.25 s14.25 s16.25 s18.25 s
top rung, lq_h23-140.8-268.6-148.3+90.2+238.0+273.3+51.6-1.9-32.0-41.1
middle rung, lq_h8-39.4-154.3-77.7+15.6+115.1+129.5-38.6-9.2+24.0+60.9
null: ones vs pi+53.6-58.9-48.8+5.2+52.0+70.9-35.9-48.2-33.4+35.0

Where it shows

Each block's amplitude at 0.05 Hz, pixel by pixel, along the top rung's phase, all on one scale. The outline is the warm quarter of the frame under all 32 shires in E62, the region the numbers are read from. The top rung's map reads 194 mK there and 143 mK over the whole frame: the board spreads the heat wider than the camera's view.

Top rung: the board warms over the die
Top rung, lq_h23 against lq_h0
Middle rung: the same place, a quarter as warm
Middle rung, lq_h8 against lq_h0
Null: nothing
Null, ones against pi
Colour key: blue below zero, red above, in millikelvin

Lap by lap

null: ones vs pimiddle rung, lq_h8top rung, lq_h23top rung again
-400-2000200-400-2000200in phase with the switching, mKa quarter cycle later, mK
Each analysed lap of session 1 as a point: its amplitude at 0.05 Hz over the die, in phase with the switching (right) and a quarter cycle later (up). The rungs' laps cluster away from zero, along one direction (the heat lags the switch by about a quarter cycle); the null's sit around zero.
The numbers
blocklapsin phase, mKquarter cycle later, mKamplitude, mKphase, degrees
null: ones vs pi18+24.7+4.825.211
middle rung, lq_h818+48.0+32.658.034
top rung, lq_h2321+13.7+179.6180.186
top rung again15-39.8+156.4161.3104

Board, not camera

Three checks say the signal is heat on the board and not the camera. The map carries the capacitor field's pattern: the shiny terminations under-report, as they did when E62 warmed the whole die (the fine detail of the two maps correlates 0.91), and a camera artefact would not know where the capacitors are. The focal plane's own thermistor shows nothing at 0.05 Hz (p 0.36) and does not follow the board (correlation 0.06). The header field the decoder calls the focal-plane temperature turned out to be the scene's mean: it ran about 5 °C above the board's frame mean all session and followed it (correlation 0.58), so it saw the signal too, 0.25 K for the top rung. And the null, the same cores switching between operands of equal watts, reads 2 ± 15 mK.

The shutter, planned around

The camera's automatic shutter fired 6.3 times a minute during the top rung, and every time it reset the offset of every pixel (it fired about seven times a minute with the card idle, too). So the registered fit never bridges a step: it gives each stretch between two shutter events its own free offset and reads the 0.05 Hz signal only from the variation inside the stretches, with a slow spline for the camera's drift. The events fell at no preferred phase of the cycle (Rayleigh p 0.997). Read plainly off the bridged frames, the top rung gives the same 193 mK with twice the error, ± 18. And bridging can fail outright: in session 2 one step was bridged about 5 K wrong in the middle of the middle rung's block, and the plain lock-in reads 127 ± 119 mK there, where the registered fit, which never bridges, reads 36 ± 3.

The registered tests

Decision rule, frozen before the runSession 1, 256 coresSession 2, 192 cores
1. The camera sees the top rung (p < 0.001, warming that lags the power)PASSPASS
2. The top rung holds 800 MHz (95% of its launches clean)FAILPASS
3. The null is flatPASSPASS
4. The middle rung scales with its wattsPASSPASS
5. The top rung repeatsPASSPASS

800 MHz, and a one-second dip

The top rung on 256 cores held the die at 56.5 °C, at most 57.3, well under the governor's 65 °C step, and 98.8% of its samples after each launch's ramp read 800 MHz. But in 8 of 360 launches over both sessions the clock fell to 600 MHz for about a second, anywhere from 1.5 to 8.4 s into a launch, at every load, the null's included. That broke rule 2's 95% bar in session 1 (39 of 42 launches clean), and amendment A1 repeated the run on 192 cores as the rule said to; there the top rung held (41 of 42 launches clean). Every dip has the same shape, the clock straight to its boot point and back up through 700 MHz, like the governor's reset for an idle card and its climb at the start of a launch; it is not heat and not the power limit, and the heater's own launches ran on through it. The camera numbers include it, and so does the measured power they are divided by.

How it ran

aifoundry2 as it is, the camera's settings untouched, so the public live view kept its look. E60's own operand files, checked byte for byte on the card first; the Horace kernel on 8 cores in each of the 32 shires, since the full card would heat past the governor's step within minutes of switching. One 8.5 s launch per 10 s phase, so every on-window was under 9.5 s and the arms switched on a fixed 20 s grid. Four blocks per session: the top rung (7 min analysed after 3 min of warm-up), the null (6 min), the middle rung (6 min) and the top rung again (5 min). Code, pre-registration and amendments: tools/claims-v3/hlc; data: docs/reports/data/2026-10-23-e63-camera-hamming-ladder. Before it: what one flipped bit costs (E60) and heat follows the work (E62).