Vol. II · Issue 05 · MAY 2026 Methodology — Truth Series v3.1 · Apr 2026
// METHODOLOGY · v3.1

Every formula.
Every constant.
Every weight.

If you find a flaw in our scoring, file an issue on GitHub. We ship the patch the same week. This page documents the entire 9bench composite score, including the parts we can't measure perfectly.

1. What we measure

— GPU compute

WebGPU matrix multiplication

We run a 1024×1024 FP32 matrix multiplication compute shader on your GPU. The shader executes 2 × N³ floating-point operations per pass. Best-of-3 measurement with adaptive warm-up so laptop GPUs that idle at low power get a fair reading. Output is GFLOPS (billions of FP operations per second).

— CPU single + multi

SHA-256 hash chain

Single-core: SHA-256 hash chain on the main thread via Web Crypto API. Multi-core: same workload across N Web Workers where N = navigator.hardwareConcurrency. Output is hashes per second. Multi-core scaling efficiency is also reported.

— RAM bandwidth

TypedArray throughput

Sequential reads, sequential writes, and a random-access pointer-chase on a 256 MB Float32Array. Reports GB/s read, GB/s write, and ns latency. Browser sandboxing caps this at 30-50% of native — we never pretend otherwise.

2. The formulas

Every component score is a simple linear or logarithmic transform of the raw measurement. There is no proprietary "magic" — anyone can reproduce these numbers.

GPU score
round(GFLOPS × 3)

Calibration: a typical 2024 mid-range GPU (~500 GFLOPS in browser) scores ~1500. RTX 4070-class hits ~3000 in browser (well below native ceiling).

CPU single-core score
round(SHA_per_sec_single / 300)

Calibration: Apple Silicon high-end ~1300, modern x86 ~1000-1500.

CPU multi-core score
round(SHA_per_sec_multi / 600)

Multi-core counts cores divided by 600. Browser Web-Worker scaling is structurally below native (~3-5× speedup typical for 16-core instead of native ~12×).

RAM score
round(((read_GBs + write_GBs) / 2) × 60)

Average of read + write bandwidth × 60. Browser-sandbox-capped — see section 5 for limits.

3. Composite weighting

The 9bench overall score is a weighted geometric mean of the four component scores. Geometric mean prevents a single weak component from being masked by strong ones — the "no shortcut" version.

overall = exp(0.35 × ln(GPU) + 0.45 × ln(CPU·M) + 0.20 × ln(RAM))

We don't include CPU single-core in the composite because it correlates strongly with multi-core for in-browser SHA workloads. Including it would double-count.

4. Tier brackets

Tiers are descriptive labels for sharing, not gospel. We use letter-tiers (S/A/B) for the top half because that's Reddit-shareable, and word-labels for the bottom half because no one shares "D-tier".

TierScoreDescription
S-tier ≥ 1386Enthusiast / workstation
A-tier ≥ 900 Power user
Solid daily driver ≥ 600 Comfortable for most work
Working machine ≥ 300 Office class
Patient & honest ≥ 0 It still gets the job done

5. What we cannot measure

⚠ Honest Disclaimer · Truth Series
Browsers sandbox memory access. The RAM number is relative, not native bandwidth. We could hide that and pretend our number is gospel. We don't. Read the methodology.

Browsers cap absolute throughput on RAM workloads via the JavaScript memory model (no SIMD-vectorized memcpy, no DMA, no direct mmap). Browser RAM scores typically run at 30-50% of native. We disclose this on every result page.

We also cannot measure: thermal throttling under sustained load, disk/SSD I/O, network bandwidth, GPU memory bandwidth (only compute), peak-vs-sustained turbo behavior. For those, install a native benchmark.

What we can measure: relative ranking across machines. 9bench is calibrated for cross-platform fairness — a 2024 MacBook Pro and a 2024 Windows desktop running the same browser produce comparable composite scores within ±5-10%.

6. FAQ

Is 9bench accurate?
Within ~3-10% of native benchmarks for CPU and GPU compute. RAM is browser-sandboxed — it consistently scores 30-50% of native bandwidth. We say so loudly. For absolute peak measurement use Geekbench, Cinebench, or 3DMark. For instant cross-platform relative ranking, 9bench is built for the job.
Does 9bench take money from chip vendors?
No. Zero. The 'Vendors paid us: 0' counter on the Landing page is hardcoded to 0 because that's a fact. r/hardware banned UserBenchmark for documented anti-AMD bias; we built 9bench to fill that gap with an open-source, vendor-neutral alternative.
Why does my RAM score look so low?
Browsers (V8, SpiderMonkey, JavaScriptCore) sandbox memory access for security. Float32Array reads and writes are not vectorized to the same degree as native code, and there is no SIMD pathway for arbitrary memory work. Typical browser RAM throughput is 30-50% of native. We could pretend our number is gospel; we choose to disclose this on every result page instead.
Does it run on iPhone / iPad / Android?
Yes. Safari 26+ on iOS/iPadOS 26 supports WebGPU. Android Chrome 113+ does too. Older devices fall back to a CPU-only run with a clear notice.
Why is it free?
Because it costs us $0 to run. The benchmark executes entirely in your browser. The only server cost is storing the optional submitted score in Cloudflare D1, which is essentially free at our scale. No tracking, no upsell, no premium tier.
How is this different from UserBenchmark?
UserBenchmark has documented anti-AMD bias (caught by independent reviewers in 2019, banned from r/hardware and r/AMD). 9bench takes zero money from chip vendors. The scoring formula is in this page and on GitHub. r/hardware can verify every weight.
Where is my data stored?
The benchmark runs locally in your browser. The test page has a consent box (default-on) — when checked, an anonymous summary is submitted to Cloudflare D1 after the test finishes. The submitted row contains: score breakdown, GPU name string, CPU core count, AI capability snapshot, a short 'Browser-Major / OS / Arch' UA fragment, timestamp, and a random 8-char hash ID. No IP address, no cookies, no fingerprints, no geolocation. Uncheck the box before clicking Start to run the benchmark without storing anything.
What does 'self-reported' mean on a GPU name?
Some browsers (Firefox in strict privacy mode, Tor, Brave Strict) hide GPU info from web pages. When that happens, 9bench shows 'Browser hides this — add manually' and lets you type your GPU. Self-reported entries are tagged so they cannot be confused with detected hardware.

7. License

9bench is MIT-licensed. You can fork it, ship your own variant, run it commercially. Truth-series tools should not be locked behind proprietary licenses. Source on GitHub.

Built independently. Sister project of Toololis. Author identity.

▶ TEST MY HARDWARE View leaderboard