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