Methodology
Every number on this site is produced by one of the processes below. If you disagree with an assumption, the page that uses it says which assumption it is, and the configurator lets you change most of them.
Every figure belongs to exactly one of these categories.
A model fits when its weights + KV cache + runtime overhead land inside the memory an inference engine can actually address — never a naive comparison of file size against installed RAM.
Usable memory fraction
The most consequential assumption in the fit calculator, because it decides fit or no-fit at the margin.
| Architecture | Usable | Why |
|---|---|---|
| Unified memory (Apple) | 85% | macOS reserves memory for the OS and caps the GPU working set. Assumes a headless machine with the wired-memory limit raised. |
| Unified LPDDR (Strix Halo, DGX Spark) | 82% | OS and framebuffer come out of the same pool, plus driver-level GTT limits. |
| Discrete GPU | 92% | Driver, CUDA context, framebuffer and allocator fragmentation. |
| Multi-GPU | 88% | Each device duplicates context and communication buffers. |
Fit thresholds
| State | Utilisation | Meaning |
|---|---|---|
| Comfortable | ≤ 80% | Room for a long context and other work. |
| Fits | ≤ 90% | Works, with limited headroom. |
| Borderline | ≤ 97% | Likely loads, fragile under load or long context. |
| Does not fit | > 97% | Needs a smaller quantization or more memory. |
KV cache
Standard and grouped-query attention: 2 × layers × kv_heads × head_dim × tokens × bytes_per_element. Multi-head latent attention (DeepSeek family) caches one compressed vector per token per layer instead: layers × (kv_lora_rank + 64) × tokens × bytes_per_element, which is why those models handle very long contexts on modest memory. Where a model’s attention geometry is not in our database, a conservative heuristic is used and the figure is labelled Estimated.
Mixture-of-experts models need all parameters resident but read only the active ones per token. Memory follows total parameters; speed follows active parameters. Conflating the two is the single most common error in local-AI hardware advice.
Used whenever no measurement exists for a pairing. Results are always ranges and always labelled Estimated.
Decode
Generating one token requires streaming every active parameter out of memory once, so decode is memory-bandwidth bound:
time_per_token = (active_params × bytes_per_weight) / (bandwidth × achieved_efficiency) + fixed_overhead
- Achieved efficiency is calibrated per machine from measured benchmarks where we have them, and inherited from a sibling configuration with the same silicon otherwise. It ranges from about 42% on Strix Halo to about 88% on an M5 Max.
- Fixed overhead (0.8–1.5 ms depending on platform) covers per-layer kernel launches, attention bookkeeping and sampling. Without it the model predicts implausible four-figure token rates for sparse MoE models on fast cards.
- MoE penalty of 15%: expert gathers are less bandwidth-efficient than a dense sweep.
- Multi-GPU does not get aggregate bandwidth. Each additional card contributes 40% of its bandwidth, reflecting that consumer Blackwell has no NVLink and every layer’s all-reduce crosses PCIe.
Prefill
prefill_tps = (TFLOPS × assumed_MFU) / (2 × active_params)
Model-FLOPs utilisation is assumed at 18–32% depending on platform. Prefill is far more engine-dependent than decode, so its range is wider (±35% against ±18% for decode).
Aggregation rules
- Never aggregate across quantizations. Q4 and Q8 are different workloads.
- Never aggregate across context depths. Runs are bucketed as short (≤8K), medium (8K–32K) and long (>32K). The database keeps the exact context; only the display buckets it.
- Never blend measurements with estimates. If any measurement exists in a bucket, estimates for that bucket are discarded rather than averaged in.
- Batched or concurrent runs are excluded from single-stream figures.
- Median, not mean, so a single outlier cannot move the headline.
Confidence score (0–10)
| Component | Points |
|---|---|
| First-party reproducible benchmark | +4 |
| Independent third-party benchmark | +3 |
| Community-reported benchmark | +2 |
| Vendor-published benchmark | +1 |
| Estimate (not a measurement) | +0 |
| 4 or more measurements | +2 |
| 2–3 measurements | +1 |
| Sources agree within ±10% | +2 |
| Sources agree within ±25% | +1 |
| Complete run metadata (engine, version, context, source, date) | +2 |
7+ is High, 4–6 Medium, below 4 Low. Anything derived only from estimates is labelled Estimated regardless of score.
Three quantities are modelled and deliberately never conflated:
- Cash cost — money that leaves the bank account, and when.
- Accounting depreciation — the charge to P&L per period.
- After-tax economic cost — depreciation plus running costs plus cost of capital, less the tax those deductions save. This is the number to compare between machines.
- Depreciation is straight-line to an estimated residual value.
- Unrecoverable VAT is capitalised into the depreciable basis — a consumer genuinely loses it, so it belongs in the cost of the asset.
- Cost of capital is charged on the average capital employed over the holding period. Self-funded buyers should read it as opportunity cost.
- Power is time-weighted: load power during the generating fraction, idle power for the rest of the powered hours. Using TDP for every powered hour would overstate electricity by several times.
- Tax deductions are valued as
deduction × marginal tax rate. Dutch KIA is additional; UK AIA and US Section 179 replace later depreciation on the same basis.
Tax logic lives entirely in versioned JSON rule documents (data/jurisdictions/<country>/2026.json), never inline in calculations, and never derived at runtime by a language model. Every rate carries a source URL and a verification date, shown on any page that uses it.
The UK set uses VAT and the Annual Investment Allowance. The US set is federal-only and uses Section 179; state and local income taxes, sales tax, incentives, detailed MACRS timing and entity-specific pass-through rules are excluded. Both assume the full qualifying annual allowance remains available.
The Netherlands 2026 set covers the 21% VAT rate, Box 1 and vennootschapsbelasting rates, the mkb-winstvrijstelling (which reduces the effective value of a ZZP’s deductions to 87.3% of the headline rate), the KIA investment-allowance bands, and the 20% annual depreciation cap. Sources are the Belastingdienst and KVK, verified 6 September 2026.
Generated pages are scored before publication and marked noindex below 6/13. Two requirements are absolute regardless of score: a page must have a compatibility calculation, and at least one benchmark or estimate. A hardware × model page where the model does not fit and no measurement documents it has nothing computed to say, so it is not published to the index.
Every intersection page shows its own quality score at the bottom.
- Measured benchmark density is low. Most pairings show an estimate. See the benchmark database for exactly which pairings have real data.
- Model specifications are revision-pinned. Parameter totals come from Safetensors metadata and attention geometry from each exact model revision. The remaining uncertainty is how hybrid attention implementations translate those published fields into runtime memory use.
- Several prices are derived, not published. Apple does not publish a per-option price list we can cite, so upgrade configurations are extrapolated from its pricing conventions and marked as derived.
- Apple FP16 compute figures are estimated from measured prefill benchmarks, because Apple does not publish matmul throughput.
- Resale values are assumptions, not derived from used-market data.
- Tax estimates are intentionally simplified. The canonical static pages use US federal assumptions. UK, Netherlands and neutral estimates load interactively; state and local US rules are not modelled.