2014-11-20 4 views
5

मैं से कोड कॉपी:Clojure यात्रियों उदाहरण कोई महत्वपूर्ण speedup

http://clojure.org/transients

लेकिन मेरे परिणाम क्या पोस्ट किया गया था से signifiantly भिन्न होते हैं।

(defn vrange [n] 
    (loop [i 0 v []] 
    (if (< i n) 
     (recur (inc i) (conj v i)) 
     v))) 

(defn vrange2 [n] 
    (loop [i 0 v (transient [])] 
    (if (< i n) 
     (recur (inc i) (conj! v i)) 
     (persistent! v)))) 



(quick-bench (def v (vrange 1000000))) 
"Elapsed time: 459.59 msecs" 

(quick-bench (def v2 (vrange2 1000000))) 
"Elapsed time: 379.85 msecs" 

एक मामूली speedup है यही कारण है, लेकिन 8x बढ़ावा ऐसा कुछ भी उदाहरण डॉक्स में निहित? http://clojure.org/transients:

शुरू सर्वर मोड में जावा कहानी, लेकिन अभी भी डॉक्स की तरह कुछ भी बदल जाता है ..

(quick-bench (def v (vrange 1000000))) 
"Elapsed time: 121.14 msecs" 

(quick-bench (def v2 (vrange2 1000000))) 
"Elapsed time: 75.15 msecs" 

यह है कि लगातार कार्यान्वयन यहाँ यात्रियों के बारे में पोस्ट के बाद से सुधार हुआ है है?

ट्रांजिस्टर के साथ बढ़ावा देने की कमी में अन्य कारक क्या योगदान दे सकते हैं?

मैं ओबजु 12.04 पर ओपनजेडीके जावा संस्करण 1.7 का उपयोग कर रहा हूं। हो सकता है कि यह दस्तावेज़ों में प्रयुक्त (अनुमानित) हॉटस्पॉट 1.6 संस्करण से बहुत धीमा है? लेकिन क्या यह नहीं होगा कि दोनों परीक्षणों को एक ही अंतर के साथ कुछ निरंतर धीमा होना चाहिए?

उत्तर

1

आपके परिणाम ट्रांजिस्टर के साथ मेरे अनुभव के अनुरूप हैं। मैंने उन्हें काफी उपयोग किया है और मैं आमतौर पर 2x प्रदर्शन सुधार देखता हूं।

मैंने क्लोजर 1.6.0 और 1.7.0-अल्फा 3 के साथ उबंटू 12.04, ओपनजेडीके 1.7 पर इसकी कोशिश की। मुझे ट्रांजिस्टर के साथ 2x प्रदर्शन मिलता है, जो ओएसएक्स पर 1.8 ओरेकल जेवीएम के साथ 3x से थोड़ा कम है।

इसके अलावा उपरोक्त पृष्ठ क्लोजर 1.2 के समय से है, और तब से संग्रहों के प्रदर्शन में उल्लेखनीय सुधार हुआ है। मैंने 1.2 के साथ प्रयोग करने की कोशिश की लेकिन मानदंड इसके साथ काम नहीं करता है, इसलिए मुझे उस पृष्ठ की तरह समय का उपयोग करना पड़ा। जाहिर है परिणाम काफी परिवर्तनीय हैं (2x से 8x तक)। मुझे संदेह है कि प्रलेखन में उदाहरण चेरी उठाया गया हो सकता है।

+0

धन्यवाद डिएगो। यह वही था जो मैंने आशा की थी * कारण था। दूसरे शब्दों में, यह नहीं है कि दस्तावेज़ों में रिपोर्ट की तुलना में ट्रांजिस्टर धीमे होते हैं, यह है कि लगातार संग्रह तेजी से होते हैं। – Scott