https://gist.github.com/918487

On Wed, Apr 13, 2011 at 11:56 AM, Meikel Brandmeyer <m...@kotka.de> wrote:
> Hmm…
>
> I did the following timings with criterium. d is a random data structure 
> generated by virtue of the following function:
>
> user=> (defn data
>         [size]
>         (let [l  (rand-int size)
>               l2 (/ l 2)]
>           (repeatedly l #(array-map :a 1 :b 2 :c (vec (data l2))))))
>
> The test data got realised with doall, but I also ran each of the functions a 
> few times over it. So everything was realised for sure before the tests 
> started.
>
> I also tested a version with inlined into:
>
> (defn flatten-maps-eager2
>  [coll]
>  (persistent!
>    (reduce #(reduce conj! (conj! %1 (dissoc %2 :c)) (flatten-maps-eager2 (get 
> %2 :c))) (transient []) coll)))
>
> Here are the measurements. Note that for the eager and recur versions there 
> is no doall necessary, because the return data structures.
>
> user=> (bench (doall (flatten-maps d)))
> Evaluation count             : 57840
> Execution time mean          : 1,045629 ms  95,0% CI: (1,045530 ms, 1,045765 
> ms)
> Execution time std-deviation : 416,024442 us  95,0% CI: (405,457656 us, 
> 427,418394 us)
>
> Found 6 outliers in 60 samples (10,0000 %)
>        low-severe       1 (1,6667 %)
>        low-mild         5 (8,3333 %)
>  Variance from outliers : 1,6389 % Variance is slightly inflated by outliers
> nil
> user=> (bench (doall (flatten-maps-lazy d)))
> Evaluation count             : 275280
> Execution time mean          : 219,934394 us  95,0% CI: (219,924143 us, 
> 219,943752 us)
> Execution time std-deviation : 54,626453 us  95,0% CI: (54,499291 us, 
> 54,750512 us)
> nil
> user=> (bench (flatten-maps-eager d))
> Evaluation count             : 163080
> Execution time mean          : 369,182119 us  95,0% CI: (369,171634 us, 
> 369,192372 us)
> Execution time std-deviation : 67,095741 us  95,0% CI: (66,431157 us, 
> 67,622404 us)
>
> Found 3 outliers in 60 samples (5,0000 %)
>        low-severe       3 (5,0000 %)
>  Variance from outliers : 1,6389 % Variance is slightly inflated by outliers
> nil
> user=> (bench (flatten-maps-eager2 d))
> Evaluation count             : 246420
> Execution time mean          : 243,384526 us  95,0% CI: (243,382278 us, 
> 243,386413 us)
> Execution time std-deviation : 17,938221 us  95,0% CI: (17,792706 us, 
> 18,033994 us)
>
> Found 4 outliers in 60 samples (6,6667 %)
>        low-severe       3 (5,0000 %)
>        low-mild         1 (1,6667 %)
>  Variance from outliers : 1,6389 % Variance is slightly inflated by outliers
> nil
> user=> (bench (flatten-maps-recur d))
> Evaluation count             : 203040
> Execution time mean          : 296,240051 us  95,0% CI: (296,234353 us, 
> 296,247153 us)
> Execution time std-deviation : 43,347314 us  95,0% CI: (43,205794 us, 
> 43,493026 us)
> nil
>
> As you can see the lazy version is the fastest. Only the "inline'd into" 
> version comes close. The recur version does also pretty well. But the 
> original flatten-maps is far off.
>
> And now: please someone explain this to me. :]
>
> Sincerely
> Meikel
>
> --
> 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



-- 
And what is good, Phaedrus,
And what is not good—
Need we ask anyone to tell us these things?

-- 
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