Strip a modern neural network down to its engine and you find one operation doing almost all the work:
matrix multiplication. A layer takes a batch of activations, multiplies them by a matrix
of learned weights, and passes the result on. Training and inference are, to a first approximation, a
blizzard of dense matrix multiplies — billions of multiply-then-add operations, all identical in shape.
When one operation dominates a whole domain, you have the perfect target for a
A general CPU multiplies matrices the slow, expensive way: for every scalar multiply it fetches an instruction, reads the register file, moves data through the cache hierarchy, and writes the result back. The arithmetic is a whisper; the bookkeeping is a roar. In 2015 Google shipped a chip that deleted the roar. The Tensor Processing Unit (TPU) is built around an idea from 1978 — the systolic array — and on dense matrix multiply it beat the GPUs of its day by an order of magnitude in operations per joule.
A systolic array is a grid of tiny, identical cells, each one a multiply-accumulate (MAC) unit: it multiplies two numbers and adds the product to a running total. There is no instruction fetch, no decode, no register file — just arithmetic wired to its neighbours. Data does not sit in a memory waiting to be fetched; it flows through the grid in lock-step with the clock, like blood pulsing through tissue. Each value that enters is reused by every cell it passes, so a single memory read feeds a whole row of multiplies.
The figure shows the weight-stationary dataflow the TPU uses. Preload each cell with one weight and leave it there. Then stream the activations in from the left — each moves one cell to the right every clock tick — while partial sums accumulate downward. Reveal the flows one at a time:
Follow one activation: it enters on the left, gets multiplied by the stationary weight in the first cell,
and the product is added to a partial sum travelling down that column. The same activation then steps
right and is multiplied by the next weight, and so on across the row. One number fetched from
memory,
The killer feature is data reuse. Multiplying two
Google's first TPU put a
Let's make the reuse concrete. Multiply two
The reuse factor comes out to exactly
The name comes from H. T. Kung and Charles Leiserson, who described these arrays in 1978. Systole is the contraction phase of a heartbeat — the pulse that pushes blood rhythmically through your body. Kung saw the same picture in his array: a global clock beats, and on every beat data is pumped one step further through a mesh of little processors, each doing a scrap of work and passing the result along. Nothing waits in a memory to be summoned; everything moves in a coordinated pulse. Four decades later that 1978 idea is the beating heart of every TPU and the tensor cores inside modern GPUs.
The efficiency depends on keeping every cell busy every cycle with a predictable flow. Two things spoil
that. First, sparsity and irregularity: if the matrix is mostly zeros, or the computation
branches, the rigid grid can't skip the wasted work — it multiplies by zero at full power. Second,
utilisation: a giant
The TPU is the textbook domain-specific architecture: it identified the one operation that dominates its
domain, built silicon that does only that, and won on operations per joule by an order of magnitude — at
the cost of doing nothing else. Next we look outward, at the