Clojure pmap and reducers.


(require '[clojure.core.reducers :as r])

;; Simplest way to do parallel computation: pmap
;; Note: reduce isn't parallel
(reduce + (pmap inc (range 100000000)))

;; Clojure reducers: compute in paralllel

;; They partition the sequence to place on different cores.
;; They visit each element once, applying all the required
;; finctions (in this case, inc and a choice based on even?)
(r/fold + (r/filter even? (r/map inc [1 1 1 2])))

;(time (reduce + (filter even? (map inc (range 100000000)))))

;(time (r/fold + (r/filter even? (r/map inc (range 100000000)))))

;(reduce +' (range 10000000000))
;; "Elapsed time: 598499.828637 msecs"
;(time (reduce +' (range 10000000000N)))

;;"Elapsed time: 619939.91323 msecs":
;(time (r/fold +' (range 10000000000N)))

CSci 4651 course web site.