ALITEQ.

Two 3090s or one 5090? The answer isn't the one everyone gives

The dual-3090 build doesn't give you double the bandwidth for chat — and the reason has nothing to do with the cards. What the measurements actually say.

Ravi MalhotraUpdated 2h ago11 min read
Two graphics cards installed in a desktop PC

The advice you'll get in most threads is that two used RTX 3090s beat one RTX 5090 for local LLM work: 48 GB against 32 GB, and roughly double the memory bandwidth on paper. The capacity half of that is true and it matters. The bandwidth half is wrong in the case most people are actually buying for, and it's wrong for a reason that has nothing to do with the cards.

The bandwidth arithmetic everyone starts with

Token generation is memory-bandwidth-bound. Producing one token means reading the whole active weight set out of VRAM once, so throughput tracks bandwidth far more closely than it tracks compute. That's why the back-of-envelope comparison looks so decisive:

What the spec sheets say

RTX 5090

VRAM
32 GB
Memory bandwidth
1,792 GB/s
Board power
575 W

RTX 3090 (×1)

VRAM
24 GB
Memory bandwidth
936 GB/s
Board power
350 W

RTX 3090 (×2)

VRAM
48 GB
Memory bandwidth
1,872 GB/s *
Board power
700 W

Why the second card doesn't make it faster

llama.cpp's default multi-GPU strategy is -sm layer, and its own multi-GPU documentation describes it plainly: each GPU holds a contiguous slice of layers, and the KV cache for a layer lives on the GPU that owns it. That is pipeline parallelism. The docs say it "processes tokens sequentially through the pipeline" and "requires many tokens to scale well".

Read that again with a chat session in mind. You send one prompt. Token one goes through GPU 0's layers, then GPU 1's layers, then comes out. While GPU 0 works, GPU 1 waits. While GPU 1 works, GPU 0 waits. The bandwidth is not summed — it is alternated. Two 3090s in the default configuration give you approximately one 3090's decode latency, with 48 GB of space to put things in.

Two 3090s buy you capacity, not speed. That is a real thing to buy — just not the thing most people think they're buying.

There is a mode that genuinely aggregates bandwidth. -sm tensor splits individual weight tensors across both cards so they read in parallel, and llama.cpp's docs say it "prioritizes fast token generation". It also comes with a list of conditions that undo much of the reason you bought the second card:

It is labelled **EXPERIMENTAL** in the project's own documentation.

It requires flash attention and a **non-quantised** KV cache (f32/f16/bf16) — so the KV-cache memory saving you were counting on is off the table.

It does not support **MoE architectures**. In 2026 that excludes a large share of what people actually want to run.

It is **highly dependent on interconnect speed** — and a consumer dual-GPU build usually has a weak one.

What the measurements actually show

The llama.cpp project maintains a community CUDA scoreboard where contributors submit llama-bench runs on identical models. It's the cleanest apples-to-apples data available, because the model, quantisation and harness are pinned. We don't run our own benchmarks — see our editorial policy — so everything below is somebody else's measurement, named.

Llama-2-7B Q4_0, llama-bench, flash attention on

RTX 5090

Decode (tg128)
300.40 t/s
Prefill (pp512)
16,041 t/s
Submitted by
@totaldev / @RodriMora

RTX 3090

Decode (tg128)
161.89 t/s
Prefill (pp512)
5,560 t/s
Submitted by
@m18coppola

Ratio

Decode (tg128)
1.83×
Prefill (pp512)
2.89×
Submitted by

Two things fall out of that table, and they point in different directions.

Decode is bandwidth, almost exactly. The 5090's memory bandwidth is 1.915× the 3090's (1,792 ÷ 936). The measured decode ratio is 1.83×, or 95.8% of the prediction. That is a striking result: for a 7B model at 4-bit, throughput is almost entirely explained by how fast the card can read memory. It's also a useful check on the model we use across this site — our per-model VRAM and throughput figures are computed from bandwidth on exactly this assumption, and here it lands within 5% of somebody else's independent measurement.

Prefill is compute, and it isn't close. At 2.89×, the 5090 pulls far ahead of what bandwidth alone would suggest, because processing a prompt is a big parallel matrix operation rather than a serial read. If your work is long prompts — RAG over documents, whole-codebase context, anything where you paste a lot in — that gap matters more than the decode number, and it's the strongest single argument for the 5090.

The case for two 3090s, made properly

Everything above is an argument about speed. Capacity is a different axis, and on that axis the dual build wins something the 5090 cannot offer at any speed: 48 GB versus 32 GB is a categorical difference, not a quantitative one.

A 70B model at Q4_K_M needs roughly 40 GB of weights before you add any KV cache. It fits in 48 GB. It does not fit in 32 GB, at any quantisation worth running. If your actual requirement is "run a 70B locally", the 5090 doesn't lose on points — it's disqualified. You can check the arithmetic for any model on our cost-to-run pages, which compute weights, KV cache and overhead separately so you can see which term is the one squeezing you.

There's a second case, and it's the one the pipeline-parallel finding actually favours. llama.cpp's docs say layer split "maximizes batch throughput". The penalty only bites at batch size 1. If you're serving several concurrent users, or batching a job, the pipeline fills up and both cards work at once. A dual-3090 box is a serving machine, not a low-latency chat machine — and if that's what you're building, the folklore is right for reasons other than the ones usually given.

The things that bite after you've bought

Both routes have a software problem in 2026, and they're mirror images of each other.

Pros

  • + 5090: one card, one power connector budget, no PCIe lane puzzle, current-generation driver support.
  • + 5090: 2.89× prefill is transformative for long-prompt work.
  • + 2×3090: 48 GB runs model classes a 32 GB card simply cannot.
  • + 2×3090: genuinely faster when serving concurrent requests, not just bigger.

Cons

  • 3090 is compute capability 8.6, below the 8.9 floor for FP8 W8A8 — locked out of native FP8 and NVFP4, with weight-only W8A16 via Marlin as the fallback. More releases ship FP8-first every month.
  • 5090 is SM120 consumer Blackwell, which vLLM has almost no tuned fused-MoE kernels for. Its own issue tracker reports MoE decode running several times slower than it should.
  • GeForce cards have no CUDA forward-compatibility channel, so 5090 owners can find themselves pinned to older vLLM releases by driver ceilings.
  • Two 3090s at full x16/x16 realistically means HEDT or Threadripper. Most consumer boards give x16 + x4, which changes the total system cost — and can cause worse than slowness.
  • 700 W of GPU before the rest of the system, in a consumer case, with the noise and thermals that implies.

What we can't tell you

Price. We could not obtain current used-3090 street prices or real 5090 retail availability from a source we'd be willing to cite, so this article doesn't contain a price comparison — and you should be a little suspicious of any that does without saying where the numbers came from. Used GPU pricing moves weekly, varies enormously by region, and the figures that circulate in forum posts are usually months stale.

This matters because price could invert the entire recommendation. If used 3090s have fallen far enough in your market, the dual build could cost meaningfully less than one 5090 for 1.5× the VRAM, and that would outweigh a good deal of the software friction above. Check completed sales in your own region, then come back to the decision framework rather than the other way round.

So which one

Verdict

It depends on batch size, and almost nothing else

Decide what you're actually building before you decide what to buy. One person, one conversation, wanting it fast — the 5090 wins, and the pipeline-parallel behaviour means the dual-3090 alternative won't give you the speed you're imagining. Serving several users, or needing a model that simply won't fit in 32 GB — two 3090s, and the capacity is the point rather than the bandwidth.

Best for: If you're unsure which you are: most people asking this question are building a personal assistant, which is batch size 1, which favours the single card.

Quick answers

Does NVLink fix the pipeline-parallel problem on 3090s?
NVLink raises the interconnect bandwidth between the two cards, which helps the tensor-split mode that depends on it. It does not change the fact that the default mode is pipelined. Note also that the 3090 supports NVLink but the 3090 Ti and all 40/50-series cards do not — and we could not verify current bridge availability, so don't build a plan around obtaining one.
Is 32 GB enough for a 70B model?
No, not at any quantisation you'd want to use. A 70B at Q4_K_M is around 40 GB of weights before the KV cache. You'd be pushed to Q2-class quantisation, which usually performs worse than a smaller model at Q4. Our cost-to-run pages show the full quantisation ladder per model so you can see where the cliff is.
Why is prefill so much faster on the 5090 than decode?
They're bound by different things. Prefill processes many tokens at once — a large parallel matrix operation, so it scales with compute. Decode produces one token at a time and must read the whole weight set for each, so it scales with memory bandwidth. The 5090's compute advantage over the 3090 is larger than its bandwidth advantage, so the two numbers diverge.
Will tensor-parallel mode in llama.cpp be fixed?
Probably — it's under active development. But it was broken when we checked on 21 July 2026, and it still excludes MoE models and quantised KV cache by design. Buy for what works today; treat a fix as upside rather than as part of the plan.
What about three or four 3090s?
The same pipeline-parallel reasoning applies, more so: more cards means a longer pipeline and more idle time at batch size 1. The capacity argument keeps scaling, the single-stream speed argument does not. Multi-card builds beyond two also make the PCIe lane and power questions considerably harder.

If you want to check any of this against a specific model rather than the 7B used in the benchmarks above, our cost-to-run pages compute the memory requirement and expected throughput per card from each model's own configuration file, and show the working.

Hardware Editor

Ravi Malhotra

Ravi has been building and taking apart PCs since the single-core days — his idea of a good weekend is a repaste and a spreadsheet full of thermals. He covers GPUs, CPUs and the build decisions that actually move frame rates, and he'd rather hand you a benchmark than a press release.

The Aliteq brief

The tech worth knowing — hardware, AI, gaming, deals. No spam, unsubscribe anytime.

Keep reading