Skip to content

Instantly share code, notes, and snippets.

@borkdude
Last active February 26, 2019 09:59
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 borkdude/b6e52bc1bd32512aa43015724cda46da to your computer and use it in GitHub Desktop.
Save borkdude/b6e52bc1bd32512aa43015724cda46da to your computer and use it in GitHub Desktop.
Benchmark of merge optimization
$ clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.10.0"} criterium/criterium {:mvn/version "RELEASE"}}}'
Clojure 1.10.0
user=> (use 'criterium.core)
nil
user=> (defn merge-benchmark [size] (println "size: " size) (let [m1 (zipmap (range size) (range size)) m2 (zipmap (range size (* 2 size)) (range size (* 2 size)))] (println (type m1) (type m2)) (quick-bench (merge m1 m2))))
#'user/merge-benchmark
user=> (doseq [n [1 16 32 64 128 1000 2000]] (merge-benchmark n))
size: 1
clojure.lang.PersistentArrayMap clojure.lang.PersistentArrayMap
Evaluation count : 2278992 in 6 samples of 379832 calls.
Execution time mean : 267.735354 ns
Execution time std-deviation : 2.032080 ns
Execution time lower quantile : 265.246928 ns ( 2.5%)
Execution time upper quantile : 270.062419 ns (97.5%)
Overhead used : 1.691753 ns
size: 16
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 195258 in 6 samples of 32543 calls.
Execution time mean : 3.101732 µs
Execution time std-deviation : 41.550555 ns
Execution time lower quantile : 3.047295 µs ( 2.5%)
Execution time upper quantile : 3.151726 µs (97.5%)
Overhead used : 1.691753 ns
size: 32
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 145488 in 6 samples of 24248 calls.
Execution time mean : 4.086154 µs
Execution time std-deviation : 70.547795 ns
Execution time lower quantile : 3.993141 µs ( 2.5%)
Execution time upper quantile : 4.169427 µs (97.5%)
Overhead used : 1.691753 ns
size: 64
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 69894 in 6 samples of 11649 calls.
Execution time mean : 8.814710 µs
Execution time std-deviation : 137.109623 ns
Execution time lower quantile : 8.674701 µs ( 2.5%)
Execution time upper quantile : 8.987803 µs (97.5%)
Overhead used : 1.691753 ns
size: 128
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 30282 in 6 samples of 5047 calls.
Execution time mean : 19.334908 µs
Execution time std-deviation : 249.280722 ns
Execution time lower quantile : 19.058663 µs ( 2.5%)
Execution time upper quantile : 19.673586 µs (97.5%)
Overhead used : 1.691753 ns
size: 1000
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 3486 in 6 samples of 581 calls.
Execution time mean : 177.644876 µs
Execution time std-deviation : 4.288210 µs
Execution time lower quantile : 172.402468 µs ( 2.5%)
Execution time upper quantile : 182.871716 µs (97.5%)
Overhead used : 1.691753 ns
size: 2000
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 1704 in 6 samples of 284 calls.
Execution time mean : 355.159194 µs
Execution time std-deviation : 6.955945 µs
Execution time lower quantile : 350.151102 µs ( 2.5%)
Execution time upper quantile : 365.940379 µs (97.5%)
Overhead used : 1.691753 ns
nil
user=>
$ clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.11.0-master-SNAPSHOT"} criterium/criterium {:mvn/version "RELEASE"}}}'
Clojure 1.11.0-master-SNAPSHOT
user=> (use 'criterium.core)
nil
user=> (defn merge-benchmark [size] (println "size: " size) (let [m1 (zipmap (range size) (range size)) m2 (zipmap (range size (* 2 size)) (range size (* 2 size)))] (println (type m1) (type m2)) (quick-bench (merge m1 m2))))
#'user/merge-benchmark
user=> (doseq [n [1 16 32 64 128 1000 2000]] (merge-benchmark n))
size: 1
clojure.lang.PersistentArrayMap clojure.lang.PersistentArrayMap
Evaluation count : 2236644 in 6 samples of 372774 calls.
Execution time mean : 265.504720 ns
Execution time std-deviation : 4.490274 ns
Execution time lower quantile : 261.761963 ns ( 2.5%)
Execution time upper quantile : 272.758069 ns (97.5%)
Overhead used : 1.696471 ns
Found 1 outliers in 6 samples (16.6667 %)
low-severe 1 (16.6667 %)
Variance from outliers : 13.8889 % Variance is moderately inflated by outliers
size: 16
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 171252 in 6 samples of 28542 calls.
Execution time mean : 3.549819 µs
Execution time std-deviation : 81.203544 ns
Execution time lower quantile : 3.470199 µs ( 2.5%)
Execution time upper quantile : 3.651267 µs (97.5%)
Overhead used : 1.696471 ns
size: 32
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 104862 in 6 samples of 17477 calls.
Execution time mean : 5.864183 µs
Execution time std-deviation : 142.095835 ns
Execution time lower quantile : 5.699729 µs ( 2.5%)
Execution time upper quantile : 6.081355 µs (97.5%)
Overhead used : 1.696471 ns
Found 1 outliers in 6 samples (16.6667 %)
low-severe 1 (16.6667 %)
Variance from outliers : 13.8889 % Variance is moderately inflated by outliers
size: 64
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 66924 in 6 samples of 11154 calls.
Execution time mean : 9.253048 µs
Execution time std-deviation : 132.809578 ns
Execution time lower quantile : 9.110365 µs ( 2.5%)
Execution time upper quantile : 9.459033 µs (97.5%)
Overhead used : 1.696471 ns
Found 1 outliers in 6 samples (16.6667 %)
low-severe 1 (16.6667 %)
Variance from outliers : 13.8889 % Variance is moderately inflated by outliers
size: 128
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 29424 in 6 samples of 4904 calls.
Execution time mean : 20.720593 µs
Execution time std-deviation : 395.289432 ns
Execution time lower quantile : 20.321576 µs ( 2.5%)
Execution time upper quantile : 21.185063 µs (97.5%)
Overhead used : 1.696471 ns
size: 1000
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 2928 in 6 samples of 488 calls.
Execution time mean : 212.756543 µs
Execution time std-deviation : 2.406547 µs
Execution time lower quantile : 210.100174 µs ( 2.5%)
Execution time upper quantile : 215.383094 µs (97.5%)
Overhead used : 1.696471 ns
size: 2000
clojure.lang.PersistentHashMap clojure.lang.PersistentHashMap
Evaluation count : 1530 in 6 samples of 255 calls.
Execution time mean : 404.907863 µs
Execution time std-deviation : 3.297709 µs
Execution time lower quantile : 400.980580 µs ( 2.5%)
Execution time upper quantile : 407.854435 µs (97.5%)
Overhead used : 1.696471 ns
nil
user=>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment