Skip to main content

Performance / 2026-11-08

Benchmarks

Apple M1 Max65 workloads199 timings

Codon speedups

Comparison runtime / Codon runtime. Higher than 1x favors Codon.

Results JSON
01

Applications

5 workloads / Full application inputs

Explore workloads

Geometric mean speedup

vs. CPython3.15.2
9.527x5 / 5 workloads
vs. PyPy8.0.1
2.765x5 / 5 workloads
vs. Clang C++23.1.5
2.162x3 / 5 workloads
WorkloadLogarithmic scale / 1x = parityvs. CPython
1x100x
vs. PyPy
1x100x
vs. Clang C++
1x100x
24.14x
1.646x
Not implemented
5.08x
2.541x
2.257x
primesprimesCodon's parallel loop is configured with one OpenMP thread in this run.
39.26x
3.358x
Not implemented
8.798x
6.254x
2.809x
1.852x
1.839x
1.594x
Geometric means of paired median-time ratios; 3 measured runs per implementation. Missing or incomplete timings are excluded.
02

Pyperformance

7 workloads / Full application inputs

Explore workloads

Geometric mean speedup

vs. CPython3.15.2
23.76x7 / 7 workloads
vs. PyPy8.0.1
2.776x6 / 7 workloads
vs. Clang C++23.1.5
1.233x2 / 7 workloads
WorkloadLogarithmic scale / 1x = parityvs. CPython
0.1x1x1,000x
vs. PyPy
0.1x1x1,000x
vs. Clang C++
0.1x1x1,000x
40.21x
1.682x
1.849x
chaoschaosOutput differs between runtimes. Floating-point rounding and the order of operations can accumulate in iterative calculations and change the final output.
12.65x
1.89x
Not implemented
fannkuchfannkuchCodon uses 4 OpenMP threads (explicit in the source); other runtimes use one.
17.09x
Timed outNot implemented
19.44x
4.738x
Not implemented
11.69x
5.669x
Not implemented
21.21x
2.202x
0.8221x
101.9x
2.434x
Not implemented
Geometric means of paired median-time ratios; 3 measured runs per implementation. Missing or incomplete timings are excluded.
03

NPBench

53 workloads / Largest standard L preset

Explore workloads

Geometric mean speedup

vs. CPython3.15.2
2.859x53 / 53 workloads
vs. Numba0.68.1
1.591x53 / 53 workloads
WorkloadLogarithmic scale / 1x = parityvs. CPython
0.1x1x1,000x
vs. Numba
0.1x1x1,000x
5.451x
1.104x
2.35x
2.255x
1.273x
1.532x
65.69x
0.7739x
1.001x
0.9946x
1.007x
1.011x
1.491x
1.508x
1.562x
1.496x
15.13x
1.047x
0.9893x
0.8936x
3.472x
1.568x
1.033x
1.144x
9.189x
10.17x
0.993x
2.343x
1.002x
2.293x
97.98x
0.7562x
1.647x
1.113x
0.9998x
0.9975x
1.086x
0.9957x
1.524x
2.795x
1.017x
2.83x
1.005x
1.034x
0.9036x
0.9778x
0.99x
1.15x
1.039x
1.441x
3.062x
2.028x
1.621x
4.801x
2.381x
4.588x
2.083x
2.606x
2.104x
2.532x
0.9961x
1.01x
0.9997x
1.009x
6.747x
11.21x
14.51x
2.212x
15.71x
2.325x
mandelbrot1mandelbrot1Output differs between runtimes. Floating-point rounding and the order of operations can accumulate in iterative calculations and change the final output.
1.308x
0.8143x
1.02x
1.001x
1.099x
1.006x
0.9045x
0.891x
1.106x
0.9145x
329x
1.203x
0.9991x
4.478x
9.478x
0.9994x
54.84x
0.9635x
1.319x
7.486x
51.6x
1.817x
0.8504x
1.337x
9.263x
2.096x
12.45x
1.233x
4.187x
1.033x
1.536x
1x
5.991x
2.302x
0.9528x
1.066x
Geometric means of paired median-time ratios; 3 measured runs per implementation. Missing or incomplete timings are excluded.
Methodology and reproducibility

One machine, two timing scopes

Apple M1 Max, 64 GiB RAM, macOS 26.6.2 (25G83), 10 logical CPUs. OpenMP and numerical libraries default to one worker. Codon's Fannkuch explicitly requests four OpenMP threads; its parallel Primes loop uses the one-thread default. Native compilation and input preparation finished before the serial timing sweep.

Pyperformance and Applications retain their original timing boundaries. Each measurement uses a fresh process, so allocation and any PyPy JIT work inside the timer are included. One preliminary process is excluded. NPBench uses one process per implementation, one warm-up, then three kernel-only measurements; Numba specialization, input reset, and output serialization are excluded.

These are software-stack comparisons, not isolated compiler comparisons. Native Codon links Apple Accelerate; NumPy and Numba use the libraries recorded under Setup. Numba fast math is disabled in every kernel and helper. Codon is compiled without -fast-math. Other upstream Numba options are retained. Results describe this hardware and these inputs, not a universal ranking.

Numba was remeasured on 2026-11-08, using the original input hashes for 52 kernels. MLP was remeasured on all three runtimes: its previously unseeded input now uses NumPy legacy RNG seed 42, shared across runtimes; its seeded weights are unchanged. A separate histogram update on 2026-11-08 uses the uniform implementation on all three runtimes. All other Codon and Python timings are retained from the original sweep.

Memory and output checks

NPBench uses identical initialized inputs and persistent pristine/working arrays. Working arrays are reset in place, with garbage collection outside the timer. A separate reset audit checks allocation and address stability. Live-heap observations are retained in the raw report and do not determine whether completed timings are displayed.

NPBench output checks use upstream pointwise tolerances or a relative L2-error threshold, with exact integer checks. Application values are compared with CPython; Chaos uses an exact PPM check. Completed timings are included when outputs differ, with a brief note on the affected benchmark. Rounding and the order of floating-point operations can affect iterative calculations; the original check results remain available in the raw report.

The process timeout is 900 seconds, including warm-up and output writing. 1 incomplete implementation run has no reported timing; the diagnostics are retained in the raw report.

Recorded environment

Codon
0.20.6
CPython
3.15.2
PyPy
8.0.1 (Python 3.12.15)
Clang
23.1.5
NumPy
2.5.4
Numba
0.68.1
SciPy
1.18.1
macOS SDK
14.5

Clang uses the matching macOS SDK libc++ headers and system runtime. The CUDA-only Codon Mandelbrot variant is not measured on this host; the existing CPU implementation is used instead.

Source and inputs

Codon commit 14aaa30ab594; local binary and source fingerprints are included in the raw report. NPBench commit f2d7f27d87ba, always the largest standard L preset.

TAQ uses the first 10 million lines of EQY_US_ALL_NBBO_20220301. Word count uses 5.442 MiB of input-text.clean.txt, ending at a complete line. Dataset hashes and array dimensions are recorded; external input files are not redistributed.

The Numba MLP source corrects an upstream softmax maximum-axis error. Azimuthal histogram integration uses the same portable weighted-histogram helpers across Codon, Python, and Numba. Python interprets the weighted loop; unweighted counts use each runtime's np.histogram. Each implementation has three measured samples. Other compatibility adaptations are listed per implementation. Exact executed kernel/application sources and raw samples accompany the results.