Skip to content

Latest commit

 

History

History
46 lines (39 loc) · 2.64 KB

python-vs-arch.md

File metadata and controls

46 lines (39 loc) · 2.64 KB

Python package against arch

Generated by python/benchmarks/bench_vs_arch.py. Every number below comes from the one machine listed here; the ratios compare runs on that machine only and say nothing about another one.

The matched-work rows fit the same simulated series (GARCH(1,1) with Student-t(8) innovations, default_rng(7)) with the same specs: constant mean, sGARCH(p,q) and normal, Student-t or GED innovations. volengine runs with Context(threads=1) and var_init="backcast", the arch convention; arch runs with rescale=False and fit(disp="off"), one fit after the other. Each timing is the total wall time of all fits.

  • Machine: AMD Ryzen 7 5700X 8-Core Processor, 8 cores, 16 hardware threads, 32 GiB RAM, Windows-10-10.0.19045-SP0
  • Versions: volengine 0.1.0, arch 8.0.0, numpy 2.5.4, Python 3.14.7
  • Date: 2026-11-11
  • Work: 20 series of 5000 observations, 9 specs, 180 fits per library; median wall time of 5 repetitions.
Run Wall time (s) Fits per second Relative to arch on this machine
arch, sequential (matched work) 5.73 31.4 1.00x
volengine, threads=1 (matched work) 3.12 57.7 1.84x
volengine, threads=0 (all cores; not matched work) 0.56 319.1 10.15x
Spec Worst relative loglik difference over the series
sGARCH(1,1) norm 5.1e-11
sGARCH(1,1) std 3.4e-11
sGARCH(1,1) ged 4.3e-11
sGARCH(2,1) norm 1.0e-09
sGARCH(2,1) std 4.0e-10
sGARCH(2,1) ged 2.2e-09
sGARCH(1,2) norm 5.7e-09
sGARCH(1,2) std 1.2e-09
sGARCH(1,2) ged 9.6e-10

Notes:

  • Not measured yet: python/benchmarks/bench_vs_arch.py also times sGARCH(1,1) with sstd innovations against arch's skewt (the same family; the log-likelihoods are compared, not the parameterizations). The tables above predate that row and were not regenerated, so they show no number for it.
  • The optimizers differ (L-BFGS in VolEngine, SLSQP in arch), so the times include different numbers of iterations. The second table shows that both reach the same optimum: the largest relative difference of the log-likelihood over the 20 series is below 1e-4 for every spec (the script fails otherwise).
  • The threads=0 row is not matched work: arch does not parallelize a fit, so that row measures the batch parallelism of VolEngine, not the algorithms. Fits are bit-identical for any thread count.
  • The run was not isolated: a normal desktop session, no pinned cores and no fixed frequency.
  • Reproduce with VOLENGINE_LIB=<path to the library> python python/benchmarks/bench_vs_arch.py --out docs/performance/python-vs-arch.md in the python/.venv environment.