Host
Intel Core Ultra 9 285K · 24 cores
Platform
linux/amd64
Go
go1.26.0
CPython
python:3.13-slim
PyPy
pypy:3.10-slim
Runs / combo
10 + 2 warmup

Mandelbrot (FP)

Escape-time render of the Mandelbrot set at 200×200 with 80 iters/pixel. Pure float64 tight loop.

Runtime · median per inner-loop window

median of 10 runs

Native Gocompiled
3.38 ms0.12×
Piko interpbytecode VM
28.8 msbaseline
CPython 3.13bytecode VM
140 ms4.86×
PyPy 7.3tracing JIT
11.0 ms0.38×
Ttengobytecode VM
269 ms9.36×
Sscriggobytecode VM
199 ms6.93×
Mmvmbytecode VM
291 ms10.1×
YyaegiAST walker
237 ms8.24×

Full statistics

RunnerNCompileRuntimeP95StddevRSSvs pikoStatus
Native Gocompiled10181 ms3.38 ms3.39 ms4.30 µs69 MiB0.12×OK
Piko interpbytecode VM10735 µs28.8 ms29.4 ms226 µs82 MiB1.00×OK
CPython 3.13bytecode VM10262 µs140 ms147 ms3.26 msn/a4.86×OK
PyPy 7.3tracing JIT10237 µs11.0 ms11.3 ms175 µsn/a0.38×OK
tengobytecode VM10208 µs269 ms278 ms3.54 ms1.45 GiB9.36×OK
scriggobytecode VM10236 µs199 ms230 ms9.41 ms72 MiB6.93×OK
mvmbytecode VM10274 µs291 ms322 ms22.1 ms62 MiB10.1×OK
yaegiAST walker10304 µs237 ms266 ms15.0 ms66 MiB8.24×OK
Workload & symmetry rules

Workload

For each of 200×200 pixels: iterate the Mandelbrot recurrence z = z² + c up to 80 times, count the iteration at which |z| > 2. Output the sum of iteration counts so canonical hashing doesn't depend on FP equality.

Symmetry rules

  • Pure float64 scalar arithmetic (no complex type, no numpy, no math.cmath).
  • Inner loop manually unrolled per the README's reference shape; no language-specific shortcuts.

Why this benchmark exists

The one shape of work missing from the rest of the suite: a tight float64 inner loop. This is where piko's typed float register bank pays its biggest dividend.

Source code