Worked examples — Infinity Fabric - mesh interconnects
This is the "worked examples" deep-dive for the parent topic on Infinity Fabric & mesh interconnects. The parent showed you what the fabric is and gave two starter examples. Here we hunt down every case class — every shape of question the exam or a real design review can throw at you — and work each one from zero.
Before any number appears, remember the three quantities we keep using, in plain words:
Two clock names appear again and again below; meet them now so no symbol is ever a surprise:
One more term used repeatedly in the bandwidth examples:
The scenario matrix
Every question about this topic falls into one of these cells. Our job is to leave no cell untouched.
| Cell | What makes it different | Covered by |
|---|---|---|
| A. Bandwidth — one direction | frequency × width, single lane | Ex 1 |
| B. Bandwidth — bidirectional / ratio | double it, then check the FCLK:MCLK ratio | Ex 2 |
| C. Routing — generic hop count | Manhattan distance on a mesh | Ex 3 |
| D. Routing — degenerate (same row / same node) | zero in one axis, or zero total | Ex 4 |
| E. Ring vs mesh — the crossover | when does mesh actually win? sign of the difference | Ex 5 |
| F. Bisection bandwidth — the "cut" | count links crossing a slice | Ex 6 |
| G. Chiplet latency — the multi-hop word problem | mix ns and cycles across clock domains | Ex 7 |
| H. Coherency traffic — O(N) vs O(k) | limiting/scaling behaviour of probes | Ex 8 |
| I. Exam twist — mismatched ratio bottleneck | fabric slower than memory: who wins? | Ex 9 |
We will hit A→I in order.
Cell A — Bandwidth, one direction
Forecast: guess the order of magnitude first — tens of GB/s? Hundreds? Write your guess down.
- Convert frequency to ticks per second. cycles/s. Why this step? Bandwidth is bytes per second, so we need seconds in the denominator. The GHz already gives us "per second."
- Multiply width by ticks. Each tick moves bytes, so Why this step? Units cancel: cycle over cycle disappears, leaving bytes/second — exactly what "bandwidth" means.
- Name it. . Why this step? is by definition one gigabyte per second (GB/s), so we rewrite the number in the unit everyone quotes in datasheets — same value, human-readable name.
Verify: Units: ✓. Sanity: 32 bytes is half a 64-byte cache line, so almost 2 billion half-lines move per second — comfortably in the "tens of GB/s" range.
Cell B — Bidirectional & the clock ratio
Forecast: does bidirectional simply double? And is the fabric geared or against this memory?
- Double it. A link has a separate wire for each direction, so Why this step? Send and receive run at the same time on independent lanes — they don't share, so we add them.
- Find MCLK from the DDR label. "DDR4-3600" means (mega-transfers/s). DDR is double data rate — two transfers per clock — so the memory clock is . Why this step? The ratio compares clock to clock, so we must strip the "double" out of the transfer rate to recover the actual MCLK.
- State the true ratio. and , so the gearing is — not . They tick in lockstep. Why this step? Naming the ratio correctly is the whole point of Cell B; a fabric moves one packet per memory tick, the ideal AMD tuning target.
- Compute the memory bandwidth (one direction). This platform has two channels (dual-channel — see the Memory channel definition above), each wide, at transfers/s: Why this step? We must compare fabric to memory in the same direction to see if the fabric can keep up with a read stream — and the channel count is read off the platform, not assumed.
Verify: ✓; so ratio ✓. Fabric-per-direction () memory-per-direction (), so a read burst drains into the fabric without piling up. Cell I below shows what happens when this ratio is broken.
Cell C — Generic routing hop count
Forecast: is it the straight-line distance, or the grid-walk distance?
Figure 1 — XY routing on a 4×4 mesh. Alt: a grid of 16 dots; a teal source dot at (1,0) and a plum destination at (3,3) joined by an orange arrowed path that goes east 2 steps then north 3 steps, turning exactly once. This picture makes the point that the packet walks the grid, never diagonally.

- Define the distance we need. On a grid you cannot fly diagonally; you walk along links. The right measure is the Manhattan distance:
- X first (the "X" of XY routing). From to : hops east. Why X first? Dimension-ordered routing fixes an order (X, then Y) so packets never chase each other in a loop — this prevents deadlock (parent note, virtual channels).
- Then Y. From to : hops north.
- Add. Total hops. Path: — look at the orange path in Figure 1: it turns exactly once.
Verify: Manhattan ✓. A single turn confirms XY routing (X leg, then Y leg).
Cell D — Degenerate routing (zeros)
Before the degenerate cases, let us build the average-hop formula from scratch so this page stands on its own.
Picture picking two nodes at random on one axis of a line that is dots long. On average the two picks land about a third of the way apart — the expected gap is . (Intuition: if you drop two points uniformly on a stick of length , the average distance between them is — the points are more often near each other than at opposite ends.) A mesh has an X axis and a Y axis, and the two gaps simply add:
Keep in mind: this is an average over all pairs, not the distance of any single specific route. That distinction is exactly what the degenerate cases below expose.
Forecast: what does "average hops " give here, and is it wrong?
- Case (a): same X column. hops (purely Y). Why call it out? The averaged formula would predict — but that is an average over all pairs, not this specific pair. For one aligned pair the X term is exactly zero. Never apply the average to a single deterministic route.
- Case (b): source = destination. hops. The message never leaves the local port. Why this matters: zero hops means zero router-to-router latency; the only cost is the local agent handoff. Degenerate but real (a core hitting its own L2 slice).
Verify: (a) ✓; (b) ✓. Both are the maximum possible hop count , and — inside valid bounds.
Cell E — Ring vs mesh crossover (sign of the win)
First, the two symbols this example lives on — do not read past them until they are clear:
Forecast: at tiny (say 4 cores), which is lower? Guess before solving.
Figure 2 — hop-count crossover. Alt: two curves on a warm-paper plot; a teal straight line N/4 (ring) and an orange curve 2·sqrt(N)/3 (mesh) crossing near N=7.1, marked with a plum dashed line; left of the crossing the ring is lower, right of it the mesh is lower. The picture shows the exact core count where mesh starts to win.

- Set up the inequality. Mesh wins when its hop count is smaller: Why this step? is the same for both, so it cancels — the winner depends purely on hop count.
- Solve for . Multiply both sides by 12: , i.e. , so , giving . Why algebra and not just plugging numbers? We want the crossover, not one data point — solving the inequality gives the boundary directly.
- Round to a real mesh. The smallest perfect square with is ().
- Check the sign at the boundary. At : ring , mesh hops → ring wins (mesh loses at tiny core counts!). At : ring , mesh → mesh wins. The sign of flips between them.
Verify: : mesh , ring → mesh smaller ✓. : mesh ring ✓ (ring wins, matching the parent's "~10–12 core" real-world crossover once router overhead is added). See also 7.2.4-Network-Topologies for the general topology trade-off.
Cell F — Bisection bandwidth (the cut)
Forecast: which topology has more wires spanning the middle?
Figure 3 — the bisecting cut. Alt: two side-by-side diagrams; left, a 16-node ring with a teal dashed horizontal cut severing exactly 2 links; right, a 4×4 mesh with a teal dashed vertical cut severing 4 links (one column). The mesh clearly has twice as many links crossing. This is why mesh bisection bandwidth scales with √N.

- Define bisection bandwidth. Cut the network into two equal halves; bisection bandwidth is the total bandwidth of every link severed by that cut. Why this metric? If the two halves talk to each other at full tilt, this is the ceiling on the traffic between them — the real "how much can flow across" number.
- Ring cut. A ring is a single loop; slicing it in half severs exactly 2 links (the two arcs). See the teal dashed cut in Figure 3.
- Mesh cut. A mesh cut down the middle severs one column of vertical links: 4 links (). Why ? The cut runs across a full row/column of the grid, and a grid has links spanning it.
- To bandwidth. Ring ; mesh → mesh has the bisection bandwidth.
Verify: ratio ✓; ✓; ✓. This is why mesh scales bandwidth with while ring stays flat.
Cell G — Chiplet latency word problem (mixed units)
Forecast: which leg dominates — the on-chip cycles or the die-crossing ns?
- Convert cycles to ns. One cycle at lasts . So cycles . Why convert first? You cannot add cycles and nanoseconds directly — they live in different clock domains. Bring everything to one unit (ns).
- Add the die crossings. for the two fabric hops. Why just add them? Latencies along a single serial path accumulate — the packet does one leg, then the next, so total time is the sum.
- Total. . Why this is the answer? Everything is now in nanoseconds, so the three serial legs add to the end-to-end latency: .
Verify: ✓; total ✓. The of die-crossing dwarfs the on-chip — this is the "chiplet penalty" the parent mentions, and why 6.2.8-NUMA-Architecture matters: distant memory feels farther.
Cell H — Coherency traffic scaling (limiting behaviour)
Forecast: does directory traffic grow with total cores or just with sharers?
- Broadcast: probe everyone. Every write sends a probe to all other cores: messages. At : ; at : . Why ? Broadcast has no knowledge of who has the line, so it must ask all cores except the writer — this is the scaling the parent warns about.
- Directory: probe only sharers. The home L3 slice knows the sharer list, so it sends probes regardless of . At : ; at : . Why constant? Directory tracks sharers explicitly, so traffic is — flat as the chip grows. This is the whole reason mesh CPUs use directories (see 6.3.5-Cache-Coherency-Protocols).
- Ratio at . Broadcast/directory fewer messages with a directory. Why take the ratio? It expresses the saving in a size-free way — "21 times less traffic" is the headline a designer cares about, independent of units.
Verify: : and ✓; directory: and ✓; ratio ✓. Broadcast blows up linearly; directory stays flat — the limiting behaviour that makes 64-core fabrics feasible.
Cell I — Exam twist: broken ratio bottleneck
Forecast: with faster memory, do you get faster real bandwidth — or does something upstream cap you?
- Fabric one-direction bandwidth. . Why one direction? A read stream flows memory→core in a single direction; compare like with like.
- Memory one-direction bandwidth. Given as (two channels, each, ).
- The bottleneck is the minimum. Data must pass through both; the slower stage caps the throughput: Why min and not average? A pipeline runs at the speed of its slowest stage — the fabric is a hard wall the memory bytes must squeeze through.
- The lesson. Faster RAM with a lagging FCLK wastes of memory bandwidth. The fix: raise FCLK (or accept the penalty). Compare with 6.4.3-PCIe-Topology where a slow root link similarly caps device throughput.
Verify: fabric ✓; ✓; wasted ✓. The exam trap: bigger memory number does not mean bigger real bandwidth.
Recall Quick self-test
A mesh, , XY routing — how many hops? ::: hops (Cell D, X-only) Fabric at , bidirectional? ::: (Cell B) Directory probes for sharers on a 64-core chip? ::: , independent of N (Cell H) Ring vs mesh at — which wins on hops? ::: Ring () — mesh loses at tiny N (Cell E) Fabric , memory — effective? ::: (Cell I)