Technical note · interactive

Justifying Dally's Heuristics

In his 2022 Communications of the ACM essay, Bill Dally argues that a model of computation has to price distance. He quotes about fifteen energy and time figures. Each of them follows from six physical constants. This page rebuilds every figure and lets you change the constants.

\(30\,\mathrm{fJ}\)
to move one bit one millimetre on chip
\(2.5\,\mathrm{mm/ns}\)
on-chip signal speed, about \(c/120\)
\(64{,}000\times\)
a DRAM fetch versus the add it feeds
\(354\times\)
a random versus a local memory access

Every figure in the essay rebuilds from six constants

Dally's figures, next to the reconstruction on this page. Thirteen match to the precision he quotes. The add and the sub-array come within \(25\%\) and \(15\%\). The \(230\times\) needs one inferred step.

Figure in the essayDally statesRebuilt hereFit
\(32\)-bit add\(20\,\mathrm{fJ}\), \(150\,\mathrm{ps}\)\(15\,\mathrm{fJ}\), Horowitz scaled to \(5\,\mathrm{nm}\); \(\approx12\) gate delaysclose
Move \(64\) bits \(1\,\mathrm{mm}\)\(1.9\,\mathrm{pJ}\), \(400\,\mathrm{ps}\)\(64\times30\,\mathrm{fJ}\); repeated wire at \(2.5\,\mathrm{mm/ns}\)exact
\(64\) bits corner to corner, \(400\,\mathrm{mm^2}\) chip\(77\,\mathrm{pJ}\), \(16\,\mathrm{ns}\)\(40\,\mathrm{mm}\times1.92\,\mathrm{pJ/mm}=76.8\,\mathrm{pJ}\); \(40\times0.4=16\,\mathrm{ns}\)exact
Going off chip\(320\,\mathrm{pJ}\); \(6\,\mathrm{ns/m}\)\(5\,\mathrm{pJ/bit}\) link; a board trace at \(\approx c/1.8\)exact
\(8\,\mathrm{KB}\) sub-array, \(64\)-bit read\(0.64\,\mathrm{pJ}\), \(300\,\mathrm{ps}\)\(0.61\,\mathrm{pJ}\), \(230\)–\(290\,\mathrm{ps}\) from circuit budgetsclose
\(256\,\mathrm{MB}\) area\(\approx100\,\mathrm{mm^2}\)\(0.021\,\mu\mathrm{m^2}\) cell at \(45\%\) array efficiencyexact
\(256\,\mathrm{MB}\) access\(58\,\mathrm{pJ}\), \(12.3\,\mathrm{ns}\)\(0.64+30\times1.92=58.2\,\mathrm{pJ}\); \(0.3+30\times0.4=12.3\,\mathrm{ns}\)exact
"\(15\,\mathrm{mm}\) each way"\(30\,\mathrm{mm}\) round trip\(1.5L\): the \(87.5\)th percentile from a cornerexact
Core at the centre of \(2\,\mathrm{MB}\)\(1\,\mathrm{mm}\) round trip, \(1.9\,\mathrm{pJ}\), \(400\,\mathrm{ps}\)mean centre-to-point distance \(L/2\) each wayexact
Random access, \(16\,\mathrm{mm}\) chip\(21.3\,\mathrm{mm}\)\(4L/3=21.33\,\mathrm{mm}\)exact
Average random access, \(4\times4\) chips\(680\,\mathrm{pJ}\)\(41+\tfrac{15}{16}(640+41)=679\,\mathrm{pJ}\)exact
Random versus local\(354\times\)\(680/1.92=354\)exact
Local sum, all-in\(230\times\) cheaper\((680+1.04)/(1.92+1.04)=230\)inferred
DRAM fetch of two \(32\)-bit words\(1.3\,\mathrm{nJ}\), \(64{,}000\times\) an add\(64\times20\,\mathrm{pJ}=1.28\,\mathrm{nJ}\); \(\div\,20\,\mathrm{fJ}=64{,}000\)exact
CPU add instruction\(80\,\mathrm{pJ}\); memory "only \(15\times\)"\(1.2\,\mathrm{nJ}\div80\,\mathrm{pJ}=15\)exact
Store or recompute\(640\,\mathrm{pJ}\) vs \(160\,\mathrm{fJ}\)/MAC; \(n\lt4{,}000\); \(16\times\) at \(n=256\)\(640/0.16=4{,}000\); \(640/(256\times0.16)=15.6\)exact

Arithmetic is nearly free; distance is not

Dally's price list on one log scale. Switch the unit to read each cost as the distance a \(64\)-bit word could travel on chip for the same energy, or as a count of \(32\)-bit adds.

Going off chip once costs as much as \(16{,}000\) adds

Show cost as
  • moving data
  • computing on it
Gridlines are factors of \(10\). Wire length is at \(1.92\,\mathrm{pJ}\) per millimetre for a \(64\)-bit word. Source: Dally (2022).

At \(1.92\,\mathrm{pJ}\) per word-millimetre, every cost becomes a distance. A sub-array read is \(0.33\,\mathrm{mm}\) of wire. Going off chip once is \(167\,\mathrm{mm}\), ten chips' width. A DRAM fetch is \(667\,\mathrm{mm}\).

Six constants generate the whole table

Process: six constants

\(c\approx0.2\,\mathrm{fF}/\mu\mathrm{m}\)
wire capacitance
\(r\approx18\,\mathrm{k\Omega/mm}\)
wire resistance
\(V\approx0.75\,\mathrm{V}\)
supply voltage
\(R_0C_0\approx5\,\mathrm{ps}\)
gate time constant
\(D\approx21\,\mathrm{Mb/mm^2}\)
SRAM density
\(e_{io}\approx5\,\mathrm{pJ/bit}\)
one chip crossing

Transport: what a bit pays on the way

Energy per bit per millimetre

\[ e_w=\alpha\cdot\tfrac12\,c\,(1+f_{\text{rep}})\,V^2\approx30\,\mathrm{fJ} \]

Signal speed

\[ v=\frac{1}{2.5\,p\,\sqrt{R_0C_0\,rc}}\approx2.5\,\mathrm{mm/ns} \]

Endpoint: the \(8\,\mathrm{KB}\) sub-array at the end of the wire

\[ E_0=0.64\,\mathrm{pJ},\qquad t_0=0.3\,\mathrm{ns} \]

Any access: distance, then energy and time

\[ \begin{aligned} d&=2\kappa\sqrt{N/D}\\ E&=E_0+b\,e_w\,d\\ t&=t_0+d/v \end{aligned} \]

Off chip, add \(b\,e_{io}\) for each chip crossing.

Here \(\alpha\) is the fraction of bits that toggle, \(f_{\text{rep}}\) the extra capacitance of repeaters, \(p\) the pipelining overhead of a real fabric, \(b\) the word width and \(\kappa\) the distance convention. Dally names no process; these values fit a \(5\)-nm-class chip at about \(0.75\,\mathrm{V}\).

The hardware the numbers imply
ParameterValueEvidence
Process\(5\)-nm class (TSMC N5), 2020–22\(20\,\mathrm{fJ}\) add; SRAM density; Dally's group built a \(5\)-nm accelerator in 2022
Supply\(V\approx0.75\,\mathrm{V}\)\(30\,\mathrm{fJ}\) at \(c=0.2\,\mathrm{fF}/\mu\mathrm{m}\) with random data
SRAM cellsix-transistor, \(0.021\,\mu\mathrm{m^2}\)\(256\,\mathrm{MB}\) in \(100\,\mathrm{mm^2}\) at \(45\%\) array efficiency
Sub-array\(8\,\mathrm{KB}=256\times256\) cellsstated
Chip\(16\times16\,\mathrm{mm}\); \(256\) cores with \(2\,\mathrm{MB}\) eachstated
System\(4\times4\) chips on a boardstated
Gate delayFO4 \(\approx12\,\mathrm{ps}\), \(R_0C_0\approx5\,\mathrm{ps}\)\(300\,\mathrm{ps}\approx25\) gate delays

Energy

A bit-millimetre costs \(30\,\mathrm{fJ}\) because a wire is a capacitor

Moving a bit one millimetre moves \(2{,}000\) gates' worth of charge

One millimetre of wire holds the charge of \(2{,}000\) transistor gates

  • one gate, \(C\approx0.1\,\mathrm{fF}\): \(\approx470\) electrons
  • one millimetre of wire, \(C=200\,\mathrm{fF}\): \(\approx940{,}000\) electrons
Each dot is one gate's charge at \(0.75\,\mathrm{V}\); the block is \(80\times25=2{,}000\) dots.

A logic \(1\) on a wire is charge held at the supply voltage, \(Q=CV\). A \(5\)-nm gate holds a few hundred electrons; a millimetre of wire holds nearly a million. That ratio, not transistor speed, is why communication dominates.

Charging \(C\) to \(V\) draws \(CV^2\) from the supply. Half is stored, half is burned in the resistance on the way in, and the stored half is burned on discharge. Each transition costs \(\tfrac12CV^2\) whatever the resistance, so lowering \(R\) makes a wire faster, never cheaper. Random data toggles a wire on half its bits, \(\alpha\approx\tfrac12\):

\[ E_{\text{bit}}=\alpha\cdot\tfrac12\,c\,L\,V^2 \]

Capacitance per unit length is a shape factor, so it doesn't scale

About four-fifths of a wire's capacitance couples sideways, to its neighbours

\(W\) \(H\) \(S\) \(T\)
  • \(C_{\text{lat}}\), to the neighbours on the same layer
  • \(C_{\text{vert}}\), to the layers above and below

Each face of a wire is a small parallel-plate capacitor, and every term is a ratio of lengths. Shrink a wire and its neighbours together and \(c\) stays put. Low-k dielectrics offset taller, closer-packed wires, so \(c\) has sat near \(0.2\,\mathrm{fF}/\mu\mathrm{m}\) since the 1990s.

Derivation
\[ c\approx\varepsilon\left[\,2\,\frac{H}{S}+2\,\frac{W}{T}\,\right]+\text{fringing} \]

Take \(H=2W\), \(S=W\), \(T=H\) and a low-k oxide with \(k=3.0\), so \(\varepsilon=2.66\times10^{-11}\,\mathrm{F/m}\). The lateral term is \(0.106\,\mathrm{fF}/\mu\mathrm{m}\), the vertical term \(0.027\,\mathrm{fF}/\mu\mathrm{m}\), and fringing adds \(30\)–\(50\%\): \(c\approx0.17\)–\(0.20\,\mathrm{fF}/\mu\mathrm{m}\). The same wire in \(\mathrm{SiO_2}\) (\(k=3.9\)) gives \(0.22\)–\(0.26\,\mathrm{fF}/\mu\mathrm{m}\). Progress on k stalled near \(2.5\)–\(3.0\) around 2010, when more porous dielectrics stopped surviving polishing and packaging.

Dally's \(30\,\mathrm{fJ}\) is that wire at \(\tfrac34\,\mathrm{V}\) carrying random data

\[ e_w=\alpha\cdot\tfrac12\,c\,(1+f_{\text{rep}})\,V^2 \]

The same physics allows \(25\) to \(130\,\mathrm{fJ}\); the convention decides

Load
\(0.75\,\mathrm{V}\)
\(0.50\)
\(7\%\)
\(0.20\,\mathrm{fF}/\mu\mathrm{m}\)
Transport energy \(e_w\)
\(30.1\,\mathrm{fJ/(bit\cdot mm)}\)
One \(64\)-bit word, one millimetre
\(1.93\,\mathrm{pJ}\)
Versus Dally's \(30\,\mathrm{fJ}\)
\(1.0\times\)

Published conventions, in \(\mathrm{fJ/(bit\cdot mm)}\):

  • your setting
All at \(c=0.2\,\mathrm{fF}/\mu\mathrm{m}\) and \(0.75\,\mathrm{V}\) unless the row says otherwise.

The \(0.1\,\mathrm{pJ}\) per bit-millimetre rule of the 2010s is the same wire at \(1\,\mathrm{V}\) with every bit toggling. Dally's \(30\,\mathrm{fJ}\) sits between a bare wire (\(28\)) and one with a third more load from repeaters (\(37\)). A model that quotes energy per bit-millimetre should state its \(V\), \(\alpha\) and repeater load.

Speed

Signals crawl at \(c/120\) because on-chip wires are RC lines

Resistance per unit length grows with every shrink

\[ r=\frac{\rho_{\text{eff}}}{W\,H} \]
Wire class\(W\times H\)\(\rho_{\text{eff}}\)\(r\)Carries
Intermediate\(35\times70\,\mathrm{nm}\)\(4.5\,\mu\Omega\,\mathrm{cm}\)\(18\,\mathrm{k\Omega/mm}\)buses
Global\(150\times300\,\mathrm{nm}\)\(2.5\,\mu\Omega\,\mathrm{cm}\)\(0.6\,\mathrm{k\Omega/mm}\)clocks, power, a few signals

Both dimensions shrink, so \(r\) grows as the square of the shrink. Below copper's \(39\,\mathrm{nm}\) electron mean free path, its resistivity climbs too. Buses ride the intermediate layers, where \(rc\approx3.6\,\mathrm{ns/mm^2}\).

Unrepeated delay grows as \(L^2\); repeated delay grows as \(L\)

At \(15\,\mathrm{mm}\), repeaters cut \(308\,\mathrm{ns}\) to \(5\,\mathrm{ns}\)

  • intermediate, repeated
  • intermediate, unrepeated
  • global, repeated
  • global, unrepeated
  • Dally, \(0.4\,\mathrm{ns/mm}\)
\(15.0\,\mathrm{mm}\)
Intermediate, unrepeated
\(308\,\mathrm{ns}\)
Intermediate, repeated
\(5.03\,\mathrm{ns}\)
Global, unrepeated
\(10.3\,\mathrm{ns}\)
Global, repeated
\(0.918\,\mathrm{ns}\)
Dally's figure
\(6.00\,\mathrm{ns}\)
\(R_0C_0=5\,\mathrm{ps}\); \(rc=3.6\,\mathrm{ns/mm^2}\) intermediate, \(0.12\,\mathrm{ns/mm^2}\) global.

A distributed RC line charges by diffusion, and its resistance and capacitance both grow with length. Its \(50\%\) delay is \(t\approx0.38\,rcL^2\); a lumped RC would take \(0.69\,RC\). Unrepeated, \(15\,\mathrm{mm}\) of intermediate metal takes about a thousand clock cycles.

Repeaters trade wire delay for gate delay, and the optimum is a square root

\[ T(k)=\underbrace{0.4\,\frac{rcL^2}{k}}_{\text{wire}}+\underbrace{0.7\,R_0C_0\,k}_{\text{repeaters}}+\underbrace{1.4\sqrt{R_0C_0\,rc}\;L}_{\text{driving the wire}} \]

A \(15\,\mathrm{mm}\) bus is fastest with a repeater every \(49\,\mu\mathrm{m}\)

Wire
  • total \(T(k)\)
  • wire term
  • repeater term
  • optimum
\(16\)
Delay with \(k\) repeaters
Segment length
Best \(k\)
Best segment
Best delay
Best delay per millimetre

Choosing both the number and the size of the repeaters (Bakoglu, 1990) gives

\[ T_{\min}\approx2.5\sqrt{R_0C_0\,rc}\;L,\qquad v=\frac{1}{2.5\sqrt{R_0C_0\,rc}} \]

Delay becomes linear in length, at a velocity set by the geometric mean of the gate and wire time constants: \(0.34\,\mathrm{ns/mm}\) here. Pipelining and arbitration add about \(20\%\), which gives Dally's \(0.4\,\mathrm{ns/mm}\). Each process node shrinks \(R_0C_0\) and grows \(rc\) by similar factors, so the product barely moves. Repeated wires have stayed within \(2\times\) of \(0.3\,\mathrm{ns/mm}\) since the \(130\)-nm node, while gates got \(10\times\) faster.

On-chip signals move \(70\times\) slower than light in the same glass

Board traces run near light speed; on-chip wires don't

  • RC wires on chip
  • light, and transmission lines

Light in the chip's dielectric would cover \(173\,\mathrm{mm/ns}\), but on-chip wires are too resistive to act as transmission lines. Board traces do act as transmission lines, so Dally prices the board in energy and adds only \(6\,\mathrm{ns}\) per metre.

Memory

Memory is two-dimensional, so access cost grows as \(\sqrt{N}\)

Where the requester sits sets the distance

Dally's \(15\,\mathrm{mm}\) covers \(87.5\%\) of accesses from a corner of a \(10\,\mathrm{mm}\) block

Requester
Mean one-way distance, theory
\(\tfrac12L=5\,\mathrm{mm}\)
Mean of \(4{,}000\) sampled accesses
Accesses within \(15\,\mathrm{mm}\) one way

Paths follow the wiring grid: across, then down. The drawing shows \(40\) of the sampled accesses.

Requester to a random targetMean one-wayRound trip
Centre of the square\(L/2\)\(L\)
Another random point\(2L/3\)\(4L/3\)
Midpoint of an edge\(3L/4\)\(3L/2\)
Corner\(L\)\(2L\)
Corner to the far corner\(2L\)\(4L\)

For uniform targets \(\mathbb{E}\lvert x-y\rvert=L/3\) along each axis, and Manhattan distance adds the two axes. A core at the centre of its \(1\,\mathrm{mm}\) tile travels \(L/2\) each way: Dally's \(1\,\mathrm{mm}\) round trip. Two random points on a \(16\,\mathrm{mm}\) chip are \(2L/3\) apart: his \(21.3\,\mathrm{mm}\).

His "\(15\,\mathrm{mm}\) each way" for the \(10\,\mathrm{mm}\) block that holds \(256\,\mathrm{MB}\) is no mean. It is \(1.5L\), the \(87.5\)th percentile of distance from a corner: a deliberately conservative figure. Latency budgets want a high percentile; energy budgets want the mean.

Every \(4\times\) in capacity costs \(2\times\) in energy and time

\[ E(N)\approx E_0+b\,e_w\,2\kappa\sqrt{N/D},\qquad t(N)\approx t_0+\frac{2\kappa\sqrt{N/D}}{v} \]

From \(8\,\mathrm{KB}\) to \(256\,\mathrm{MB}\), capacity grows \(32{,}768\times\) and wire cost \(181\times\)

Plot
  • random point to random point, \(\kappa=\tfrac23\)
  • Dally's conservative \(\kappa=1.5\)
  • endpoint only, \(E_0\) or \(t_0\)
  • Dally's figures
\(256\,\mathrm{MB}\)
Side of the block, \(L\)
Energy, \(\kappa=\tfrac23\)
Energy, \(\kappa=1.5\)
Latency, \(\kappa=\tfrac23\)
Latency, \(\kappa=1.5\)
Endpoint share of energy
\(D=21.4\,\mathrm{Mb/mm^2}\), \(e_w=30\,\mathrm{fJ}\), \(v=2.5\,\mathrm{mm/ns}\), \(E_0=0.64\,\mathrm{pJ}\), \(t_0=0.3\,\mathrm{ns}\), \(b=64\). Each of Dally's points uses its own distance convention.

Small memories pay mostly for the endpoint, large ones for the wire. Energy crosses over near \(160\,\mathrm{KB}\), the size of an L2 cache; latency crosses near \(0.8\,\mathrm{MB}\). That is why cache hierarchies are geometric. A level \(4\times\) larger is \(2\times\) slower and \(2\times\) dearer to reach, so each level belongs where the reuse it captures pays for that factor of two.

The \(256\,\mathrm{MB}\) access under each distance convention
One wayConventionEnergyLatency
\(6.7\,\mathrm{mm}\) one wayrandom point to random point\(26\,\mathrm{pJ}\)\(5.6\,\mathrm{ns}\)
\(10\,\mathrm{mm}\) one waycorner to a random point, mean\(39\,\mathrm{pJ}\)\(8.3\,\mathrm{ns}\)
\(15\,\mathrm{mm}\) one wayDally: \(87.5\)th percentile from a corner\(58\,\mathrm{pJ}\)\(12.3\,\mathrm{ns}\)
\(20\,\mathrm{mm}\) one waycorner to the far corner\(77\,\mathrm{pJ}\)\(16.3\,\mathrm{ns}\)

A sub-array's \(0.64\,\mathrm{pJ}\) is short wires, not bit cells

Bitlines and sense amplifiers take \(72\%\) of a sub-array read

Energy Time
StageEnergyTime
Decoder and wordline driver\(30\,\mathrm{fJ}\)\(70\,\mathrm{ps}\)
Wordline across \(256\) columns\(17\,\mathrm{fJ}\)\(40\,\mathrm{ps}\)
Bitlines, \(256\) pairs\(250\,\mathrm{fJ}\)\(60\,\mathrm{ps}\)
\(64\) sense amplifiers\(190\,\mathrm{fJ}\)\(40\,\mathrm{ps}\)
Column mux and output\(120\,\mathrm{fJ}\)\(50\,\mathrm{ps}\)
Total, versus Dally's\(607\) of \(640\,\mathrm{fJ}\)\(260\) of \(300\,\mathrm{ps}\)
Each bar spans Dally's figure; the empty end is the part the circuit budget doesn't account for.

An \(8\,\mathrm{KB}\) sub-array is \(256\) wordlines by \(256\) columns of six-transistor cells, about \(60\times45\,\mu\mathrm{m}\) with its periphery. A \(64\)-bit read fires one wordline across all \(256\) columns and senses \(64\) of them through a \(4{:}1\) multiplexer.

"The time and energy needed to read or write a single bit cell is negligible."Dally (2022)

The cell itself contributes under \(1\,\mathrm{fJ}\). The \(300\,\mathrm{ps}\) is about \(25\) gate delays: decode, three short RC lines and one small-signal sense. It is the fixed \(t_0\) that a pure distance model lacks.

How each stage is estimated

Wordline: \(54\,\mu\mathrm{m}\) of wire (\(11\,\mathrm{fF}\)) plus \(512\) pass-gate gates (\(20\,\mathrm{fF}\)), charged and discharged: \(31\,\mathrm{fF}\times(0.75\,\mathrm{V})^2\approx17\,\mathrm{fJ}\). Its distributed RC adds about \(20\,\mathrm{ps}\) to the driver.

Bitlines: each of the \(256\) pairs is about \(13\,\mathrm{fF}\), and one side swings \(100\,\mathrm{mV}\) before it is restored: \(C\,V\,\Delta V\approx1\,\mathrm{fJ}\) per pair. At a cell current of \(40\,\mu\mathrm{A}\), the signal takes \(C\Delta V/I\approx33\,\mathrm{ps}\) to develop, plus margin for offset.

The \(4{:}1\) overfetch is a small version of the waste in a DRAM's \(8\)-kilobit rows: a \(64\)-bit read charges \(256\) bitlines.

\(256\,\mathrm{MB}\) fits in \(100\,\mathrm{mm^2}\) at \(45\%\) array efficiency

Bit cells fill under half of a large SRAM

  • bit cells, \(45\%\)
  • sense amplifiers, decoders, drivers, redundancy, ECC, power and routing, \(55\%\)
\[ D=\frac{0.45}{0.021\,\mu\mathrm{m^2}}\approx21.4\,\mathrm{Mb/mm^2},\qquad \frac{2^{31}\ \text{bits}}{21.4\,\mathrm{Mb/mm^2}}\approx100\,\mathrm{mm^2} \]

Density enters only as \(\sqrt{D}\): doubling it shrinks every distance by \(\sqrt2\). SRAM cells have barely shrunk since N5, from \(0.021\,\mu\mathrm{m^2}\) at N5 and N3E to about \(0.0175\,\mu\mathrm{m^2}\) at N2. The way to bring a large memory closer now is to stack it.

Off chip

Leaving the chip costs \(5\,\mathrm{pJ}\) per bit, each way

Dally's off-chip figures sit inside the range of real links

  • Dally's figures
  • typical ranges

Dally's \(320\,\mathrm{pJ}\) to go off chip is \(5\,\mathrm{pJ/bit}\) for a \(64\)-bit word. A remote access crosses twice, request out and data back, hence the \(640\,\mathrm{pJ}\) in his summation example. His DRAM figures, \(1.3\,\mathrm{nJ}\) per \(64\) bits and \(640\,\mathrm{pJ}\) to write and re-read a \(16\)-bit activation, are both \(20\,\mathrm{pJ}\) per bit per direction.

Above a few \(\mathrm{Gb/s}\) a board trace is a transmission line, terminated in about \(50\,\Omega\), so it draws current whether or not bits toggle. Pads, ESD structures and package capacitance add more, as do equalizers, clock recovery and serializers at both ends.

A \(5\,\mathrm{pJ/bit}\) link budget

Termination: a \(450\,\mathrm{mV}\) swing into \(50\,\Omega\) is \(9\,\mathrm{mA}\) per lane, about \(8\,\mathrm{mW}\) at a \(0.9\,\mathrm{V}\) I/O supply, or \(0.3\)–\(0.8\,\mathrm{pJ/bit}\) at \(10\)–\(25\,\mathrm{Gb/s}\). Transmit and receive circuits cost \(1\)–\(3\,\mathrm{pJ/bit}\) per end at \(5\,\mathrm{nm}\). Protocol, CRC, retry buffers and the on-die path to the PHY add \(0.2\)–\(0.3\,\mathrm{pJ/bit}\).

Arithmetic

An add costs \(20\,\mathrm{fJ}\); overhead and distance cost the rest

The \(64{,}000\times\) is a DRAM fetch over an add; a CPU shrinks it to \(15\times\)

A CPU's overhead hides \(4{,}000\times\) of the gap

Instruction over add
\(80\,\mathrm{pJ}/20\,\mathrm{fJ}=4{,}000\times\)
DRAM over instruction
\(1.2\,\mathrm{nJ}/80\,\mathrm{pJ}=15\times\)
DRAM over add
\(1.28\,\mathrm{nJ}/20\,\mathrm{fJ}=64{,}000\times\)

Horowitz's \(45\)-nm table puts a \(32\)-bit add at \(0.1\,\mathrm{pJ}\). Going to \(5\,\mathrm{nm}\), the switched capacitance falls about \(4.5\times\) and \(V^2\) falls \(1.44\times\), which leaves \(15\,\mathrm{fJ}\), close to Dally's \(20\,\mathrm{fJ}\). Fetching the two operands from DRAM at \(20\,\mathrm{pJ/bit}\) costs \(1.28\,\mathrm{nJ}\), exactly \(64{,}000\) adds.

A CPU wraps the add in instruction fetch, decode, register reads and pipeline control, \(80\,\mathrm{pJ}\) in all. Against that, a \(1.2\,\mathrm{nJ}\) memory access looks only \(15\times\) dearer. A domain-specific accelerator strips the overhead and exposes the whole gap.

Recompute beats store when a layer has fewer than \(4{,}000\) inputs

At \(n=256\), recomputing an activation is \(16\times\) cheaper than storing it

Store to
\(256\)
\(\mathrm{pJ}\)
Recompute: \(n\) MACs at \(0.16\,\mathrm{pJ}\)
\(41\,\mathrm{pJ}\)
Store, then read back
\(640\,\mathrm{pJ}\)
Verdict
Recompute, \(15.6\times\) cheaper
Break-even layer width
\(n^{*}=4{,}000\)
Per activation. DRAM: Dally's \(640\,\mathrm{pJ}\) for a \(16\)-bit write and read. HBM: \(3\,\mathrm{pJ/bit}\), \(96\,\mathrm{pJ}\).

Backpropagation needs each layer's activations. Storing one to DRAM and reading it back costs \(640\,\mathrm{pJ}\). Recomputing it is a matrix-vector product, \(n\) multiply-accumulates at \(160\,\mathrm{fJ}\) each. Recompute wins while \(n\cdot0.16\,\mathrm{pJ}\lt640\,\mathrm{pJ}\), that is for \(n\lt4{,}000\). With HBM the threshold falls to \(n\approx600\), the same arithmetic that drives FlashAttention-style recomputation.

Placing data at random makes a sum \(230\times\) dearer

Per word summed: \(2.96\,\mathrm{pJ}\) locally, \(680\,\mathrm{pJ}\) at random

Local Random
  • wire on the home chip
  • \(\tfrac{15}{16}\) of words cross chips: \(600\,\mathrm{pJ}\)
  • wire on the far chip
  • sub-array read and add, \(1.04\,\mathrm{pJ}\)
Linear scale, full width \(700\,\mathrm{pJ}\). The local bar is under half a percent of it.

Dally's example sums a table spread over \(4\times4\) chips of \(256\) cores, each core holding \(256\mathrm{K}\) words in its own \(2\,\mathrm{MB}\). Summing locally costs \(1.92\,\mathrm{pJ}\) of wire per word. At random, every word travels \(21.3\,\mathrm{mm}\) on its home chip, and the \(15/16\) that live elsewhere add \(640\,\mathrm{pJ}\) and another \(21.3\,\mathrm{mm}\):

\[ E_{\text{random}}=40.96+\tfrac{15}{16}\,(640+40.96)\approx679\,\mathrm{pJ},\qquad \frac{680}{1.92}\approx354 \]

Dally's all-in \(230\times\) follows if both sides also pay the per-word work they share: the \(0.64\,\mathrm{pJ}\) sub-array read and about \(0.4\,\mathrm{pJ}\) for the add, \((680+1.04)/(1.92+1.04)\approx230\). He doesn't show this step; it is the simplest one that reproduces his number.

Calculator

Recompute every figure for another process

"Dally" pins the transport constants to his. Drag any constant to derive them from the process instead; every row updates.

Constants
\(0.20\,\mathrm{fF}/\mu\mathrm{m}\)
\(18\,\mathrm{k\Omega/mm}\)
\(0.75\,\mathrm{V}\)
\(5\,\mathrm{ps}\)
\(21.4\,\mathrm{Mb/mm^2}\)
\(5\,\mathrm{pJ/bit}\)
\(0.50\)
\(10\%\)
\(1.20\times\)
QuantityThis modelDally
Transport energy \(e_w\)\(30\,\mathrm{fJ/(bit\cdot mm)}\)
Signal speed \(v\)\(2.5\,\mathrm{mm/ns}\)
Repeater spacingnot stated
\(64\) bits over \(1\,\mathrm{mm}\)\(1.9\,\mathrm{pJ}\), \(400\,\mathrm{ps}\)
\(64\) bits corner to corner, \(40\,\mathrm{mm}\)\(77\,\mathrm{pJ}\), \(16\,\mathrm{ns}\)
\(256\,\mathrm{MB}\) access, \(1.5L\) each way\(58\,\mathrm{pJ}\), \(12.3\,\mathrm{ns}\)
Random access on a \(16\,\mathrm{mm}\) chip\(21.3\,\mathrm{mm}\)
Average random access, \(4\times4\) chips\(680\,\mathrm{pJ}\)
Random over local\(354\times\)
Local sum, all-in\(230\times\)
The same model in Python
import math

# Process constants: 5-nm class, about 2022
c    = 0.2e-12      # F/mm, wire capacitance (0.2 fF/um)
r    = 18e3         # ohm/mm, intermediate-metal resistance
V    = 0.75         # V, supply
R0C0 = 5e-12        # s, inverter time constant
D    = 21.4e6       # bit/mm^2, effective SRAM density
e_io = 5e-12        # J/bit for each chip crossing
alpha, f_rep, pipe = 0.5, 0.1, 1.2   # activity, repeater load, fabric overhead
E0, t0 = 0.64e-12, 0.3e-9            # 64-bit sub-array access (Dally)

e_w  = alpha * 0.5 * c * (1 + f_rep) * V**2         # J per bit-mm
v    = 1 / (2.5 * math.sqrt(R0C0 * r * c)) / pipe    # mm per s
Lseg = math.sqrt(0.7 * R0C0 / (0.4 * r * c))         # mm between repeaters

def move(d_mm, b=64):
    """Energy (J) and time (s) to move b bits d_mm millimetres."""
    return b * e_w * d_mm, d_mm / v

def sram(n_bits, kappa, b=64):
    """Access to a square SRAM of n_bits; kappa sets the one-way distance."""
    side = math.sqrt(n_bits / D)
    E, t = move(2 * kappa * side, b)
    return E0 + E, t0 + t

E1, t1 = move(1.0)                         # core at the centre of its 1-mm tile
E256, t256 = sram(2**31, kappa=1.5)        # 256 MB, Dally's 15 mm each way
Er, tr = move(4 * 16 / 3)                  # random point to random point, 16-mm chip
avg = Er + 15/16 * (2 * 64 * e_io + Er)    # 4x4 chips: 15/16 of accesses leave the chip

print(f"e_w = {e_w*1e15:.1f} fJ/bit-mm, v = {v*1e-9:.2f} mm/ns, L_seg = {Lseg*1e3:.0f} um")
print(f"1 mm   : {E1*1e12:5.2f} pJ {t1*1e9:5.2f} ns   (Dally 1.9 pJ, 0.4 ns)")
print(f"256 MB : {E256*1e12:5.1f} pJ {t256*1e9:5.1f} ns   (Dally 58 pJ, 12.3 ns)")
print(f"random : {avg*1e12:5.0f} pJ, {avg/E1:.0f}x local   (Dally 680 pJ, 354x)")

Output:

e_w = 30.9 fJ/bit-mm, v = 2.48 mm/ns, L_seg = 49 um
1 mm   :  1.98 pJ  0.40 ns   (Dally 1.9 pJ, 0.4 ns)
256 MB :  60.1 pJ  12.4 ns   (Dally 58 pJ, 12.3 ns)
random :   682 pJ, 344x local   (Dally 680 pJ, 354x)

Where the heuristics bend

Activity and swing

\(30\,\mathrm{fJ}\) assumes random data at full swing. Low-swing signalling cuts it \(2\)–\(4\times\); crosstalk can double it.

Queueing

\(0.4\,\mathrm{ns/mm}\) is unloaded transport. Routers add cycles, and under load, queues that can exceed the wire time.

Which metal

Upper layers are \(3\)–\(5\times\) faster per millimetre, but scarce. Velocity is a budget decision.

Which statistic

Mean, percentile and worst case differ by up to \(3\times\) for one memory. Say which one you charge.

The third dimension

Hybrid bonding replaces \(\sqrt{N/D}\) with a vertical hop of tens of micrometres. It is the one lever that moves the constant by \(10\times\).

Off-chip variance

Links span \(0.3\)–\(20\,\mathrm{pJ/bit}\). On a package, Dally's \(640\,\mathrm{pJ}\) remote access would cost \(40\)–\(130\,\mathrm{pJ}\).

Locality is the point

The \(\sqrt{N}\) rule prices uniformly random access. Reuse replaces \(N\) with the working set that actually moves, which is Dally's case for a model of location.

Reconciling with the Sutro grid model

The Sutro Group's grid model charges \(1\,\mathrm{fJ}\) per byte per \(\mu\mathrm{m}\), which is \(125\,\mathrm{fJ/(bit\cdot mm)}\): the same wire at \(\alpha=1\) and \(0.8\,\mathrm{V}\), \(4.2\times\) Dally's convention. Its signal speed, \(c/160=0.53\,\mathrm{ns/mm}\), is Dally's wire with more pipelining overhead counted. It charges mean distances, while Dally's \(256\,\mathrm{MB}\) figure is a high percentile. Neither is wrong; each should state what it charges.

Sources and revision notes

Part of Interlude show: Memory Wall research, the summary of the research behind the show.

  1. W. J. Dally, "On the Model of Computation: Point: We Must Extend Our Model of Computation to Account for Cost and Location," Communications of the ACM 65(9), Sept. 2022. doi:10.1145/3548783. Every figure attributed to Dally.
  2. U. Vishkin, "On the Model of Computation: Counterpoint," same issue. doi:10.1145/3548784.
  3. H. B. Bakoglu, Circuits, Interconnections, and Packaging for VLSI, Addison-Wesley, 1990. Optimal repeater insertion.
  4. W. C. Elmore, Journal of Applied Physics 19, 1948; T. Sakurai, IEEE Transactions on Electron Devices 40(1), 1993. RC delay.
  5. R. Ho, K. W. Mai, M. A. Horowitz, "The Future of Wires," Proceedings of the IEEE 89(4), 2001.
  6. M. Horowitz, "Computing's Energy Problem (and What We Can Do About It)," ISSCC 2014. The \(45\)-nm energy table.
  7. W. J. Dally and J. W. Poulton, Digital Systems Engineering, Cambridge University Press, 1998. Off-chip signalling.
  8. J. W. Poulton et al., ground-referenced single-ended serial link, IEEE Journal of Solid-State Circuits 54(1), 2019.
  9. B. Keller et al., deep-learning inference accelerator in \(5\,\mathrm{nm}\), VLSI Symposium 2022.
  10. TSMC SRAM disclosures for N5, N3E and N2: a \(0.021\,\mu\mathrm{m^2}\) high-density cell, about \(38\,\mathrm{Mb/mm^2}\) macro density at N2.
  11. Sutro Group, simplified-dally-model, the grid model compared above.

Figures not attributed to a source are estimates from the formulas on this page. They are meant to reproduce Dally's numbers to the precision he quotes, not to describe a specific product.

Revised from a September 2026 note, checked line by line against the essay. Three readings changed. The \(64{,}000\times\) is a DRAM fetch over a \(20\,\mathrm{fJ}\) add, not an off-chip access over a \(10\,\mathrm{fJ}\) add. The \(15\times\) is CPU instruction overhead, not an older process. The \(680\,\mathrm{pJ}\) now follows Dally's own split between on-chip and off-chip accesses.