Reducers and pmap have different approaches to concurrency. pmap works a lot like map, except that instead of evaluating the seq one item at a time, it spins up N threads which work on the next N items in parallel. N is 2 + the number of CPU cores you have.
The reducers library works in a rather different way. It's important to understand that the reducers library is split into reduce functions and combine functions. The idea is that a collection is split up into equal parts, then given to reduce functions in separate threads. Finally, all the separate results are stuck back again by folding over the combine function. If you're just using something like: (into [] (r/map blur (vec indexes)) Then you're only using the reduce function. The parallelism is initiated by the fold, so instead you want: (r/foldcat (r/map blur (vec indexes)) By default, this will split the vector into pieces 512 in length, map "blur" over each piece in parallel, then fold the pieces back together again using the r/cat function, which is designed to be performant at concatenating the pieces of a fold back together again. My guess is that for your particular use-case, pmap is going to be faster. The reducers library shines when you start to get into situations that pmap can't handle. - James On 15 July 2015 at 04:02, Daniel Higginbotham <[email protected]> wrote: > I’ve been trying to better understand ways to increase the performance of > Clojure programs and I’ve run into an interesting issue with using the > reducers library. I’d love any help! The code I’m working on is at > https://github.com/flyingmachine/quil-pix/tree/4cce95390f5ac7a206cc14a8ec5a4a2492c813fc > > The issue I’m having is that reducers/map has the same performance as > core/map, and it doesn’t seem like that should be the case. (The current > code ( > https://github.com/flyingmachine/quil-pix/blob/4cce95390f5ac7a206cc14a8ec5a4a2492c813fc/src/quil_pix/blur.clj#L73) > uses mapv, but I’ve also tried just map.) pmap is ~3x faster. > > Surely reducers/map should be faster, but it doesn’t seem like I’ve done > something wrong? This is driving me crazy :) > > Daniel > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > 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 unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
