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

Reply via email to