Skip to content

Instantly share code, notes, and snippets.

@PragTob
Created April 8, 2019 08:50
Show Gist options
  • Save PragTob/3722dfb07ac6b1577d1fba33b9ffbec6 to your computer and use it in GitHub Desktop.
Save PragTob/3722dfb07ac6b1577d1fba33b9ffbec6 to your computer and use it in GitHub Desktop.
benchee 1.0 revisiting TCO
Operating System: Linux
CPU Information: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
Number of Available Cores: 8
Available memory: 15.61 GB
Elixir 1.8.1
Erlang 21.3.2
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 2 s
parallel: 1
inputs: Small (10 Thousand), Middle (100 Thousand), Big (1 Million), Bigger (5 Million), Giant (25 Million)
Estimated total run time: 3 min
Benchmarking body-recursive with input Small (10 Thousand)...
Benchmarking body-recursive with input Middle (100 Thousand)...
Benchmarking body-recursive with input Big (1 Million)...
Benchmarking body-recursive with input Bigger (5 Million)...
Benchmarking body-recursive with input Giant (25 Million)...
Benchmarking stdlib map with input Small (10 Thousand)...
Benchmarking stdlib map with input Middle (100 Thousand)...
Benchmarking stdlib map with input Big (1 Million)...
Benchmarking stdlib map with input Bigger (5 Million)...
Benchmarking stdlib map with input Giant (25 Million)...
Benchmarking tail-rec arg-order with input Small (10 Thousand)...
Benchmarking tail-rec arg-order with input Middle (100 Thousand)...
Benchmarking tail-rec arg-order with input Big (1 Million)...
Benchmarking tail-rec arg-order with input Bigger (5 Million)...
Benchmarking tail-rec arg-order with input Giant (25 Million)...
Benchmarking tail-recursive with input Small (10 Thousand)...
Benchmarking tail-recursive with input Middle (100 Thousand)...
Benchmarking tail-recursive with input Big (1 Million)...
Benchmarking tail-recursive with input Bigger (5 Million)...
Benchmarking tail-recursive with input Giant (25 Million)...
##### With input Small (10 Thousand) #####
Name ips average deviation median 99th %
tail-recursive 5.55 K 180.08 μs ±623.13% 167.78 μs 239.14 μs
body-recursive 5.01 K 199.75 μs ±480.63% 190.76 μs 211.24 μs
stdlib map 4.89 K 204.56 μs ±854.99% 190.86 μs 219.19 μs
tail-rec arg-order 4.88 K 205.07 μs ±691.94% 163.95 μs 258.95 μs
Comparison:
tail-recursive 5.55 K
body-recursive 5.01 K - 1.11x slower +19.67 μs
stdlib map 4.89 K - 1.14x slower +24.48 μs
tail-rec arg-order 4.88 K - 1.14x slower +24.99 μs
Memory usage statistics:
Name Memory usage
tail-recursive 224.03 KB
body-recursive 156.25 KB - 0.70x memory usage -67.78125 KB
stdlib map 156.25 KB - 0.70x memory usage -67.78125 KB
tail-rec arg-order 224.03 KB - 1.00x memory usage +0 KB
**All measurements for memory usage were the same**
##### With input Middle (100 Thousand) #####
Name ips average deviation median 99th %
body-recursive 473.16 2.11 ms ±145.33% 1.94 ms 6.18 ms
stdlib map 459.88 2.17 ms ±174.13% 2.05 ms 6.53 ms
tail-rec arg-order 453.26 2.21 ms ±245.66% 1.81 ms 6.83 ms
tail-recursive 431.01 2.32 ms ±257.76% 1.95 ms 6.44 ms
Comparison:
body-recursive 473.16
stdlib map 459.88 - 1.03x slower +0.0610 ms
tail-rec arg-order 453.26 - 1.04x slower +0.0928 ms
tail-recursive 431.01 - 1.10x slower +0.21 ms
Memory usage statistics:
Name Memory usage
body-recursive 1.53 MB
stdlib map 1.53 MB - 1.00x memory usage +0 MB
tail-rec arg-order 2.89 MB - 1.89x memory usage +1.36 MB
tail-recursive 2.89 MB - 1.89x memory usage +1.36 MB
**All measurements for memory usage were the same**
##### With input Big (1 Million) #####
Name ips average deviation median 99th %
stdlib map 43.63 22.92 ms ±59.63% 20.78 ms 38.76 ms
body-recursive 42.54 23.51 ms ±58.73% 21.11 ms 50.95 ms
tail-rec arg-order 41.68 23.99 ms ±83.11% 22.36 ms 35.93 ms
tail-recursive 40.02 24.99 ms ±82.12% 23.33 ms 55.25 ms
Comparison:
stdlib map 43.63
body-recursive 42.54 - 1.03x slower +0.59 ms
tail-rec arg-order 41.68 - 1.05x slower +1.07 ms
tail-recursive 40.02 - 1.09x slower +2.07 ms
Memory usage statistics:
Name Memory usage
stdlib map 15.26 MB
body-recursive 15.26 MB - 1.00x memory usage +0 MB
tail-rec arg-order 26.95 MB - 1.77x memory usage +11.70 MB
tail-recursive 26.95 MB - 1.77x memory usage +11.70 MB
**All measurements for memory usage were the same**
##### With input Bigger (5 Million) #####
Name ips average deviation median 99th %
stdlib map 8.89 112.49 ms ±44.68% 105.73 ms 421.33 ms
body-recursive 8.87 112.72 ms ±44.97% 104.66 ms 423.24 ms
tail-rec arg-order 8.01 124.79 ms ±40.27% 114.70 ms 425.68 ms
tail-recursive 7.59 131.75 ms ±40.89% 121.18 ms 439.39 ms
Comparison:
stdlib map 8.89
body-recursive 8.87 - 1.00x slower +0.23 ms
tail-rec arg-order 8.01 - 1.11x slower +12.30 ms
tail-recursive 7.59 - 1.17x slower +19.26 ms
Memory usage statistics:
Name Memory usage
stdlib map 76.29 MB
body-recursive 76.29 MB - 1.00x memory usage +0 MB
tail-rec arg-order 149.82 MB - 1.96x memory usage +73.53 MB
tail-recursive 149.82 MB - 1.96x memory usage +73.53 MB
**All measurements for memory usage were the same**
##### With input Giant (25 Million) #####
Name ips average deviation median 99th %
tail-rec arg-order 1.36 733.10 ms ±25.65% 657.07 ms 1099.94 ms
tail-recursive 1.28 780.13 ms ±23.89% 741.42 ms 1113.52 ms
stdlib map 1.25 800.63 ms ±27.17% 779.22 ms 1185.27 ms
body-recursive 1.23 813.35 ms ±28.45% 790.23 ms 1224.44 ms
Comparison:
tail-rec arg-order 1.36
tail-recursive 1.28 - 1.06x slower +47.03 ms
stdlib map 1.25 - 1.09x slower +67.53 ms
body-recursive 1.23 - 1.11x slower +80.25 ms
Memory usage statistics:
Name Memory usage
tail-rec arg-order 758.55 MB
tail-recursive 758.55 MB - 1.00x memory usage +0 MB
stdlib map 381.47 MB - 0.50x memory usage -377.08060 MB
body-recursive 381.47 MB - 0.50x memory usage -377.08060 MB
**All measurements for memory usage were the same**
# where did benchee write all the files
map_fun = fn i -> i + 1 end
inputs = [
{"Small (10 Thousand)", Enum.to_list(1..10_000)},
{"Middle (100 Thousand)", Enum.to_list(1..100_000)},
{"Big (1 Million)", Enum.to_list(1..1_000_000)},
{"Bigger (5 Million)", Enum.to_list(1..5_000_000)},
{"Giant (25 Million)", Enum.to_list(1..25_000_000)}
]
Benchee.run(
%{
"tail-recursive" => fn list -> MyMap.map_tco(list, map_fun) end,
"stdlib map" => fn list -> Enum.map(list, map_fun) end,
"body-recursive" => fn list -> MyMap.map_body(list, map_fun) end,
"tail-rec arg-order" => fn list -> MyMap.map_tco_arg_order(list, map_fun) end
},
memory_time: 2,
inputs: inputs,
formatters: [
Benchee.Formatters.Console,
{Benchee.Formatters.HTML, file: "bench/output/tco_focussed_detailed_inputs.html", auto_open: false}
]
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment