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