Je ne fais que quelques tests de performance avec clojure en utilisant pmap et j'aimerais pouvoir contrôler le nombre de threads utilisés avec pmap. Je sais qu'en utilisant quelque chose comme OpenMP on peut définir le nombre de threads en utilisant omp_set_num_threads(). Je me demandais s'il y aurait quelque chose de similaire dans le clojure.Existe-t-il un moyen de contrôler le nombre de threads utilisés avec pmap?
6
A
Répondre
7
Code est ici pour 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))))
Comme vous pouvez le voir, pmap
prend tous les processeurs disponibles et les utilise de manière cyclique. Donc, non, il n'y a aucun moyen de définir le nombre de threads ... mais vous pouvez toujours écrire votre propre pmap
, qui fournira une telle fonctionnalité.