Generating LLM tokens one at a time leaves a GPU's compute 79% idle while its memory bandwidth gasps — CENT deletes the GPU entirely, spreading Llama-scale models across 32 CXL-networked memory devices whose DRAM banks multiply-accumulate in place (99% of transformer arithmetic) with RISC-V-plus-accelerator sidecars for the softmax-shaped remainder, delivering 2.3× the throughput of four A100s at similar power, 2.9× less energy, and 5.2× more tokens per dollar.
The argument in one glance
-
Problem
LLM inference buys FLOPS and needs bytes
Decoding generates one token at a time: every step streams ALL model weights and the growing KV cache through the chip to do matrix-vector multiplies, with almost no data reuse. Measured on 4 A100s running Llama2-70B, that leaves just 21% of GPU compute utilized (BERT and ResNet, by contrast, saturate it). A business model estimate puts ChatGPT-style serving at ~3617 HGX servers and ~$694K per day — for hardware whose selling point, compute throughput, mostly idles.
-
What people did
Batch harder, or move compute into the memory
Batching fuses many users' matrix-vector ops into matrix-matrix ones — but each user's KV cache is unique and huge, so capacity caps the batch (at 32K context, 4 A100s saturate at batch 8–16), and the attention math stays per-user regardless. The architectural fix is Processing-In-Memory: put multiply-accumulate units next to DRAM banks, where aggregate internal bandwidth dwarfs any external interface. Samsung, SK Hynix, and UPMEM have all built such DRAM.
-
Why it fell short
PIM's density tax collides with LLM capacity — so everyone kept the GPU
Near-bank compute is fabricated in the DRAM process and eats capacity: UPMEM DIMMs lose 50–75% density, HBM-PIM ~25%, GDDR6-AiM ~25%. LLMs need capacity most of all. Prior transformer-PIM systems (AttAcc, NeuPIMs) therefore built HYBRIDS — 8 GPUs plus 8 PIM stacks — keeping the most expensive component in the rack to run a prefill stage that is ~2% of end-to-end time. And processing-NEAR-memory alternatives (Samsung's CXL-PNM) put CMOS compute outside the chips, regaining density but surrendering the bandwidth advantage.
-
This paper's idea
A GPU-free rack: CXL-networked PIM with tiny CMOS sidecars
CENT serves LLMs from 32 CXL devices and no GPU. Each device holds 32 GDDR6-PIM channels whose near-bank units do BF16 multiply-accumulates — over 99% of transformer arithmetic — in place, while a small controller-side PNM layer (exponent/reduction accelerators plus RISC-V cores) handles softmax, RMSNorm, and SiLU. CXL 3.0 links the devices with send/receive, broadcast, and gather primitives, supporting tensor-, pipeline-, and hybrid-parallel mappings. Versus 4 A100s at similar average power: 2.3× throughput, 2.9× less energy, 2.5× cheaper 3-year TCO, 5.2× more tokens per dollar.
Why this problem is worth solving
The economics of LLM serving hinge on a mismatch between what
inference needs and what accelerators sell.
arithmetic operations per byte
moved from memory — the ratio that decides whether a workload is
limited by a chip’s FLOPS or by its memory bandwidth. Matrix-matrix
multiplication reuses each loaded value many times (high
intensity); matrix-vector multiplication uses each weight exactly
once (low intensity, memory-bound)
The classic remedy, batching, is blocked by a uniquely LLM-shaped
obstacle: the per-conversation storage of every
past token’s key and value vectors, consulted by attention at each
new token. It grows linearly with context length and is UNIQUE to
each user — so it multiplies with batch size, and modern 128K–1M
token context windows make it enormous
What people did before, and where it broke
PIM — DRAM chips with small compute
units placed beside each bank. Because every bank can feed its unit
simultaneously, aggregate internal bandwidth reaches hundreds of
TB/s, versus single-digit TB/s at any external pin interface. The
catch: the units are fabricated in the DRAM process, which is bad
at logic — they cost die area and thus memory density
- The density tax fights the capacity hunger. Near-bank units cost 25–75% of memory density depending on technology. LLMs are the workload that can least afford it: parameters plus KV caches demand hundreds of gigabytes. A PIM-only box built from a few devices simply cannot hold the model.
- Hybrids keep the cost problem in the rack. AttAcc and NeuPIMs (both covered elsewhere on this site) pair 8 A100-class GPUs with 8 PIM stacks — GPUs for the compute-heavy prefill, PIM for decode. But prefill is ~2% of end-to-end GPU inference time, so the hybrid retains the single most expensive component to accelerate the smallest slice; their 3-year TCO comes out 3.5× and 2.6× above CENT’s.
- Near-memory compute gives back the bandwidth. Processing-near-memory (PNM) — CMOS compute in the controller or buffer device, as in Samsung’s CXL-PNM for GPT — preserves density and area-efficiency but reads memory at ordinary interface speeds, forfeiting exactly the internal-bandwidth advantage that made in-memory computing attractive.
The missing piece was capacity scaling without GPUs — and that is
what Compute Express Link — an open interconnect on
the PCIe physical layer that lets a host attach and pool memory
devices with load/store semantics; CXL 3.0 adds switching, up to
4,096 nodes, and ~8× lower latency than network RDMA
How CENT works
CENT's architecture, from bank to rack
-
GDDR6-PIM channels
Each CXL device carries 16 memory chips = 32 GDDR6-PIM channels (16 GB/device after PIM's density cost). Beside every DRAM bank sits a processing unit with 16 BF16 multiply-accumulate lanes fed straight from the bank I/O — matrix-vector products happen where the weights and KV cache live. Aggregate internal bandwidth across the system: 512 TB/s (the 4-A100 baseline's HBM: 8 TB/s).
-
Near-bank work: >99% of the math new
All GEMV work — QKV projections, attention scores against the K cache, weighted sums over the V cache, output projection, all FFN layers — runs as MAC_ABK (all-bank multiply-accumulate) and element-wise-multiply instructions broadcast across channels. Grouped-query attention is supported by unrolling its narrow GEMMs into GEMVs.
-
PNM sidecar: the awkward 1% new
In the CXL controller (CMOS, area-efficient), each device carries accelerators — 32 exponent processors using Taylor-series hardware, 32 reduction trees, 32 accumulators — plus BOOM RISC-V cores (250 mW each) for square roots, division, and anything future models invent. Together they cover Softmax, RMSNorm, RoPE rotations, and SiLU. A 64 KB Shared Buffer is the PIM↔PNM interchange, seen as 256-bit registers by channels and byte-addressable memory by the cores.
-
A CXL 3.0 network with collective primitives new
A 48-port switch connects 32 devices and the host CPU. On top of CXL transactions, CENT builds send/receive, broadcast, multicast, and gather. Latency ~8× below RDMA; bandwidth far below NVLink — deliberately acceptable, because inter-device traffic is tiny (a 16 KB embedding vector per transformer-block hop).
-
Parallelism mappings new
Pipeline Parallel: each device hosts a few transformer blocks; prompts flow device-to-device, and the pipeline depth IS the batch (32/40/80 concurrent queries for 7B/13B/70B) — the throughput mapping. Tensor Parallel: one block spread across all 32 devices via gather/broadcast — the latency mapping (batch 1). Hybrids trade between them; data parallelism stacks on top as the fleet grows.
-
Host + software
A Xeon host drives the devices through CXL reads/writes; instruction traces per transformer block are verified in a functional simulator; performance modeled in a modified Ramulator2 with GDDR6-PIM timings. The simulator is open source.
The idea
If decoding is a memory workload, build the server out of memory. CENT’s central bet is architectural subtraction. Prior systems treated PIM as an attachment to a GPU; CENT observes that the piece of inference the GPU is uniquely good at — high-intensity prefill GEMMs — is ~2% of end-to-end time, and its own PNM+PIM compute is still ~49% of the GPU baseline’s TFLOPS. So it removes the GPU, its 300 W board power, and its $10,000 price from the design entirely, and lets the density-taxed PIM chips multiply until capacity fits the model — which is exactly what CXL memory expansion is for. The cost structure inverts: memory (priced at 10× commodity DRAM for PIM) becomes the system, and the “accelerator” budget drops to a 19 mm² controller die per device.
Split the transformer by arithmetic frequency, not by layer. The enabling measurement: multiply-accumulates are over 99% of a transformer block’s arithmetic. So CENT provisions lavishly for MACs where bandwidth is free (beside every bank) and handles everything else — exponentials for softmax, roots for RMSNorm, SiLU — in a thin CMOS layer shared per device. This is the anti-UPMEM position: a general-purpose near-bank core would pay density and throughput for generality that 1% of operations need. The RISC-V cores are the escape hatch for model evolution: new activation functions become firmware, not silicon.
Cheap links are enough when the tensors that travel are small. Distributing a model across 32 devices sounds like it demands NVLink, but decoding’s inter-device traffic is embedding vectors — 16 KB per block-to-block hop for Llama2-70B — not weights or caches, which never move. That is why CXL’s modest bandwidth (with ~8× lower latency than RDMA and switching to thousands of nodes) suffices, and why pipeline parallelism doubles as the batching mechanism: with 80 blocks spread over 27 devices, 80 pipeline stages hold 80 in-flight queries, recovering throughput that GPU-style batching gets from GEMM fusion — without the KV-capacity squeeze, because capacity scales with device count.
One token through CENT
Decoding one Llama2-70B token on a pipeline-parallel CENT rack
PP = pipeline parallel (3 transformer blocks per device, 27 of 32 devices used). PU = near-bank processing unit (16 BF16 MAC lanes). PNM = controller-side accelerators + RISC-V cores. Shared Buffer = 64 KB PIM↔PNM interchange. Numbers from the paper's Llama2-70B configuration.
Step 1 of 7
A 16 KB vector arrives over CXL
The token's embedding vector lands in this device's Shared Buffer via a CXL send from the previous pipeline stage. The device holds transformer blocks, say, 30–32: all their weights and this conversation's KV-cache slice sit permanently in its 32 GDDR6-PIM channels — no weight ever crosses a wire.
inter-device traffic per hop: one embedding vector (16 KB) weights + KV cache: resident, never moved
Why it works
- Decoding’s arithmetic is one pass over resident data → moving compute to the banks converts the bottleneck resource from 8 TB/s of external bandwidth to 512 TB/s of internal bandwidth → the memory-bound stage speeds up 2.5× while the compute-bound stage (prefill, 2% of time) barely matters to the total.
- MACs are >99% of transformer arithmetic → specializing near-bank silicon to MACs and exiling rare ops to shared CMOS sidecars minimizes the density tax per unit of useful throughput → more model fits per device than any general-purpose near-bank design, and RISC-V firmware absorbs model evolution.
- Weights and KV caches never leave their banks; only 16 KB embedding vectors travel → interconnect bandwidth demand is tiny → cheap, switchable CXL suffices where NVLink would be overprovisioned, and capacity scales by adding 10,000 GPUs.
- Pipeline stages hold independent queries → batch size equals pipeline depth, decoupled from any single device’s memory → CENT gets GPU-batching’s throughput benefit without the KV-cache capacity squeeze, which is precisely what collapses GPU batches at long context (128 → 8 from 4K to 32K).
- No GPU in the bill of materials → hardware cost drops 2.8× (42,128) and power ~8× per device-vs-GPU → the throughput and efficiency gains compound into 5.2× tokens per dollar.
What it costs
- Prefill is genuinely slower. GPUs beat CENT 2.5× on the compute-intensive prefill stage (CENT has ~49% of their TFLOPS) — CENT’s latency for the prefill portion is 1.4× worse. For workloads dominated by long-prompt understanding rather than generation, the paper itself suggests disaggregation: GPUs for prefill, CENT for decode.
- Simulated, not fabricated. Results come from a Ramulator2-based simulator with synthesized controller RTL, GDDR6-PIM timings from Samsung/SK Hynix parts, and analytical CXL models — no rack exists. Cost claims lean on estimates (PIM at 10× DRAM price, A100 at a conservatively halved $10K, NRE amortized over a projected 3M-unit volume).
- The density tax is paid, just distributed. 32 devices carry 512 GB where the same GDDR6 without PIM would hold more; CXL expansion hides but does not repeal the capacity loss.
- Block granularity quantizes scaling. Throughput plateaus when transformer blocks don’t divide evenly across devices (Llama2-70B’s 80 blocks map cleanly to 40 devices but not 44) — splitting one block across devices costs more communication than it gains.
- BF16 only, inference only. Near-bank PUs do BF16 multiply-accumulate; training, and the GEMM-heavy workloads GPUs excel at, are out of scope. Grouped-query attention — now standard — narrows CENT’s edge (1.2× on 70B vs 2.3× geomean).
- A new software stack. Custom ISA, instruction traces per model, host-driven orchestration — none of the CUDA ecosystem applies.
The evaluation
Llama2 7B/13B/70B, each query 512 prefill + 3584 decode tokens, against 4×A100 80 GB running vLLM at its saturating batch of 128 — system sizes chosen for similar average power. Baselines beyond GPUs: Samsung’s CXL-PNM (near-memory, no in-bank compute) and the GPU-PIM hybrids AttAcc and NeuPIMs on GPT3-175B. Performance comes from a cycle-level Ramulator2 model plus functional verification; power from an activity-based model (measured GDDR6 currents, synthesized RTL); costs from a 3-year TCO model covering hardware, power, and NRE.
Serving Llama-scale LLMs: GPUs vs GPU-PIM hybrids vs CENT
| Property | 4× A100 (vLLM) | GPU-PIM hybrids (AttAcc / NeuPIMs) | CENT (GPU-free) |
|---|---|---|---|
| Hardware philosophy & cost | |||
| Decoding vs prefill throughput | |||
| Latency | Baseline; batch growth trades latency away (SLA violations at large batch/long context) | Not the design target | |
| Power & energy | ~300 W TDP per GPU; throttles below max clock under decoding load | GPU power plus 116 W per HBM-PIM stack | |
| Economics | Rental $5.45/hr; owned $1.76/hr (3-year) |
Check yourself
Check your understanding
1. Batching converts matrix-vector work into matrix-matrix work and is the standard fix for low operational intensity. Predict why it fails to rescue GPU utilization for long-context LLM inference.
2. UPMEM-style PIM puts a general-purpose core beside each bank; CENT puts only BF16 MAC lanes there and pushes everything else to shared controller-side accelerators and RISC-V cores. What justifies this split?
3. GPUs beat CENT by 2.5× on the prefill stage, yet CENT ships without any GPU. Why is that trade defensible — and when does it break?
4. Distributing a 70B model across 32 devices usually calls for NVLink-class bandwidth. Why does CENT get away with CXL — and what does pipeline mapping get for free as a result?
Sources
- arXiv preprint 2502.07578 (v3) — full text used for this explainer
- ACM DL: PIM Is All You Need: A CXL-Enabled GPU-Free System for Large Language Model Inference — ASPLOS 2025
- Open-source CENT simulator