RTX 4090 vs RTX 3090
MeasuredOn gpt-oss-20b (same quant and runtime family, chat-short), the RTX 4090 decoded at 242.6 tok/s and the RTX 3090 at 207.2 tok/s, each side's fastest matched run for that model.
Signed, community-submitted decode tok/s, prefill, and TTFT for RTX 4090 vs RTX 3090 — every number links to the run it came from.
On Qwen3.8-27B Q4_K_M, llm-speed measured the RTX 4090 about 12% faster than the RTX 3090: 43.41 vs 38.83 tok/s (r_k1hhpa9io2o vs r_w40_vv7f77w; llama.cpp build 11803, 8K context, chat-short, every layer on the GPU), with the same CLI, build, model file and settings on both cards and a gap of 11–12% on all four workloads. The matched-pair count and median below are computed from the current table. Most of those pairs are community-submitted runs on different machines and runtime builds, so they are measured reference points, not a controlled ranking. Overlaps that aren't like-for-like (a different model size, no quant reported, or a request that included a cold model load) are listed separately. Both are 24GB cards. Older Ollama runs from a host whose RTX 4090 reports 48GB of GPU memory are excluded here: a retail RTX 4090 has 24GB, and we can't confirm what that card is. For whether the upgrade is worth buying, read our RTX 3090 vs 4090 buying explanation.
How to read these results
On gpt-oss-20b, the RTX 4090 decoded at 242.6 tok/s and the RTX 3090 at 207.2 tok/s. Across all 16 matched pairs (11 models; a model appears once per quant, runtime and context it was measured at) the RTX 4090 decoded a median 1.17× as fast as the RTX 3090 (measured, chat-short; faster on 16 of 16). Each row in the table is a like-for-like pair: the same model and size, quant, runtime family and configured context on the chat-short workload, using each side's fastest run for that combination (a run measured by llm-speed when one exists). Runs can still differ in host, runtime build and context. These are reference results, not a controlled speed or answer-quality ranking. Inspect both source runs before choosing hardware. 2 more models were measured on both but not like-for-like; they are listed separately in the "Not a like-for-like pair" table below and left out of the comparison.
Models that have data on both rigs
Each cell shows the runtime version and build its run reported. “Builds differ” marks a pair whose two runs used different builds.
| Model | RTX 4090 decode | RTX 3090 decode | Δ | Source runs |
|---|---|---|---|---|
| gpt-oss-20b | 242.6tok/s chat-short · llama.cpp · Q4_K_M · 0.6.0-dev (build 1, commit df18bee) | 207.2tok/s chat-short · llama.cpp · Q4_K_M · 0.7.0-dev (build 1, commit ea0c4c2) | +35.4 | Builds differr_t-a9v_ipdit · r_nakw1nq6clw |
| Qwen3-Coder-30B-A3B-Instruct | 232.5tok/s chat-short · llama.cpp · Q4_K_M · 0.6.0-dev (build 1, commit df18bee) | 199.7tok/s chat-short · llama.cpp · Q4_K_M · 0.7.0-dev (build 1, commit ea0c4c2) | +32.7 | Builds differr_1k8942tw3zf · r_0dh1kzbv4h0 |
| glm-4.7-flash (29.9B) | 164.9tok/s chat-short · ollama · Q4_K_M · 0.31.1 | 134.6tok/s chat-short · ollama · Q4_K_M · 0.31.1 | +30.3 | r_ted0u8uyre0 · r_kalwcyab-86 |
| Flint 40B-A2.5B | 168.0tok/s chat-short · llama.cpp · UD-Q3_K_XL · 8K context · 0.7.0-dev (build 11803, commit a37cc4610) | 130.8tok/s chat-short · llama.cpp · UD-Q3_K_XL · 8K context · 0.7.0-dev (build 11803, commit a37cc4610) | +37.2 | r_r7gzl4lmmdc · r_-yeg4qnhjp7 |
| Flint 40B-A2.5B | 169.2tok/s chat-short · llama.cpp · UD-Q3_K_XL · 16K context · 0.7.0-dev (build 11803, commit a37cc4610) | 128.9tok/s chat-short · llama.cpp · UD-Q3_K_XL · 16K context · 0.7.0-dev (build 11803, commit a37cc4610) | +40.3 | r_sw92j6kg7js · r_v-sdiljpm7i |
| llama3.1 (8.0B) | 137.3tok/s chat-short · ollama · Q4_K_M · 0.31.1 | 136.2tok/s chat-short · ollama · Q4_K_M · 0.31.1 | +1.1 | r_2np7abzjobe · r_9hurqggbshk |
| Nemotron-3.5-Bolt-74B-A9B-24GB | 107.3tok/s chat-short · llama.cpp · IQ2 · 4K context · 0.7.0-dev (build 11669, commit 620d2225c) | 87.75tok/s chat-short · llama.cpp · IQ2 · 4K context · 0.7.0-dev (build 11669, commit 620d2225c) | +19.6 | r_vkjsinuhlyl · r_-sifd5otbpy |
| Nemotron-3.5-Bolt-74B-A9B-24GB | 107.0tok/s chat-short · llama.cpp · IQ2 · 8K context · 0.7.0-dev (build 11669, commit 620d2225c) | 80.32tok/s chat-short · llama.cpp · IQ2 · 8K context · 0.7.0-dev (build 11669, commit 620d2225c) | +26.7 | r_iu0s18cs9d8 · r_w3lond-s75t |
| Qwen2.5-Coder-14B-Instruct | 89.87tok/s chat-short · llama.cpp · Q4_K_M · 0.6.0-dev (build 1, commit df18bee) | 78.21tok/s chat-short · llama.cpp · Q4_K_M · 0.7.0-dev (build 1, commit ea0c4c2) | +11.7 | Builds differr_eqnsqmgz29a · r_rkyf9wxzw9z |
| qwen2.5-coder (14.8B) | 81.18tok/s chat-short · ollama · Q4_K_M · 0.31.1 | 69.21tok/s chat-short · ollama · Q4_K_M · 0.31.1 | +12.0 | r_ttniv2j74vk · r_6ahy-dq0f_0 |
| Qwen3.6-27B | 47.14tok/s chat-short · llama.cpp · Q4_K_M · 0.6.0-dev (build 1, commit 3fb4767) | 42.73tok/s chat-short · llama.cpp · Q4_K_M · 0.7.0-dev (build 1, commit ea0c4c2) | +4.4 | Builds differr_d_wda_rw62f · r_qm1xyvjmx_r |
| Qwen3.8-27B | 44.18tok/s chat-short · llama.cpp · Q4_K_M · 8K context · 0.7.0-dev (build 11803, commit a37cc4610) | 38.83tok/s chat-short · llama.cpp · Q4_K_M · 8K context · 0.7.0-dev (build 11803, commit a37cc4610) | +5.4 | r_tt9io-8lu9p · r_w40_vv7f77w |
| Qwen3.8-27B | 43.38tok/s chat-short · llama.cpp · Q4_K_M · 4K context · 0.7.0-dev (build 11803, commit a37cc4610) | 38.61tok/s chat-short · llama.cpp · Q4_K_M · 4K context · 0.7.0-dev (build 11803, commit a37cc4610) | +4.8 | r_7cap38a021- · r_mmtzel_i367 |
| Qwen3.8-27B | 43.38tok/s chat-short · llama.cpp · Q4_K_M · 16K context · 0.7.0-dev (build 11803, commit a37cc4610) | 38.57tok/s chat-short · llama.cpp · Q4_K_M · 16K context · 0.7.0-dev (build 11803, commit a37cc4610) | +4.8 | r_cthpfm82n1r · r_gscy1f7ey_k |
| Qwen3-32B | 43.47tok/s chat-short · llama.cpp · Q4_K_M · 0.6.0-dev (build 1, commit df18bee) | 38.45tok/s chat-short · llama.cpp · Q4_K_M · 0.7.0-dev (build 1, commit ea0c4c2) | +5.0 | Builds differr_ayy9rjgha5r · r_km62sybxga6 |
| Flint 40B-A2.5B (with CPU offload) | 39.82tok/s chat-short · llama.cpp · UD-Q4_K_XL · 8K context · 0.7.0-dev (build 11803, commit a37cc4610) | 16.84tok/s chat-short · llama.cpp · UD-Q4_K_XL · 8K context · 0.7.0-dev (build 11803, commit a37cc4610) | +23.0 | r_wap61ewkpzm · r_klxxsjjp2m- |
Not a like-for-like pair
These have data on both sides, but the model size, quant or runtime differs, so they are not a head-to-head and are left out of the comparison above.
| Model | RTX 4090 decode | RTX 3090 decode | Why it isn't matched | Runs |
|---|---|---|---|---|
| gemma3 | 195.0tok/s ollama · Q4_K_M · 4.3B | 78.65tok/s ollama · Q4_K_M · 11.8B | size 4.3B vs 11.8B | r_dlanfbgym0h · r_3gnxkzhhmyj |
| qwen2.5-coder (7.6B) | 131.6tok/s ollama · Q4_K_M · 7.6B | 39.86tok/s ollama · Q4_K_M · 7.6B | RTX 3090 request includes a cold model load | r_nrpc8-onxu2 · r_pb0jpnbujji |
See also: RTX 4090 benchmarks · RTX 3090 benchmarks · All hardware · All models · Methodology
Request the missing runs
No measured run yet for these pairs. Vote for the one you want; the most-requested runs go first. See all requests.
We never sell or share your email. Privacy