Is there a way to control the number of threads used with pmap?

I am just doing performance testing with clojure using pmap, and I would like to be able to control the number of threads used with pmap. I know that when using something like OpenMP, you can set the number of threads using omp_set_num_threads (). I was wondering if there would be anything like this in clojure.

+6
clojure
source share
1 answer

Here is the code for pmap :

 (defn pmap "Like map, except f is applied in parallel. Semi-lazy in that the parallel computation stays ahead of the consumption, but doesn't realize the entire result unless required. Only useful for computationally intensive functions where the time of f dominates the coordination overhead." ([f coll] (let [n (+ 2 (.. Runtime getRuntime availableProcessors)) rets (map #(future (f %)) coll) step (fn step [[x & xs :as vs] fs] (lazy-seq (if-let [s (seq fs)] (cons (deref x) (step xs (rest s))) (map deref vs))))] (step rets (drop n rets)))) 

As you can see, pmap accepts all available processors and uses them cyclically. So, no, there is no way to set the number of threads ... but you can always write your own pmap that will provide such functionality.

+7
source share

All Articles