tree: 31a2800008268022e08ceb393e90961da5edf2e5 [search]
  1. .gitignore
  2. accumulate_profile.py
  3. arith_eval.ml
  4. binarytrees.ghc-6.hs
  5. binarytrees.lean
  6. binarytrees.lean.args
  7. binarytrees.lean.expected.out
  8. binarytrees.ocaml-2.ml
  9. binarytrees.swift
  10. compile.sh
  11. const_fold.hs
  12. const_fold.lean
  13. const_fold.lean.args
  14. const_fold.lean.expected.out
  15. const_fold.ml
  16. const_fold.sml
  17. const_fold.swift
  18. cross.yaml
  19. deriv.hs
  20. deriv.lean
  21. deriv.lean.args
  22. deriv.lean.expected.out
  23. deriv.ml
  24. deriv.sml
  25. deriv.swift
  26. disable-st.patch
  27. ex-50-50-1.leq
  28. flake.lock
  29. flake.nix
  30. full-stdlib.exec.yaml
  31. ghc-gc.py
  32. lean-gc.py
  33. liasolver.lean
  34. liasolver.lean.args
  35. liasolver.lean.expected.out
  36. Makefile
  37. mlkit-gc.py
  38. ocaml-gc.py
  39. perf.py
  40. qsort.hs
  41. qsort.lean
  42. qsort.lean.args
  43. qsort.lean.expected.out
  44. qsort.ml
  45. qsort.sml
  46. qsort.swift
  47. rbmap.hs
  48. rbmap.lean
  49. rbmap.lean.args
  50. rbmap.lean.expected.out
  51. rbmap.ml
  52. rbmap.sml
  53. rbmap.swift
  54. rbmap2.lean
  55. rbmap3.lean
  56. rbmap500k.lean
  57. rbmap_checkpoint.hs
  58. rbmap_checkpoint.lean
  59. rbmap_checkpoint.lean.args
  60. rbmap_checkpoint.lean.expected.out
  61. rbmap_checkpoint.ml
  62. rbmap_checkpoint.sml
  63. rbmap_checkpoint.swift
  64. rbmap_checkpoint2.lean
  65. rbmap_checkpoint2.sml
  66. rbmap_checkpoint_cpp_lean3.cpp
  67. rbmap_checkpoint_cpp_std.cpp
  68. rbmap_cpp_lean3.cpp
  69. rbmap_cpp_std.cpp
  70. rbmap_fbip.lean
  71. rbmap_library.lean
  72. README.md
  73. report.py
  74. run.sh
  75. speedcenter.exec.velcom.yaml
  76. speedcenter.yaml
  77. states35.lean
  78. test_single.sh
  79. unionfind.lean
  80. unionfind.lean.args
  81. unionfind.lean.expected.out
  82. unionfind_clean.lean
  83. workspaceSymbols.lean
tests/bench/README.md

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.