truebottleneck
Methodology · v1.0

How we calculate everything

This is the page the other calculators don't have. Below is the complete logic behind every number on the site — the normalization, the formulas, the exact constants, the honest severity tiers, and the things we deliberately don't claim to know. Every constant is fitted from public benchmark data and is reproducible.

1 · Component scores (normalization)

Bottleneck and FPS both start by turning each CPU and GPU into a comparable 0–100 gaming-capability score, built from public benchmark figures.

CPU — best available score, converted to one scale

cpu_index = gaming_score              (if present — most game-accurate)
          = 1.4631 × single_thread    (else; measured median ratio, 188 samples)
          = 0.15651 × cpu_mark        (else; measured median ratio, 139 samples)
cpu_norm  = min(100, cpu_index / 12521 × 100)   (12521 = Ryzen 7 9850X3D, our gaming-flagship reference)

GPU — single clean metric

gpu_norm = min(100, g3dmark / 38951 × 100)   (38951 = RTX 5090, strongest standard retail card)

We anchor the CPU scale to the strongest gaming chip rather than the absolute fastest multi-core part on the chart. A 64-core workstation CPU isn't faster in games, and using it as the ceiling would unfairly deflate every gaming CPU's score and over-report CPU bottlenecks. For the GPU ceiling we use the strongest standard retail card and deliberately exclude region-specific variants (e.g. the China-only RTX 5090 D) and low-sample outliers, so a thin-sample inflated score can't depress every other card's normalized value.

2 · The bottleneck formula

The weaker of your two components is the limiter. How much that weakness actually matters depends on the resolution: a slower CPU barely shows at 4K, while a slower GPU is felt hardest there. So we take the raw capability gap between the two parts and scale it by how much the weaker side matters at your resolution.

Resolution If CPU is weaker If GPU is weaker
1080p0.550.50
1440p0.380.70
4K0.200.90
strong, weak = max(cpu_norm, gpu_norm), min(cpu_norm, gpu_norm)
limiter      = the weaker component (CPU or GPU)
rawgap       = (strong − weak) / strong          # relative capability gap, 0–1
bottleneck%  = rawgap × impact[limiter][res] × 100

A well-matched pair has a tiny rawgap, so the bottleneck stays near zero at every resolution. A real mismatch only reads as “significant” when the weak part is the one that resolution leans on — e.g. a weak GPU at 4K.

3 · The FPS formula

A GPU's raw frame budget for a title scales linearly with its g3dmark and the game's measured demand at that resolution. The baseline constants below were fitted across 84 cards.

est_fps  = baseline_a[res] × gpu.g3dmark × game.demand[res]
           baseline_a: 1080p = 0.00870   1440p = 0.005665   4K = 0.003363
1%_low   = est_fps × game.low1pct_ratio
fps      = min(est_fps, cpu_cap)    # cpu_cap = cpu_norm × coeff[category]
           coeff: esports/light ≈ 10   mixed/medium ≈ 5   heavy AAA ≈ 3
           # your CPU can't feed more frames than this, whatever the GPU does
# quality (non-Ultra): low ≈ ×1.6, medium ≈ ×1.3, high ≈ ×1.1
# DLSS/FSR ≈ ×1.3 (quality);  frame-gen ≈ ×1.6–1.9 (smoothness, not input latency)

Example: an RTX 4060 (g3dmark 19498) in Cyberpunk 2077 at 1080p Ultra ≈ 0.00870 × 19498 × 0.437 ≈ 74 fps — in line with measured native (no ray tracing) results.

4 · Honest severity tiers

Most calculators inflate small gaps into scary words to push an upgrade. We don't. A GPU-bound result at high resolution is healthy and normal — our wording stays calm.

< 15%Balanced — healthy pairing, no upgrade needed
15–30%Moderate — slight; tends to even out at higher resolutions
> 30%Significant

5 · Confidence ranges

No single number is honest on its own. Every result carries a ± range that starts at ±10% and adjusts with input quality — the more we have to approximate, the wider it gets; the more we know, the tighter. Here is the exact formula:

confidence = 10                         (base)
           + 5   if the CPU score came from a converted metric (not native gaming_score)
           + 5   if the GPU's VRAM is missing and we fall back to a tier estimate
           − 3   if you picked a specific game (its demand is known, so we're more sure)
           + 2   per approximation toggle enabled (DLSS/FSR, frame-gen, non-Ultra preset)
confidence = clamp(result, 8%, 25%)

The bottleneck headline is a pure CPU↔GPU figure, so only the factors that actually move it (CPU metric quality, whether a game is known) widen its band; the FPS estimate additionally widens for each approximation toggle. If a result and reality disagree, the truth is almost always inside that band.

6 · What we don't claim

  • These are estimates, not guarantees. Drivers, thermals, background load, and game patches all move real numbers.
  • Untitled estimates use an "average AAA" profile (demand ≈ 0.6) and carry a wider range.
  • Frame-generation figures reflect smoothness, not input latency, which interpolated frames don't improve.
  • RAM capacity and speed are surfaced as advisory notes (e.g. an 8 GB warning, a fast-DDR5 nudge) — never folded into the headline bottleneck percentage, which stays a pure CPU↔GPU figure.
  • Scores re-tune automatically as new benchmarks land; the hardware library shows its last update date.

Now that you've seen the math, run your own parts through it.