inference/research

11 — Interconnect decision table: when is tensor parallel worth it over a given fabric?

What this document is for. Multi-GPU tensor-parallel inference: the per-layer all-reduce and the batch at which it matters derives one number — the batch at which the tensor-parallel all-reduce stops being free:

B* = P_layer · BW_link / (2 · d · BW_hbm)

B* is the crossover batch. Below it, the all-reduce costs less than the weight read it competes with, and tensor parallelism is essentially free. Above it, communication dominates and every layer boundary is paid for in fabric time. That record computes B* for two points on NVLink 4 — 3,318 on a full 450 GB/s per-GPU domain versus 184 on a single 25 GB/s link — an 18× spread on identical silicon. That 18× is the argument for NVSwitch, stated as arithmetic.

This document extends that to every fabric in the slice, on the corrected interconnect records. It is the connective-tissue document: every accelerator attaches to memory on one tier and to its peers on another, and the ratio between those two tiers is what decides TP degree.


1. Why B* and not a throughput benchmark

Three properties make B* decision-useful in a way a measured tok/s is not.

It is a property of the fabric, not the model. The model enters only through P_layer/d, roughly the feed-forward expansion. Llama-2-7B has P_layer/d = 49,408; a 70B-class model has 104,448 — within 2.1×, because d doubles with the model. A 70B model does not have a materially worse TP problem than a 7B. This is the opposite of the received wisdom that bigger models are harder to tensor-parallel.

It is linear in batch while its competitor is constant. The all-reduce payload is 4·B·d bytes per rank per layer, linear in B. The weight read it competes with is 2·P_layer bytes, independent of B. TP therefore gets monotonically worse as you batch more — exactly the regime continuous batching pushes you into. A fabric that is fine at batch 32 degrades at batch 256 with no change in hardware.

It is analytically exact given the two bandwidths. No measurement to interpret, so it can be recomputed for any part, fabric and geometry, and it moves only when a bandwidth record changes. That is why it survived this audit better than any other number in the slice.


2. Inputs, all cited

The fabric side, BW_link — per-GPU, per direction. Every value is a per-direction rate from a record whose bandwidth_basis states that convention:

record per direction derivation held in the record
NVIDIA NVLink Switch 5 900 GB/s 1,800 GB/s bidirectional per GPU halved; 18 × 50
NVIDIA NVLink-C2C (second generation) 900 GB/s 1.8 TB/s bidirectional coherent CPU–GPU, halved
NVIDIA NVLink Switch 4 / NVSwitch 3 (Hopper, H100/H200 - contested generation number) 450 GB/s 900 GB/s bidirectional per GPU halved; 18 × 25
AMD Infinity Fabric link (CDNA 4 / MI350 class) 537.6 GB/s 7 links × 76.8, CDNA 4
Compute Express Link 4.0 472 GB/s x16 at 128 GT/s PAM4, 236B/256B framing
AMD Infinity Fabric link (4th generation) 448 GB/s 7 links × 64, CDNA 3
NVIDIA NVLink Switch 2 300 GB/s 600 GB/s bidirectional per GPU halved
NVSwitch 1 (Volta, DGX-2 / HGX-2) 150 GB/s 300 GB/s bidirectional per GPU halved
NVIDIA NVLink 2.0 150 GB/s 300 GB/s bidirectional per GPU, 6 × 25
NVLink 1 (Pascal, Tesla P100) 80 GB/s 160 GB/s bidirectional per GPU, 4 × 20
PCI Express 6.0 236 GB/s x16, 64 GT/s PAM4
AWS NeuronLink (Neuron chip-to-chip scale-up) 192 GB/s published flat, no direction given
Cambricon MLU-Link (chiplet / multi-chip scale-up) 200 GB/s published per chip, no direction given
Moore Threads MTLink (MTT S4000 card-to-card fabric) 120 GB/s 240 GB/s, direction reading flagged in record
InfiniBand XDR (Quantum-2) 100 GB/s/port, 25/lane 4 lanes at 200 Gb/s
Huawei UB Link 2.0 (Ascend 950DT scale-up / unified addressing) 392 (8-NPU), 840 (16-NPU) 784 / 1.68 TB/s bidirectional halved
PCI Express 5.0 / Compute Express Link 2.0 63 GB/s x16, 32 GT/s NRZ
AMD Infinity Fabric link (4th generation) single link 64 GB/s CDNA 3 per direction
Huawei HCCS (Hierarchical Chip-to-Chip Scale) ~90 GB/s/part contested, secondary source only
PCI Express 4.0 31.5 GB/s x16, 16 GT/s NRZ
NVIDIA NVLink 3.0 / NVIDIA NVLink 4.0 single link 25 GB/s 50 GB/s bidirectional per link halved
UALink 200G 1.0 25 GB/s/lane 200 Gb/s per lane
Google Cloud TPU Inter-Chip Interconnect (ICI) 200 (v5e), 400 (v6e) 400 / 800 GBps bidirectional halved

The memory side, BW_hbm, per accelerator record — shown in the table, because using each fabric on its own native part is the comparison that matters.

The model side. Llama-2-7B geometry from Multi-GPU tensor-parallel inference: the per-layer all-reduce and the batch at which it matters: d = 4,096, intermediate 11,008, P_layer = 202,375,168. The 70B column uses d = 8,192, P_layer = 855,638,016.

Excluded, and why. MetaX MetaXLink (multi-GPU interconnect) and Biren BLink die-to-die and external I/O (BR100) have no sourced per-direction rate — both are nulls with the failed search documented in their bandwidth_basis — so no B* is computed. Ultra Ethernet (UEC) and Ethernet scale-out baseline and RoCE (RDMA over Converged Ethernet) are nulls by design: neither has a link rate of its own, inheriting port rates from Ethernet. UFI (Ultra Express Fabric) has no published specification. Cerebras on-wafer fabric and wafer-to-wafer mesh and Groq LPU chip-to-chip network publish aggregates in units this field cannot hold (Pb/s on-wafer; on-chip SRAM only), so they have no per-link rate either. Inventing a B* for any of these would be the fabrication this repo's contract forbids.


3. The table

Each row pairs a fabric with the part it actually ships on, so the ratio is realistic.

Fabric / configuration Part (BW_hbm GB/s) BW/dir B* (7B) B* (70B)
Huawei UB Link, 16-NPU full mesh 950DT (500) 840 41,503 87,736
Huawei UB Link, 8-NPU server 950DT (500) 392 19,368 40,944
Cambricon MLU-Link MLU370 X8 (614) 200 8,042 17,000
NVLink-C2C coherent H100 SXM (3,350) 900 6,637 14,030
TPU v6e ICI, 4 ports TPU v6e (1,638) 400 6,033 12,753
TPU v5e ICI, 4 ports TPU v5e (819) 200 6,033 12,753
AWS NeuronLink Inferentia2 (820) 192 5,784 12,228
NVSwitch 1 domain V100 SXM2 (900) 150 4,117 8,704
NVLink 2 aggregate per GPU V100 SXM2 (900) 150 4,117 8,704
Moore Threads MTLink MTT S4000 (768) 120 3,860 8,160
NVSwitch 2 / NVSwitch 3 domain A100 SXM4 (2,039) 300 3,635 7,684
CXL 4.0 x16 H100 SXM (3,350) 472 3,481 7,358
NVSwitch 4 domain H100 SXM (3,350) 450 3,318 7,015
NVLink 5 / NVSwitch 5 domain B200 (8,000) 900 2,779 5,875
NVLink 1 aggregate per GPU V100 SXM2 (900) 80 2,196 4,642
Tenstorrent QSFP-DD port Wormhole n150 (288) 25 2,144 4,533
MI300X Infinity Fabric domain, 7×64 MI300X (5,300) 448 2,088 4,414
PCIe 6.0 x16 host attach H100 SXM (3,350) 236 1,740 3,679
CXL 3.x x16 H100 SXM (3,350) 236 1,740 3,679
MI350 Infinity Fabric domain, 7×76.8 MI355X (8,000) 537.6 1,660 3,509
Huawei HCCS (~90/part, contested) Ascend 910B (1,400) 90 1,588 3,357
InfiniBand XDR, one port A100 SXM4 (2,039) 100 1,212 2,561
PCIe 5.0 x16 host attach H100 SXM (3,350) 63 465 982
CXL 2.0 x16 H100 SXM (3,350) 63 465 982
AMD xGMI MI250X (3,200) 50 386 816
NVLink 3, one link A100 SXM4 (2,039) 25 303 640
InfiniBand XDR, one lane A100 SXM4 (2,039) 25 303 640
MI300X single IF link MI300X (5,300) 64 298 631
MI350 single IF link MI355X (8,000) 76.8 237 501
PCIe 4.0 x16 host attach H100 SXM (3,350) 31.5 232 491
NVLink 4, one link H100 SXM (3,350) 25 184 390
UALink 200G, one lane H100 SXM (3,350) 25 184 390

The spread is 226× — from 184 on a single NVLink 4 link to 41,503 on Huawei's 16-NPU mesh — on the same model geometry, from fabrics in the same repo.


4. Four things the table says that the folklore gets wrong

Tensor parallelism is not expensive on a fabric-rich part. On an NVSwitch 4 domain B* is 3,318 (7B) and 7,015 (70B); on NVLink-C2C it is 6,637 and 14,030. All far beyond any real serving batch. The folklore that "TP is expensive and should be minimised" is folklore about PCIe, over-generalised.

The dominant multiplier is the fabric, not the model. Going 7B → 70B raises B* by 2.1×. Going from one NVLink 4 link to a full NVSwitch 4 domain raises it 18×, and the full range of the table is 226×. Fabric beats model by two orders of magnitude.

AMD has more fabric per GPU than NVIDIA; NVIDIA has a much better fabric-to-memory ratio. An 8-way MI355X node has 537.6 GB/s per direction of scale-up against an 8-way H100 node's 450 — 1.19× more — and needs no switch silicon, while NVIDIA reaches the same 8-way shape only by adding NVSwitch. Yet B* on MI355X (1,660) is half B* on H100 (3,318), because MI355X also has 8 TB/s of HBM against 3.35 TB/s. Since decode is memory-bound at low batch, it is the fabric-to-memory ratio that sets the crossover. Per-GPU fabric bandwidth is the wrong axis to shop on. The per-direction ratios: Ascend 950DT 0.78, MTT S4000 0.16, A100 0.15, H100 0.13, MI355X 0.067. AMD's advantage on one axis and disadvantage on the other is the single most misread comparison in this domain.

Switch silicon buys topology, not bandwidth, and topology is worth a lot. NVSwitch 1 delivers exactly the 300 GB/s bidirectional per GPU the direct-attached V100 link already had while raising the domain from a partial mesh to 16 non-blocking GPUs — and the table shows it scoring identically to direct-attached NVLink 2 (4,117) because B* cannot see topology. NVIDIA reports up to 1.5× higher throughput for Llama 3.1 70B on H200 with NVSwitch versus point-to-point (NVIDIA NVLink Switch 4) — the same effect as raising BW_link, obtained without raising it. This is the table's main blind spot, and it is worth stating plainly: B* is a bandwidth calculation, so it cannot distinguish a non-blocking fabric from a partial mesh at equal per-GPU bandwidth. On a partial mesh an all-reduce routing over a 2-hop path pays 2× the per-hop cost on that pair, and the weakest link sets collective time for the whole group. Read the NVSwitch rows as a floor on achievable performance, not a ceiling.


5. The practical rule

Use tensor parallelism over a fabric when your serving batch stays below B*. Operationally: B* > 1,000 — TP is free, use it freely. 300 < B* < 1,000 — fine at latency-serving batch, degrades under continuous batching. B* < 300 — TP is already costing you at moderate batch; prefer pipeline parallelism.

  • B* > 1,000 (22 rows). TP is free across the entire realistic serving range. Huawei UB Link, Cambricon MLU-Link, NVLink-C2C, TPU ICI, NeuronLink, NVSwitch 1–5, CXL 4.0, MTLink, PCIe 6.0 x16, both AMD Infinity Fabric domains, HCCS (contested), InfiniBand XDR per port. There is no batch at which you should avoid TP for bandwidth reasons. Choose TP degree to fit the model and fill the machine, not to protect the fabric.

  • 300 < B* < 1,000 (5 rows). PCIe 5.0 x16 and CXL 2.0 (465), AMD xGMI (386), single NVLink 3 link and single InfiniBand lane (303). Fine at batch 1–64; the collective becomes the dominant cost somewhere in the low hundreds. If you run continuous batching at batch in the hundreds, do not put a TP boundary on this fabric.

  • B* < 300 (5 rows). Single MI350 IF link (237), PCIe 4.0 x16 (232), single NVLink 4 link (184), single UALink lane (184), single MI300X IF link (298). Use TP only as far as capacity forces, and prefer pipeline parallelism, which needs point-to-point transfers at stage boundaries rather than a collective at every layer.

The rule is a function of the fabric; the model enters only through P_layer/d.

Where the advice inverts

Inter-node is never a TP fabric. The best inter-node figure here is InfiniBand XDR at 100 GB/s per direction per port — 4.5× below NVLink 4 per GPU. Pipeline or expert parallelism across nodes; tensor parallel inside.

CXL is a memory tier, not a TP fabric, despite its bandwidth. CXL 4.0 at 472 GB/s per direction is above NVLink 4's 450 — and it is still the wrong tool for collectives, because the obstacle is architectural rather than bandwidth: CXL's coherence model is CPU-memory-centric and it has no in-network reduction, so collectives pay full latency with no SHARP equivalent. Its correct use is pooled KV cache and weight offload for large-batch decode, where bandwidth is amortised across many concurrent requests rather than paid per token. Note also that Compute Express Link 4.0's corrected rate means CXL is no longer "4× below a real fabric" as that record previously claimed — it is at parity on raw rate and is kept off this table's TP tier by architecture alone.

Vendor fabrics with no published rate cannot be evaluated at all. MetaX MetaXLink (multi-GPU interconnect) is the worked example: the accelerator record lists an interconnect, the only source in the repo is a secondary aggregator saying "multi-GPU interconnect" and nothing more, and therefore no B* exists. Absence of a number is itself a procurement-risk finding.


6. What this audit changed, and what is still open

Every B* above was recomputed on corrected records. Four error classes were found; all four moved B* values:

Error class Records Effect
Gb/s read as GB/s UALink 200G 1.0, InfiniBand XDR (Quantum-2) 8× overstatement; XDR port read as 800 GB/s/dir instead of 100
PAM4 2-bits/symbol ignored PCI Express 6.0 242 → 236 GB/s/dir
Per-direction halved as if an aggregate Compute Express Link 2.0, Compute Express Link 3.x, Compute Express Link 4.0 up to 4× understatement; CXL 4.0 121 → 472
Aggregate stated with no direction AMD Infinity Fabric link (4th generation) MI300X's 128 GB/s resolved as bidirectional → 64 per direction

The PCIe/CXL family had been audited three times and was still wrong in the same direction. The cause is now pinned: PCI-SIG quotes bandwidth per lane per direction, while NVIDIA and AMD quote bidirectional aggregates — opposite conventions. Each affected record's bandwidth_basis now states which it uses. Two records moved up — NVIDIA NVLink 3.0 off Wikipedia to the A100 datasheet, and the AMD record off contested to verified once the CDNA 4 white paper stated the convention outright ("76.8 GB/s in each direction" against a "153.6 GB/s peak total aggregate"). NVSwitch 3 (Hopper, H100/H200 - contested generation number) was added as contested on a pure naming disagreement: NVIDIA's developer blog calls the Hopper switch third-generation while NVIDIA's own spec table labels it "NVLink 4 Switch". The bandwidth is identical either way; only the name is in dispute.

Still open, honestly. Every NVLink 5/6 and NVSwitch 5 figure is NVIDIA's own and marked preliminary. NVIDIA NVLink 6.0 remains contested between NVIDIA's 3,000 GB/s per GPU over 36 links and a secondary 3,600 GB/s. Huawei HCCS (Hierarchical Chip-to-Chip Scale) is still contested on a secondary source with no Huawei datasheet in existence. Huawei UB Link and Moore Threads MTLink figures are vendor-theoretical and unmeasured by any third party here. And no B* in this document has been validated against a measured collective time — every one is analytic. The highest-value missing record is a third-party measurement of TP all-reduce time versus batch on at least one slow fabric, because that would convert the bottom five rows from arithmetic into evidence.