Skip to content

Instantly share code, notes, and snippets.

@eksperimental
Created May 12, 2022 04:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eksperimental/c9ed94e418b4caa7fe61aff65b18c836 to your computer and use it in GitHub Desktop.
Save eksperimental/c9ed94e418b4caa7fe61aff65b18c836 to your computer and use it in GitHub Desktop.
Optimization for Enum.sort_by/3 when sorter is `:desc`.
Elixir 1.14.0-dev
Erlang 24.3
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 5 s
reduction time: 0 ns
parallel: 1
inputs: keyword_100_desc, keyword_1000_desc, keyword_10000_desc, keyword_100000_desc, map_100_desc, map_1000_desc, map_10000_desc, map_100000_desc
Estimated total run time: 3.20 min
Benchmarking Enum.sort_by/3 with input keyword_100_desc ...
Benchmarking Enum.sort_by/3 with input keyword_1000_desc ...
Benchmarking Enum.sort_by/3 with input keyword_10000_desc ...
Benchmarking Enum.sort_by/3 with input keyword_100000_desc ...
Benchmarking Enum.sort_by/3 with input map_100_desc ...
Benchmarking Enum.sort_by/3 with input map_1000_desc ...
Benchmarking Enum.sort_by/3 with input map_10000_desc ...
Benchmarking Enum.sort_by/3 with input map_100000_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input keyword_100_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input keyword_1000_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input keyword_10000_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input keyword_100000_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input map_100_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input map_1000_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input map_10000_desc ...
Benchmarking Enum.Optimized.sort_by/3 with input map_100000_desc ...
##### With input keyword_100_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 56.27 K 17.77 μs ±72.82% 17.39 μs 18.50 μs
Enum.sort_by/3 35.73 K 27.98 μs ±98.65% 26.91 μs 49.46 μs
Comparison:
Enum.Optimized.sort_by/3 56.27 K
Enum.sort_by/3 35.73 K - 1.57x slower +10.21 μs
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 13.88 KB
Enum.sort_by/3 15.64 KB - 1.13x memory usage +1.76 KB
**All measurements for memory usage were the same**
##### With input keyword_1000_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 3.52 K 284.13 μs ±17.52% 277.54 μs 357.81 μs
Enum.sort_by/3 2.32 K 430.46 μs ±27.12% 417.77 μs 651.58 μs
Comparison:
Enum.Optimized.sort_by/3 3.52 K
Enum.sort_by/3 2.32 K - 1.51x slower +146.32 μs
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 160.49 KB
Enum.sort_by/3 201.92 KB - 1.26x memory usage +41.43 KB
**All measurements for memory usage were the same**
##### With input keyword_10000_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 246.17 4.06 ms ±7.35% 4.08 ms 4.77 ms
Enum.sort_by/3 167.08 5.99 ms ±7.49% 5.95 ms 8.42 ms
Comparison:
Enum.Optimized.sort_by/3 246.17
Enum.sort_by/3 167.08 - 1.47x slower +1.92 ms
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 1.80 MB
Enum.sort_by/3 2.65 MB - 1.47x memory usage +0.85 MB
**All measurements for memory usage were the same**
##### With input keyword_100000_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 9.80 102.04 ms ±11.82% 98.44 ms 148.10 ms
Enum.sort_by/3 5.08 196.91 ms ±16.43% 186.64 ms 272.10 ms
Comparison:
Enum.Optimized.sort_by/3 9.80
Enum.sort_by/3 5.08 - 1.93x slower +94.87 ms
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 24.04 MB
Enum.sort_by/3 30.57 MB - 1.27x memory usage +6.52 MB
**All measurements for memory usage were the same**
##### With input map_100_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 50.09 K 19.96 μs ±72.13% 19.57 μs 21.82 μs
Enum.sort_by/3 30.79 K 32.47 μs ±120.69% 31.12 μs 59.61 μs
Comparison:
Enum.Optimized.sort_by/3 50.09 K
Enum.sort_by/3 30.79 K - 1.63x slower +12.51 μs
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 17.86 KB
Enum.sort_by/3 24.27 KB - 1.36x memory usage +6.41 KB
**All measurements for memory usage were the same**
##### With input map_1000_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 3.20 K 312.07 μs ±29.54% 303.63 μs 382.33 μs
Enum.sort_by/3 2.17 K 461.87 μs ±20.54% 444.73 μs 639.84 μs
Comparison:
Enum.Optimized.sort_by/3 3.20 K
Enum.sort_by/3 2.17 K - 1.48x slower +149.79 μs
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 217.61 KB
Enum.sort_by/3 270.53 KB - 1.24x memory usage +52.92 KB
**All measurements for memory usage were the same**
##### With input map_10000_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 236.87 4.22 ms ±5.43% 4.20 ms 4.61 ms
Enum.sort_by/3 151.04 6.62 ms ±7.00% 6.55 ms 9.31 ms
Comparison:
Enum.Optimized.sort_by/3 236.87
Enum.sort_by/3 151.04 - 1.57x slower +2.40 ms
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 2.33 MB
Enum.sort_by/3 3.24 MB - 1.39x memory usage +0.92 MB
**All measurements for memory usage were the same**
##### With input map_100000_desc #####
Name ips average deviation median 99th %
Enum.Optimized.sort_by/3 10.32 96.86 ms ±12.71% 93.71 ms 136.38 ms
Enum.sort_by/3 7.33 136.49 ms ±13.92% 128.94 ms 209.11 ms
Comparison:
Enum.Optimized.sort_by/3 10.32
Enum.sort_by/3 7.33 - 1.41x slower +39.63 ms
Memory usage statistics:
Name Memory usage
Enum.Optimized.sort_by/3 27.91 MB
Enum.sort_by/3 38.03 MB - 1.36x memory usage +10.12 MB
**All measurements for memory usage were the same**
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment