2010-12-16 12 views
6

मैं सिर्फ pmap का उपयोग करके क्लोजर के साथ कुछ प्रदर्शन परीक्षण कर रहा हूं और मैं pmap के साथ उपयोग किए जा रहे धागे की संख्या को नियंत्रित करने में सक्षम होना चाहता हूं। मुझे पता है कि ओपनएमपी जैसे कुछ का उपयोग करते समय omp_set_num_threads() का उपयोग करके धागे की संख्या निर्धारित कर सकते हैं। मैं सोच रहा था कि क्लोजर में कुछ भी समान होगा।क्या pmap के साथ इस्तेमाल किए गए धागे की संख्या को नियंत्रित करने का कोई तरीका है?

उत्तर

7

यहाँ 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)))) 

आप देख सकते हैं, pmap सभी उपलब्ध प्रोसेसर लेता और उन्हें चक्रीय उपयोग करता है। तो, नहीं, धागे की संख्या निर्धारित करने का कोई तरीका नहीं है ... लेकिन आप हमेशा अपना खुद का pmap लिख सकते हैं, जो ऐसी कार्यक्षमता प्रदान करेगा।

संबंधित मुद्दे

 संबंधित मुद्दे