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

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.