lean4-htt/tests/bench
2019-11-07 17:47:58 +01:00
..
.gitignore chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
accumulate_profile.py chore(tests/bench/speedcenter.exec.yaml): stdlib: time imports 2019-07-05 15:54:35 +02:00
arith_eval.ml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
binarytrees.ghc-6.hs chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
binarytrees.lean chore: fix tests 2019-10-27 18:29:51 -07:00
binarytrees.lean.args test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
binarytrees.lean.expected.out test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
binarytrees.ocaml-2.ml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
binarytrees.swift feat(tests/bench): add safe binarytrees.swift from https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/binarytrees-swift-1.html 2019-05-30 19:33:38 +02:00
compile.sh perf(shell/CMakeLists.txt, tests/): define NDEBUG in leanc release builds 2019-08-27 16:54:29 +02:00
const_fold.hs chore(tests/bench): rename benchmarks 2019-05-30 16:25:41 +02:00
const_fold.lean chore(tests/bench): parameterize all benchmarks 2019-08-29 18:38:39 +02:00
const_fold.lean.args test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
const_fold.lean.expected.out test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
const_fold.ml chore(tests/bench): rename benchmarks 2019-05-30 16:25:41 +02:00
const_fold.sml chore(tests/bench): rename benchmarks 2019-05-30 16:25:41 +02:00
const_fold.swift chore(tests/bench): rename benchmarks 2019-05-30 16:25:41 +02:00
cross.yaml test(tests/bench): further updates 2019-09-25 11:03:14 +02:00
default.nix chore: update benchmark packages 2019-11-07 17:47:58 +01:00
deriv.hs chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
deriv.lean chore(tests/bench): parameterize all benchmarks 2019-08-29 18:38:39 +02:00
deriv.lean.args test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
deriv.lean.expected.out test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
deriv.ml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
deriv.sml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
deriv.swift test(tests/bench): add deriv.swift 2019-05-30 11:34:58 -07:00
frontend_test.lean chore(tests/bench): fix benchmarks 2019-06-30 13:29:23 +02:00
ghc-gc.py chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
lean-gc.py chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
Makefile test(tests/bench): further updates 2019-09-25 11:03:14 +02:00
mlkit-gc.py chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
nixpkgs.nix chore: update benchmark packages 2019-11-07 17:47:58 +01:00
ocaml-gc.py chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
perf.py chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
qsort.hs chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
qsort.lean chore: fix tests 2019-10-27 18:29:51 -07:00
qsort.lean.args test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
qsort.lean.expected.out test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
qsort.ml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
qsort.sml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
qsort.swift feat(tests/bench): add qsort.swift 2019-05-31 00:40:09 +02:00
rbmap.hs chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
rbmap.lean fix: file and import names, tests and stage0 2019-10-04 17:04:02 -07:00
rbmap.lean.args test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
rbmap.lean.expected.out test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
rbmap.library.lean chore(*): update equation syntax in files and old parser 2019-08-09 11:11:34 +02:00
rbmap.ml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
rbmap.sml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
rbmap.swift tests(tests/bench): add rbmap.swift 2019-05-30 14:47:06 -07:00
rbmap2.lean chore(tests/bench): fix benchmarks 2019-08-10 12:52:42 +02:00
rbmap3.lean chore(*): update equation syntax in files and old parser 2019-08-09 11:11:34 +02:00
rbmap4.lean chore(tests/bench): fix benchmarks 2019-08-10 12:52:42 +02:00
rbmap500k.lean chore(tests/bench/rbmap500k): add new test 2019-09-11 18:01:56 -07:00
rbmap_checkpoint.hs chore(tests/bench/rbmap_checkpoint): myLen version for GHC 2019-05-30 07:35:22 -07:00
rbmap_checkpoint.lean fix: file and import names, tests and stage0 2019-10-04 17:04:02 -07:00
rbmap_checkpoint.lean.args test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
rbmap_checkpoint.lean.expected.out test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
rbmap_checkpoint.ml test(tests/bench/rbmap_checkpoint): OCaml version using myLen 2019-05-30 07:40:53 -07:00
rbmap_checkpoint.sml chore(tests/bench/rbmap_checkpoint): use myLean 2019-05-30 07:30:07 -07:00
rbmap_checkpoint.swift test(tests/bench/rbmap_checkpoint): add swift version 2019-05-30 14:35:58 -07:00
rbmap_checkpoint2.lean chore(tests/bench): fix benchmarks 2019-08-10 12:52:42 +02:00
rbmap_checkpoint2.sml chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
rbmap_checkpoint_cpp_lean3.cpp test(tests/bench): add C++ versions of rbmap benchmarks 2019-06-22 06:58:27 -07:00
rbmap_checkpoint_cpp_std.cpp test(tests/bench): add C++ versions of rbmap benchmarks 2019-06-22 06:58:27 -07:00
rbmap_cpp_lean3.cpp test(tests/bench): add C++ versions of rbmap benchmarks 2019-06-22 06:58:27 -07:00
rbmap_cpp_std.cpp test(tests/bench): add C++ versions of rbmap benchmarks 2019-06-22 06:58:27 -07:00
README.md doc(tests/bench/README): update speedcenter URL 2019-07-05 16:23:07 +02:00
report.py chore(tests/bench): update cross suite 2019-09-24 22:42:25 +02:00
run.sh chore(tests/bench): move out from playground/ 2019-05-29 16:33:50 +02:00
speedcenter.exec.yaml chore(tests/bench/speedcenter.exec.yaml): fix deriv speedcenter benchmark 2019-09-03 21:43:50 +02:00
speedcenter.yaml chore(tests/bench/speedcenter.yaml): update temci config 2019-10-02 14:14:49 +02:00
test_single.sh chore: revert "test: capture stderr as well" 2019-10-29 19:55:48 +01:00
unionfind.lean refactor(library/init/data/array): new name convention for Array functions 2019-10-01 16:46:05 -07:00
unionfind.lean.args test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
unionfind.lean.expected.out test(tests/bench): add benchmarks as regular ctests with lowered inputs 2019-09-02 10:52:24 +02:00
unionfind_clean.lean chore(frontends/lean): use => instead of := in match-expressions 2019-07-04 11:38:38 -07: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" (to appear).

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 frontend 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 --run make

This will record 50 runs for each benchmark configuration (this can be changed with min_runs in temci.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 --run "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.