user=> (use '[criterium.core])
nil
user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a)) ;;2 operations
Evaluation count : 125829120 in 60 samples of 2097152 calls.
Execution time mean : 488.826554 ns
Execution time std-deviation : 19.952095 ns
Execution time lower quantile : 459.910320 ns ( 2.5%)
Execution time upper quantile : 527.008269 ns (97.5%)
nil
user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3
nil 6 'a)))
Evaluation count : 97399860 in 60 samples of 1623331 calls.
Execution time mean : 639.789263 ns
Execution time std-deviation : 26.265080 ns
Execution time lower quantile : 597.753127 ns ( 2.5%)
Execution time upper quantile : 687.838668 ns (97.5%)
nil
user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a 0 "z" 2 5)) ;;4
operations
Evaluation count : 68275920 in 60 samples of 1137932 calls.
Execution time mean : 901.407416 ns
Execution time std-deviation : 35.682637 ns
Execution time lower quantile : 851.060950 ns ( 2.5%)
Execution time upper quantile : 970.492949 ns (97.5%)
Found 1 outliers in 60 samples (1.6667 %)
low-severe 1 (1.6667 %)
Variance from outliers : 25.4849 % Variance is moderately inflated by
outliers
nil
user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3
nil 6 'a 0 "z" 2 5)))
Evaluation count : 68844120 in 60 samples of 1147402 calls.
Execution time mean : 893.798444 ns
Execution time std-deviation : 24.566655 ns
Execution time lower quantile : 848.307600 ns ( 2.5%)
Execution time upper quantile : 952.841308 ns (97.5%)
Found 13 outliers in 60 samples (21.6667 %)
low-severe 7 (11.6667 %)
low-mild 6 (10.0000 %)
Variance from outliers : 14.2244 % Variance is moderately inflated by
outliers
nil
user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a 0 "z" 2 5 4 (atom
[]) 7 "v")) ;;6 operations
Evaluation count : 39783840 in 60 samples of 663064 calls.
Execution time mean : 1.480511 us
Execution time std-deviation : 50.249443 ns
Execution time lower quantile : 1.425053 us ( 2.5%)
Execution time upper quantile : 1.591407 us (97.5%)
nil
user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3
nil 6 'a 0 "z" 2 5 4 (atom []) 7 "v")))
Evaluation count : 44755020 in 60 samples of 745917 calls.
Execution time mean : 1.358394 us
Execution time std-deviation : 49.723547 ns
Execution time lower quantile : 1.306456 us ( 2.5%)
Execution time upper quantile : 1.473882 us (97.5%)
nil
user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a 0 "z" 2 5 4 (atom
[]) 7 "v" 5 1200 8 -1111)) ;;8 operations
Evaluation count : 31457280 in 60 samples of 524288 calls.
Execution time mean : 1.907389 us
Execution time std-deviation : 74.523511 ns
Execution time lower quantile : 1.822336 us ( 2.5%)
Execution time upper quantile : 2.076044 us (97.5%)
nil
user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3
nil 6 'a 0 "z" 2 5 4 (atom []) 7 "v" 5 1200 8 -1111)))
Evaluation count : 37739640 in 60 samples of 628994 calls.
Execution time mean : 1.623599 us
Execution time std-deviation : 68.677518 ns
Execution time lower quantile : 1.529454 us ( 2.5%)
Execution time upper quantile : 1.777040 us (97.5%)
Found 1 outliers in 60 samples (1.6667 %)
low-severe 1 (1.6667 %)
Variance from outliers : 28.6901 % Variance is moderately inflated by
outliers
nil
etc etc...
you get the idea...conclusion: there is no real benefit to using
transients for less than 6 operations...
Jim
On 08/11/12 23:04, Philip Potter wrote:
Share the benchmark!
In theory, conversion to and from transients should be constant time
operations, but it would not surprise me if in practice transients
aren't universally faster than persistent.
Performance in different environments varies wildly, so I would doubt
results from a small benchmark on a single machine are universally
applicable.
Benchmarking is hard, particularly on the jvm. Caching and dynamic
inlining and Hotspot confuse matters greatly.
Phil
On Nov 8, 2012 10:49 PM, "Jim - FooBar();" <jimpil1...@gmail.com
<mailto:jimpil1...@gmail.com>> wrote:
Some quick benchmarking that I did, showed that it is actually
more expensive to convert to transient, conj/assoc and convert
back to persistent than the regular conj/assoc unless you want to
do more than 8 operations at a time (preferably more than that).
My experiments were on vectors and the vararg version of assoc/assoc!.
any thoughts? would you agree?
Jim
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
<mailto:clojure@googlegroups.com>
Note that posts from new members are moderated - please be patient
with your first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
<mailto:clojure%2bunsubscr...@googlegroups.com>
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient
with your first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en