A controlled microbenchmark that measures the energy of each transformer operator in isolation — swept over sequence length, precision, device (CPU / iGPU / NPU), and core type — to find which operators waste energy and where they should run.
Where the OSWorld study measured whole-task energy, this one turns the knobs one at a time. Every synthetic op uses Holo3-35B-A3B's real shapes (hidden 2048, GQA 16:2, head_dim 256, 256-expert MoE, expert-FFN 512); it is an fp16/int8 stand-in for the deployed Q4_K, run entirely through OpenVINO so the three devices are directly comparable. Energy is measured with Intel RAPL via a reps-slope amortization that cancels fixed overhead.
Plotting every operator by arithmetic intensity vs energy-per-FLOP reproduces a roofline in the energy domain. Compute-bound prefill GEMMs sit near the floor; memory-bound decode (GEMV, M=1) and elementwise norms cost 100–1000× more energy per FLOP because the cores burn power stalled on DRAM, not computing.
At fp16, the iGPU is the most energy-efficient device for the compute-bound projections and FFNs, the CPU the worst. But memory-bound norms don't just narrow the gap — they invert it: on RMSNorm the iGPU (~2080 pJ/FLOP) is actually worse than the CPU (~1430), so memory-bound work has no home on the accelerators. This is the per-operator placement map.
Quantizing to int8 (NNCF FakeQuantize, verified to actually execute an int8 kernel) cuts CPU energy sharply via AVX-VNNI — but on the Xe3 iGPU it increases energy: the fp16 matrix engine beats the int8 DP4a path for these shapes.
| device | fp16 | int8 | int8/fp16 |
|---|---|---|---|
| CPU | 91.4 | 50.0 | 0.55× |
| GPU | 11.3 | 18.3 | 1.62× |
| NPU | 18.2 | 14.8 | 0.82× |
The aggregate hides a sign flip. On the CPU the int8 win is matmul-specific: gemm and FFN fall to ≈0.31× (a ~3.3× win), but attention int8 slightly regresses (≈1.09×) — its softmax has no int8 kernel to accelerate. On the iGPU the loss holds for matmul and attention, yet conv int8 wins (≈0.73×). The per-device ratios above use a matched gemm/ffn/attention/conv basket (moe_routing's int8 falls back — router = softmax + top-k, no int8 kernel); the per-family accelerator points each rest on a single measurement, so treat the iGPU/NPU precision detail as indicative rather than definitive.
Pinning the same op to Cougar Cove P-cores vs Darkmont E-cores (via taskset) shows the
E-cores are more energy-efficient per FLOP — lower voltage/frequency wins on energy even at equal
or better aggregate throughput. Actionable: memory-bound work belongs on E-cores.
Sweeping the already-filled KV length at decode isolates the KV-streaming cost: attention energy per decode step rises with context depth as more cache is streamed from DRAM each token.
More CPU threads is not always lower energy: the fixed uncore/platform tax is amortized as threads increase, but past a point contention and frequency-throttling raise energy again.
Per-operator energy shifts with prompt length: on the iGPU, small prefills underutilize the device (high energy/FLOP) and efficiency improves as sequences lengthen; attention's O(n²) work bends differently from the linear projections.
The RAPL decomposition shows the mechanism: on the CPU the energy is in core (compute +
stall); on the iGPU it moves to uncore; the dram device draws little in every
case — the movement cost is billed to the engines that wait on it, not the DIMMs.
Instrument. Intel RAPL powercap sysfs (psys/package/core/uncore/dram) — the only non-root energy source on this box. Each cell is measured at reps {n, 2n, 3n} and a least-squares slope gives the marginal per-op energy, cancelling compile/allocation/idle overhead; idle power is bracketed and subtracted. Steady state is checked from a 20 Hz power trace.
int8 verification. Every int8 accelerator cell is checked to have actually executed an int8
kernel (exec_type on CPU/iGPU; npu_util on the NPU) — silent fp16/CPU fallbacks are
flagged and excluded from the clean aggregates (7 flagged).
Caveats. (1) This is an fp16/int8 OpenVINO proxy for the deployed Q4_K — absolute numbers are
a stand-in, the cross-device/precision comparisons are the result. (2) RAPL dram on this
client SoC is partial/modeled — a lower bound. (3) The CPU governor is powersave (no root
to pin it); warmup + a steady-state gate compensate. (4) LP-E cores excluded (OV SIGFPE). (5) iGPU int8
loss may reflect kernel immaturity.
idle: psys 9.9 W · core 0.7 W · dram 0.6 W | 254 cells · 26.1 min · profile full
operator_energy_findings.json. Companion to the
OSWorld inference-energy profile.