A single-file, zero-install performance lab for AMD Adrenalin benchmark logs. Drop the CSVs that AMD Software writes during a gaming session and get scored diagnostics, stutter forensics, overclock stability analysis, and multi-run comparison — entirely in your browser. No server, no uploads, no build step.
Use it right now: 👉 https://carterdunn.github.io/AMD-GPU-Perf-Analyzer/ — nothing to install.
Or run it locally:
- Download index.html (it's the whole app) and open it in a Chromium-based browser (Chrome / Edge / Brave).
- Drag in AMD Adrenalin performance-log CSVs — single files, multi-select, or your entire logging folder.
- That's it. Try it right now with the recordings in
sample-data/.
Either way your data is processed entirely in your browser — the hosted page is static and uploads nothing.
To record your own logs: in AMD Software: Adrenalin Edition, open the Performance tab and enable performance logging, then play. Each session produces a FPS.Latency.*.CSV and a Hardware.*.CSV — the analyzer pairs them automatically by timestamp.
Everything stays on your machine: files are parsed locally and saved to your browser's IndexedDB so your run library is waiting for you next time you open the page.
Every session gets a 0–100 score and a verdict built from calibrated thresholds: frame-pacing consistency (1% low vs average), stutter counters, thermal margins against your GPU's real throttle points, VRAM and system-RAM pressure, bottleneck detection, and power-limit analysis. Every issue comes with concrete suggested fixes.
The FPS log samples every ~250 ms and the hardware log every ~1 s. The analyzer time-aligns them: for every frame-time spike it interpolates the exact hardware state at that moment and classifies the likely cause — core-clock dip, memory-clock dip, thermal throttle, VRAM pressure, GPU starvation (CPU/engine), or early-session shader compilation.
OC settings are read straight from the telemetry where possible (observed peak memory clock, sustained board power vs reference TBP) and merged with a filename convention for offsets telemetry can't see. Every run is also scanned for instability signatures the averages hide: logging gaps (driver timeouts), truncated recordings, core-clock collapse under load, memory-clock drops under load, and freezes.
Name your files like MyGame_OC.140.40.Fast.2714.10_... (+140 MHz offset, −40 mV, fast VRAM timings, 2714 MHz memory, +10% power) and the analyzer decodes the profile automatically.
Every imported run is saved locally and reappears on the next open, grouped by game with OC chips and stability badges. Open any combination of runs to compare, pin one run per game as your baseline (★), and every other run of that game shows delta chips against it.
Repeat runs of the same game + OC profile are grouped, and their spread defines your noise floor: the tool tells you whether a profile's "win" is likely real or just run-to-run variance. A head-to-head table highlights best/worst per metric, including FPS-per-Watt.
The efficiency frontier plots every session as average FPS vs average board power — dominated OC profiles (more power, no more frames) are immediately obvious.
Where your silicon actually ran: core clock vs core voltage under load, per session. An undervolt win shifts the cloud up-and-left. Great for validating a tuning profile beyond "did it crash".
Plus full telemetry chart tabs — FPS & latency, GPU (clocks / power / thermals / cooling / memory), CPU, and system memory — with a time-range scrubber.
The analyzer is fully functional without this — every feature above is plain JavaScript. But if you run a local LLM through Ollama, two extra panels light up:
- AI Deep Analysis — sends the session's computed statistics, OC signature, stability report, and classified stutter events to your local model and streams back a verdict, issues, exact Adrenalin tuning steps, and an honest headroom estimate.
- Ask The Data — a chat box for follow-up questions ("why is my 1% low so much worse than my average?"), answered strictly from your loaded telemetry.
Nothing ever leaves your machine — the page talks to Ollama at http://localhost:11434.
Setup (optional):
- Install Ollama and pull a model, e.g.
ollama pull qwen3.5:9b. - The default model is
qwen3.5:9b— to use a different one, edit theOLLAMA_MODELconstant near the top of the AI section inindex.html(any instruct/reasoning model works; the tool also auto-falls-back to any installed Qwen model). - If you open the tool as a local file (
file://), Ollama must allow browser requests: set the environment variableOLLAMA_ORIGINS=*and restart Ollama (on Windows:setx OLLAMA_ORIGINS "*"). Note: this allows any website in your browser to reach your local Ollama API — if you'd rather not, serve the tool fromlocalhostinstead (e.g.python -m http.server), which Ollama allows by default.
The report header shows a status pill (✦ model ready / local AI offline) so you always know where you stand.
- Browser: Chromium-based browsers recommended (folder drag-drop and IndexedDB persistence). The core charts work in Firefox, but folder import may be limited.
- CSV formats: both the current Adrenalin export and the older multi-GPU format (
GPU 1 …columns) are supported; the iGPU block is ignored. - Hardware profile: pick your GPU/CPU/RAM once in the Hardware Profile bar — it's remembered and applied to future imports. Auto-detect infers VRAM capacity from usage if you don't.
- Non-deterministic benchmarks: open-world runs vary by scene/weather. The repeat-run variance table exists precisely so you don't chase noise — record 2+ runs per profile.
No analytics, no network calls except the two chart libraries loaded from cdnjs (and your own localhost Ollama if you enable the AI panels). Your benchmark data never leaves your machine.











