Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Making a program fast on a modern CPU means knowing what the core does with
each instruction, where the time actually goes, and how to prove a change
helped. This is the reading that gets you there, in the order that makes the
next piece legible.
Scope. x86 and Arm server parts, from one instruction through to serving
a model on CPU. Not language runtimes, database internals, or anything above
the socket.
Evidence. Primary sources only: the paper, the specification, the vendor
manual, the repository, or a report by the person who did the work. Any
number, anywhere in this repository, carries all seven fields set out in
What earns a place, or it is not quoted.
Proof. Fourteen of the sections end in a benchmark under
misc/benchmarks/: C source, the build line, the
machine, the raw numbers and the analysis, all committed. Run them yourself.
Plug it in. The MCP server in misc/mcp/ turns
this list into a CPU performance brain inside any AI client: the reading
order, every rejected candidate with the rule it failed, every benchmark,
and an index of the linked sources built on the reader's own machine. Point
it at real work and the answers quote those sources and cite them. With
uv installed, one command adds it.
Claude Code
sh
claude mcp add --scope user cpu-perf -- uvx cpu-perf
Codex
sh
codex mcp add cpu-perf -- uvx cpu-perf
Claude Desktop, Cursor and VS Code take a few lines of config, given in
Connect it.
Section 1 is a path through the rest; read it top to bottom before using the
numbered sections as a reference.
Optimizing software in C++ - Maps C++ onto pipeline mechanisms and shows why a loop-carried dependency chain, not instruction count, paces a loop.
Intel Optimization Reference Manual - Its opening chapters show how a shipping x86 core implements the textbook pipeline, each rule tied to a mechanism.
Work the exercises in Performance Ninja alongside them; reading alone will not build the instinct.
Reproduce it: misc/benchmarks/04-cache-latency, the cost per dependent load stepping up at each cache boundary, the curve the fourth entry measures.
2. One instruction, end to end
Vendors name the same structures differently (Intel's decoded ICache is AMD's op cache, and AMD's macro-op is Arm's MOP), so the stage names below are generic.
Fetch and decode
Fetch Directed Instruction Prefetching - The origin of the decoupled front end, where the predictor runs ahead of fetch and drives instruction prefetch.
Measuring Reorder Buffer Capacity - Sets the user-space method that measures the window and register files, and which idioms take no physical register.
Cache-Conscious Structure Definition - Introduces and measures structure splitting and field reordering on real programs, the origin of hot-cold layout rules.
CppCon 2014: Data-Oriented Design and C++ - Argues from cache-line utilisation arithmetic that layout must follow the access pattern, the case behind structure of arrays.
dwarves (pahole) - Prints a struct's holes, padding and cache-line boundaries from DWARF, so a layout is seen rather than guessed.
Cloud instances often virtualise the hardware counters away and macOS runs no Linux perf, so perf stat has to show a non-zero cycles count before any counter entry below is trusted.
Method and the whole-system view
The USE Method - Sets the checklist that finds the saturated resource before any profiler is opened.
TMA_Metrics-full.xlsx (intel/perfmon) - The official home of every TMA formula, event, threshold and level per microarchitecture, from which toplev derives.
pmu-tools - Runs the TMA tree on Linux from the spreadsheet and states why multiplexed levels mislead on short or varied workloads.
pipeline.json (perf pmu-events, amdzen4) - States the AMD top-down formulas in events for both levels, the metric groups perf stat runs on Zen with no vendor tool.
Quantitative System Performance - Origin of the bound-and-bottleneck analysis roofline names as its ancestor, and of the asymptotic bounds on throughput.
The single server queue in heavy traffic - Derives the wait near saturation from utilisation and arrival and service variance, the formula behind the latency knee.
7. Single-thread optimisation
A loop the compiler reports as vectorised can still run at scalar speed: a float reduction stays one serial chain until reassociation is permitted.
Data layout and loop transforms
Intel Optimization Reference Manual - Where Intel states when a structure of arrays beats an array of structures, strided and hybrid cases included.
Intel Intrinsics Guide - Maps each intrinsic to its instruction and CPUID flag, with the vendor's latency and throughput per microarchitecture.
Intel Software Developer Manuals - The normative semantics of every Intel vector instruction, with the masking, rounding and fault rules intrinsics hide.
Introduction to SVE - Where Arm explains vector-length-agnostic loops and predication, the model that removes remainder loops entirely.
Arm C Language Extensions - The specification the NEON and SVE intrinsics come from, so it settles what a compiler must accept and what is a bug.
Parsing Gigabytes of JSON per Second - Shows branch-free structural indexing with carry-less multiply and shuffles, measured against conventional parsers.
simdjson - Where that technique ships, with a kernel per ISA and the harness that keeps its published comparisons reproducible.
No -O level changes the target instruction set: without -march or -mcpu, every instruction emitted belongs to the default target ISA, so target flags come before any judgement of codegen.
Reading emitted code
Compiler Explorer - Shows how a source change alters the emitted instructions across compilers, versions and flags, with nothing installed.
llvm-objdump - Reads the binary that shipped, with source lines and symbolised branch targets, rather than a recompiled snippet.
llvm-mca - Predicts loop throughput and port pressure from the scheduling model, and states it models neither front end nor caches.
llvm-exegesis - Measures instruction latency and throughput with counters, so the model llvm-mca predicts from is checked, not trusted.
Optimisation levels, inlining and link time
Options That Control Optimization (GCC) - Lists what each -O level turns on, the inlining limits, and that -Ofast admits transforms invalid for conforming code.
Itanium C++ ABI - Fixes the rule that a non-trivial class goes by reference to a caller-made temporary, the cost a wrapped pointer pays.
How To Write Shared Libraries - States what PLT calls and interposition cost, and the visibility controls a library needs to inline its own exports.
LTO Overview (GCC Internals) - Defines whole-program LTO against partitioned WHOPR, and the LGEN, WPA and LTRANS stages that run -flto in parallel.
ThinLTO - Defines the thin link, summaries analysed whole-program then parallel backends, and the cache for incremental rebuilds.
Target flags and auto-vectorisation
x86 Options (GCC) - Defines -march against -mtune, the psABI levels, and -mprefer-vector-width, the switch for full-width AVX-512 code.
Function Multiversioning (GCC) - Defines target_clones, one function per ISA behind a resolver the dynamic linker runs, so a generic build ships AVX-512.
Profile Guided Optimization (Clang) - Defines the instrumented and sampled workflows, why their profiles cannot mix, and the cost of a wrong training input.
Every cost below is a cache line moving between cores, so the ordering models and the measured line-transfer cost in the memory hierarchy section come first.
Atomic operations, C++ working draft - The normative wording for every memory order, fence and read-modify-write, the text a compiler is checked against.
C/C++11 mappings to processors - The table that turns each memory order into x86 and Arm instructions, so what an order costs is read off the page.
Linux kernel memory-barriers.txt - States what the kernel assumes any CPU may reorder and what each barrier and access primitive guarantees.
herdtools7 - Where herd7, litmus7 and klitmus7 live, the tools that run a litmus test against the x86, Arm and kernel models.
The Art of Multiprocessor Programming - States linearizability and the consensus hierarchy and builds both into working stacks, queues, lists and hash tables.
OpenMP Specifications - Fixes fork-join and tasking semantics, and the wait and binding controls deciding if idle workers spin, sleep or move.
oneTBB - The shipping work-stealing runtime, arenas and task groups over a deque, the home of grain size and spin-before-sleep.
10. NUMA and multi-socket
A page's node is decided at first touch, not when memory is allocated or a policy is set, and every vendor table below depends on the BIOS node mode of the machine it ran on.
Intel Memory Latency Checker - Measures the node-to-node latency and bandwidth matrix and loaded latency on the x86 at hand, which no datasheet states.
A syscall's cost depends on the mitigation state, the governor and the idle state the core was in, three sysfs settings that change after boot, so each is recorded beside any number below.
Syscalls and asynchronous I/O
vdso(7) - Defines the calls the kernel answers without a mode switch, and the clocksource condition for skipping the trap.
rt-tests - The reference wakeup-latency measurement for Linux, whose README states that an unloaded run proves nothing.
osnoise tracer - Counts the noise a spinning thread suffers and attributes each event to NMI, IRQ, softirq, thread or hardware.
Tales of the Tail - Derives the queueing-ideal tail and attributes the excess to scheduling, interrupt placement, power saving and NUMA.
Latency Implications of Virtual Memory - Measures with code the page-fault, TLB-shootdown and writeback stalls that memory mapping hides from the caller.
The KVM halt polling system - Defines the host-side polling after a vCPU halt that trades idle host CPU for guest wakeup time, unseen by the guest.
Load generation and production workloads
Open Versus Closed: A Cautionary Tale - Shows that open and closed load models disagree on response time and scheduling gains, with rules for choosing one.
wrk2 - Issues requests on a fixed schedule and times each from when it was due, so server stalls reach the percentiles.
Inter Thread Latency - Measures with code the floor for handing a cache line between cores, which every queue and lock is built on.
Single Writer Principle - States the design rule that removes write contention outright, using a contended increment's cost as the argument.
Optimizing a Ring Buffer for Throughput - Adds cached indices to a single-producer single-consumer ring and shows with counters the coherence traffic removed.
LMAX Disruptor - Applies the single writer rule and cache-line padding to a ring buffer, with the queue comparison that motivated it.
Aeron - Carries the single writer and batching rules through a whole transport, the reference beyond one in-process queue.
13. Inference on CPU
A decode step at batch one reads every weight once for a few flops, so it runs at the memory system's rate, and a CPU figure compares with a GPU figure only at the same batch and precision.
LLaMA Now Goes Faster on CPUs - Builds a register-tile kernel step by step and shows where outer-loop unrolling wins and where a vendor BLAS still does.
OpenBLAS - Sets run-time dispatch for a BLAS, one kernel table per microarchitecture chosen as a DYNAMIC_ARCH build loads.
oneDNN Matrix Multiplication Primitive - Fixes the data-type table, packed weight format and fused post-ops a CPU GEMM must expose to an inference graph.