Method

How we measure.

The same finance workloads on current CPUs and GPUs, timed the same way, with every launch recorded. A result is only as good as the method behind it, so the method is public and every measurement carries its own evidence.

Independent series. Xcelerit chooses and configures the machines before any tuning starts, and runs every measurement, with code tuned for each chip under the same rules. No licence or paid work changes a published result. We work with processor makers and welcome their contributions; every contribution is reviewed against the rules before it is published, so that every comparison stays like for like (the rules).

From one call to the headline

Per process

Cold and warm calls

Each problem size runs in its own process. The first (cold) call is excluded from the mean. Warm calls follow until the 95% confidence interval of their mean is within ±1%, or until 100,000 calls or 60 seconds of warm calls, whichever comes first. Each launch keeps making warm calls for at least 2 seconds, and at least 30 times on the swaption portfolio and CPU Black-Scholes (10 times on the other workloads).

Per process

Launch result

The process reports the mean of its warm calls and the outputs it computed, so every timing carries its own accuracy check.

Per platform

Five launches, one figure

The whole suite runs five times on the same machine, at every problem size. The fastest and the slowest launch are dropped and the middle three averaged. Any test spreading more than 5% is repeated on a second machine of the same type, and the steadier of the two is published; if neither machine is within 5%, the figure is marked noisy. The spread is the range of the middle three launches over their mean, (max − min) / mean; the downloads also give it over all five.

Per machine

The machine itself

Captured before and after the run. Each record gives a summary: processor or accelerator, host CPU, cores, memory, NUMA layout and kernel version.

Timing

  • Wall-clock time from a monotonic clock, measured on the host after the accelerator has finished, in milliseconds.
  • Data movement is counted. On GPUs every timed call includes moving its data between the host and the GPU. A Black-Scholes call makes 100 passes over the whole batch, each counted as work, with the host copies included; for Black-Scholes on GPUs the caller's arrays are in page-locked host memory.
  • Double precision. Most production pricing and risk libraries run in double precision, so every result here is double precision.

The workloads

WorkloadMethodSizesRanked at
Swaption portfolio, LMMMonte Carlo, LMM, 80 deltas16K to 2,048K paths1,024K paths
Barrier optionsMonte Carlo, 50,000 paths, 50 time points2,000 to 32,000 options16,000 options
American optionsBinomial lattice, depth 1,02416K to 2,048K options512K options
European optionsBlack-Scholes closed form16M to 256M options128M options

The swaption portfolio is based on Prof. Mike Giles's LIBOR market model code (University of Oxford; his original code, used with his permission), itself built on work by Zhao and Glasserman; it has been used to test Monte Carlo on new hardware since 2007. All options of the barrier portfolio are priced on the same simulated paths, as part of the workload.

Each workload is ranked at one fixed size, the same on every platform, taken from the earlier published series. At that size every GPU and CPU reaches about 90% or more of its best throughput, except CPU Black-Scholes, where smaller problems fit in cache and run faster.

Platforms are selected from current processors and accelerators available at the time of each round. Each GPU is measured as one GPU, with any others in its server idle, and a CPU platform as a whole two-socket server; host machines differ between GPUs, and each record states the host cores allocated.

What every measurement record publishes

  • Every launch: the mean of its warm calls, how many there were and the confidence interval reached.
  • Every figure and the spread between its launches.
  • At every problem size, the option price validated against the reference implementation's, within tolerance.
  • A summary of the machine and the date, so anyone can see what was measured and when.
  • The full record as JSON and the results as CSV.

Measured platformsThe rules

Compilers

Each platform builds the code tuned for it in double precision, and its random numbers come from a vendor library, named for each platform below: MRG32k3a from oneMKL on the CPUs, Philox4x32-10 from cuRAND on NVIDIA GPUs and from hipRAND/rocRAND on AMD GPUs, all pseudo-random with fixed seeds. Toolchains were fixed at the start of the round: CUDA 12.9.1 for NVIDIA and ROCm 7.2.4 for AMD, the same toolchain for every GPU of a vendor. On the CPUs, Intel's compiler on the Intel processor and GCC 16 on the AMD processor.

PlatformsCompiler and flagsLibraries
Intel Xeon 6 (Granite Rapids)Intel oneAPI icpx 2026.2, -O3 -qopenmp -march=graniterapids -mprefer-vector-width=512oneMKL
AMD EPYC TurinGCC 16.2, -O3 -ffast-math -fopenmp -march=znver5 -mprefer-vector-width=512oneMKL
NVIDIA H200, B200CUDA 12.9.1, sm_90 or sm_100cuRAND
AMD Instinct MI350X, MI355XROCm 7.2.4, gfx950hipRAND/rocRAND

Tuning changes the code, never the compiler or its flags.

The two CPU compilers reach relaxed floating-point semantics by different routes: icpx applies them by default (its fast floating-point model), while GCC is strict by default and relaxes with the explicit -ffast-math above. Either way, every published time is validated against the reference implementation's output before it counts.

Energy

Every run with a power reading also reports its energy, in watt-hours per million, billion or trillion paths or options, whichever keeps the workload's figures readable: per billion paths for the swaption portfolio, per million options for barrier options, per billion for the binomial lattice and per trillion for Black-Scholes. Lower is better. Power is read while the workload runs, in launches long enough for a steady reading. On CPUs it comes from the processor's own energy counters, for the processor packages alone, with memory left out, so every CPU is counted the same way; on GPUs from the board's own sensor, with the host CPU and the rest of the server left out. Energy comes from its own pass, separate from the timed launches. Power settings. Every platform runs in the default power configuration of the system it was measured on, as available at the time of the round. We don't tune power limits or clocks for any chip, so no result depends on a setting chosen for it. Each measurement record states the power limit in force during the run. NVIDIA's tools report the default limit, which matches the limit in force; AMD's report only the limit in force, which matches the maker's rated board power. Energy is ranked GPU against GPU and CPU against CPU, across makers, and never CPU against GPU, since each counts a different part of the machine. Sensors differ between makers, so two figures within 10% of each other are level.

Throughput, on one scale

The results are throughput: paths or options priced per second, from the mean warm-call time at each problem size. Each of the 6 platforms runs every workload with tuned code, tuned for that chip under the same rules, and at every problem size its option price is validated against the reference implementation's before any time counts. Earlier results stay in the insight posts, dated and as published apart from noted edits, and are not compared with these.

Units: problem sizes written with K and M are binary (1K = 1,024, 1M = 1,048,576); throughput is decimal (1M = 1,000,000 per second). A Black-Scholes call counts 100 passes over the batch as its work.

Each round re-measures every platform in the round, and replaces the last. The records of earlier rounds stay published at their address, listed on the platforms page. Results from different rounds aren't compared. Earlier generations are covered in the insights. From 2012 to 2018 results were published on earlier builds and method; those posts keep them as published, apart from noted edits.

Terms

  • Launch: one run of the benchmark program at one problem size, in its own process; five launches make one figure.
  • Tuned: code adapted for one chip, under the same rules for every chip, with its option prices validated against the reference implementation's.
  • Level: two results that differ by less than 3%, or by less than the larger of their two launch spreads. Level results share a rank, shown as =2, counted from the fastest in their group.
  • Overall standings: each platform's position on every workload at its ranked size, level results sharing a position, and the platforms ordered by their average position across the workloads. There is no composite score.
  • Within-launch CI: the 95% confidence interval of the warm-call mean inside one launch, averaged over the kept launches. How much whole launches differ is the spread.
  • SM, CU: the GPU's streaming multiprocessors (NVIDIA) and compute units (AMD), the blocks its cores are grouped in.
  • Round: one complete set of measurements, published together and replacing the last.

How to cite

Anyone may quote a published figure with attribution and a link to its record. Use in a maker’s marketing, and reproducing our charts or tables, needs our written permission (see Legal terms). Each result has a Cite button, in the results panel and on its measurement record, that gives three ready formats. Please link the record page: it is fixed once published, and a correction is published as a new record linked from the old one.

Quote. AMD Instinct MI355X: 192M paths/s on the swaption portfolio (LMM), at 1,024K paths, tuned code, Xcelerit Finance Benchmarks, November 2026. https://benchmarks.xcelerit.com/platforms/mi355x-2026-11-05/

Reference. Xcelerit (2026). Xcelerit Finance Benchmarks, November 2026, record mi355x-2026-11-05. https://benchmarks.xcelerit.com/platforms/mi355x-2026-11-05/

BibTeX.

@misc{xcelerit2026mi355x20261105,
  title = {Xcelerit Finance Benchmarks, record mi355x-2026-11-05: AMD Instinct MI355X},
  author = {Xcelerit},
  year = {2026},
  howpublished = {Xcelerit Finance Benchmarks},
  url = {https://benchmarks.xcelerit.com/platforms/mi355x-2026-11-05/},
  note = {Record mi355x-2026-11-05, accessed 2026-11-05}
}

Black-Scholes figures count the 100 passes of each call; a quote of one says so.

A comparison can be cited from the compare page: its Cite button quotes the pair, the workload and the size in view, and links the comparison itself.