lean4-htt/tests/bench
2023-11-07 18:46:28 +01:00
..
inundation test: lake: add env & dep cfg benchmarks + cleanup 2023-09-22 20:31:48 -04:00
.gitignore test: lake: add build Init/Lean/Lake benchmark 2023-09-22 20:05:20 +02:00
accumulate_profile.py fix: accumulate_profile: accept category names containing digits (e.g. hygiened decl names) 2023-02-11 17:41:07 +01:00
arith_eval.ml
binarytrees.ghc-6.hs doc: fix typos 2021-03-07 15:06:02 +01:00
binarytrees.lean test: clean up binarytrees.lean 2023-01-19 14:44:20 +01:00
binarytrees.lean.args chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
binarytrees.lean.expected.out chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
binarytrees.ocaml-2.ml
binarytrees.st.hs test: add binarytrees.st benchmark 2023-01-19 14:44:20 +01:00
binarytrees.st.lean test: add binarytrees.st benchmark 2023-01-19 14:44:20 +01:00
binarytrees.st.mlton-2.sml test: add binarytrees.st benchmark 2023-01-19 14:44:20 +01:00
binarytrees.st.sml test: add binarytrees.st benchmark 2023-01-19 14:44:20 +01:00
binarytrees.st.swift test: add binarytrees.st benchmark 2023-01-19 14:44:20 +01:00
binarytrees.swift
binarytrees5.ml test: add binarytrees.st benchmark 2023-01-19 14:44:20 +01:00
binarytrees5_multicore.ml chore: more benchmarking setup 2023-01-17 13:28:05 +01:00
compile.sh feat: LLVM backend (#1837) 2022-12-30 12:45:30 +01:00
const_fold.hs
const_fold.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
const_fold.lean.args chore: lower const_fold inputs again to prevent stack overflow in sanitized build 2020-02-28 13:23:39 +01:00
const_fold.lean.expected.out chore: lower const_fold inputs again to prevent stack overflow in sanitized build 2020-02-28 13:23:39 +01:00
const_fold.ml
const_fold.sml
const_fold.swift
cross.yaml chore: fix more typos in comments 2023-10-08 14:37:34 -07:00
dag_hassorry_issue.lean chore: split up & simplify importModules 2023-08-31 15:37:33 -04:00
dag_hassorry_issue.lean.args chore: improve test 2023-07-11 19:19:42 -07:00
dag_hassorry_issue.lean.expected.out chore: improve test 2023-07-11 19:19:42 -07:00
deriv.hs
deriv.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
deriv.lean.args chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
deriv.lean.expected.out chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
deriv.ml
deriv.sml
deriv.swift
ex-50-50-1.leq test: new linear solver benchmark by Marc 2021-12-02 17:03:35 +01:00
flake.lock chore: update temci 2023-03-24 11:34:21 +01:00
flake.nix chore: Nix: use strings instead of URL literals (#2172) 2023-03-28 10:10:24 +02:00
full-stdlib.exec.yaml feat: separate benchmark for profiling the stdlib per-file 2020-10-29 11:53:03 +01:00
ghc-gc.py
lean-gc.py
liasolver.lean chore: ensure consistent (Unix) encoding for source files 2023-03-10 16:27:56 +01:00
liasolver.lean.args test: new linear solver benchmark by Marc 2021-12-02 17:03:35 +01:00
liasolver.lean.expected.out test: new linear solver benchmark by Marc 2021-12-02 17:03:35 +01:00
Makefile test: update parser benchmark, add to speedcenter suite 2023-08-08 18:40:19 +02:00
mlkit-gc.py
ocaml-gc.py chore: more benchmarking setup 2023-01-17 13:28:05 +01:00
parser.lean test: update parser benchmark, add to speedcenter suite 2023-08-08 18:40:19 +02:00
perf.py chore: update benchmark suite 2022-05-25 18:26:36 +02:00
qsort.hs chore: update benchmark suite 2022-05-25 18:26:36 +02:00
qsort.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
qsort.lean.args chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
qsort.lean.expected.out
qsort.ml test: more fair qsort.ml benchmark 2022-10-12 20:22:55 +02:00
qsort.sml
qsort.swift test: more fair qsort.ml benchmark 2022-10-12 20:22:55 +02:00
rbmap.hs chore: make rbmap.hs more similar to other implementations 2022-09-24 14:16:48 +02:00
rbmap.lean chore: modernize rbmap benchmarks a bit 2022-09-24 14:16:48 +02:00
rbmap.lean.args chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
rbmap.lean.expected.out chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
rbmap.ml
rbmap.sml
rbmap.swift
rbmap2.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
rbmap3.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
rbmap500k.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
rbmap_checkpoint.hs chore: make rbmap.hs more similar to other implementations 2022-09-24 14:16:48 +02:00
rbmap_checkpoint.lean chore: modernize rbmap benchmarks a bit 2022-09-24 14:16:48 +02:00
rbmap_checkpoint.lean.args chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
rbmap_checkpoint.lean.expected.out chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
rbmap_checkpoint.ml
rbmap_checkpoint.sml
rbmap_checkpoint.swift
rbmap_checkpoint2.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
rbmap_checkpoint2.sml
rbmap_checkpoint_cpp_lean3.cpp
rbmap_checkpoint_cpp_std.cpp
rbmap_cpp_lean3.cpp
rbmap_cpp_std.cpp
rbmap_fbip.lean feat: add rbmap_fbip benchmark 2022-10-06 17:26:43 -07:00
rbmap_library.lean chore: more RBMap cleanup 2022-10-06 17:26:43 -07:00
README.md chore: update benchmark suite 2022-05-25 18:26:36 +02:00
reduceMatch.lean perf: do not inhibit caching of default-level match reduction 2023-10-08 17:24:20 -07:00
report.py chore: safer bench script 2023-07-19 08:31:39 +02:00
run.sh
speedcenter.exec.velcom.yaml chore: add import Lean benchmark 2023-11-07 18:46:28 +01:00
speedcenter.yaml chore: fix more typos in comments 2023-10-08 14:37:34 -07:00
states35.lean chore: move states35 to bench directory 2022-04-09 15:46:28 -07:00
test_single.sh feat: LLVM backend (#1837) 2022-12-30 12:45:30 +01:00
unionfind.lean chore: remove command universes 2021-06-29 17:01:07 -07:00
unionfind.lean.args chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
unionfind.lean.expected.out chore: adjust "small" bench/ inputs to be reasonable for interpreter 2020-02-28 10:04:13 +01:00
unionfind_clean.lean
workspaceSymbols.lean test: benchmark workspace symbols search 2022-10-13 21:41:58 +02:00

Lean Benchmark Suites

This folder contains multiple small Lean programs for benchmarking used by two separate benchmark suites based on the temci benchmarking tool:

  • The light-weight "Speedcenter" suite benchmarks the current build of Lean. It can be used for quick comparisons on the cmdline and powers the Lean Speedcenter website.
  • The heavy-weight "Cross" suite benchmarks multiple Lean configurations and other functional compilers against each other and generates CSV and HTML reports from that. It was created for the paper "Counting Immutable Beans - Reference Counting Optimized for Purely Functional Programming" (IFL19).

Speedcenter Suite

Requirements:

  • A local Lean build in ../../build/release. Build at least the bin target.
  • temci. Using Nix, open a nix-shell in the project root directory to add a compatible version to your PATH. Alternatively, try pip3 install git+https://github.com/parttimenerd/temci.git.

To execute the suite and save the results in base.yaml, run (in this folder)

temci exec --config speedcenter.yaml --out base.yaml

Other interesting exec flags:

  • use --runs N to modify the default number of 10 runs per benchmark
  • use --included_blocks fast to excluded slow benchmarks like the stdlib benchmark. You can replace fast with any benchmark name or label in speedcenter.exec.yaml.

If you have multiple saved result files, you can compare them with

temci report --config speedcenter.yaml report1.yaml report2.yaml ...

Cross Suite

We recommend using Nix for building/obtaining all Lean variants and used compilers in a reproducible way. After installing Nix, running the benchmarks is as easy as

nix shell -c make

This will record 50 runs for each benchmark configuration (this can be changed with runs in cross.yaml), generate results in report_lean.csv and report_cross.csv, and print them to stdout in a tabulated format. It will also generate HTML reports in report/ comparing the time-based benchmarks.

In order to reduce noise in the benchmarking data, you may instead want to try calling make inside a temci shell:

nix shell -c temci short shell --sudo --preset usable --cpuset_active make

Using root powers, this will temporarily configure your machine similarly to the LLVM benchmarking recommendations and move all your other processes to a single CPU core.