On Dec 8, 2012, at 1:28 PM, Paul deGrandis wrote:

> My experiences in the past are similar to the numbers that Jim is reporting.
> 
> I have recently been centering most of my crunching code around reducers.
> Is it possible for you to cook up a small representative test using 
> reducers+fork/join (and potentially primitives in the intermediate steps)?
> 
> Perhaps it can shed some light on contention or chunking issues (and 
> eliminate some of the allocation concerns).

Just tried, my first foray into reducers, but I must not be understanding 
something correctly:

  (time (r/map burn (doall (range 4)))) 

returns in less than a second on my macbook pro, whereas

  (time (doall (map burn (range 4)))) 

takes nearly a minute.

This feels like unforced laziness (although it's not quite that fast), but 
clojure.core.reducers/map involves no laziness, right?

I think my burn function (reproduced below for convenience) forces all of the 
laziness in there... 

So what am I doing wrong?

BTW the runs described in this message use Clojure 1.5.0-alpha3 -- the ones in 
previous messages in this thread used Clojure 1.3.0.

 -Lee

(defn burn 
  ([] (loop [i 0
             value '()]
        (if (>= i 10000)
          (count (last (take 10000 (iterate reverse value))))
          (recur (inc i)
                 (cons 
                   (* (int i) 
                      (+ (float i) 
                         (- (int i) 
                            (/ (float i) 
                               (inc (int i))))))
                   value)))))
  ([_] (burn)))

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