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