2011-12-13 3 views
7

क्या scalacl plugin का उपयोग करने का कोई भी विपक्ष है?सरणी प्रदर्शन (स्केलैक प्लगइन) के साथ स्कैला ऑपरेशंस

मैं अपनी परियोजना में स्कैला का उपयोग करने की योजना बना रहा हूं। मैंने निष्पादन के समय को देखने के लिए स्कैला में थोड़ा सा कोड लिखा है।

(1 to 1000000).map(1 + _).sum 

1. प्लगइन

बिना कुछ इस तरह करने के लिए संकलित किया गया है: 375 के बारे में एमएस

2. scalacl प्लगइन के साथ में

BoxesRunTime.unboxToInt(((TraversableOnce)Predef..MODULE$.intWrapper(1).to(1000000).map(new MyScala..anonfun.1(), IndexedSeq..MODULE$.canBuildFrom())).sum(Numeric.IntIsIntegral..MODULE$)); 

और चलाने

int i = 1; 
int j = 1000000; 
int k = j; 
int m = i; 
for (VectorBuilder localVectorBuilder = new VectorBuilder(); m <= k;) { 
    int n = m; 
    localVectorBuilder.$plus$eq(BoxesRunTime.boxToInteger(1 + n)); 
    m += 1; 
} 
int a = BoxesRunTime.unboxToInt(localVectorBuilder.result().sum(Numeric.IntIsIntegral..MODULE$)); 

259 एमएस

+2

30% का सुधार ज्यादा नहीं है। मैंने अपने कोड के एक हिस्से को अनुकूलित किया, जो अब 100x स्पीड-अप के लिए सरणी और लूप्स का उपयोग कर रहा है। Idiomatic Scala वास्तव में धीमा हो सकता है। उदाहरण के लिए यदि आप मुक्केबाजी से छुटकारा पा लेते हैं, तो आपको कुछ और प्रभावशाली मिलेगा। – ziggystar

+0

बीटीडब्ल्यू, 'रेंज # योग' अब ट्रंक में अनुकूलित है और रैखिक 'ओ (एन)' के बजाय निरंतर समय 'ओ (एन) 'में चलता है। एल्गोरिदमिक सुधार सबसे अधिक समय के लिए बेहतर हैं। – soc

उत्तर

10

संभव विपक्ष मैं के बारे में सोच सकते हैं:

1) पाश अनुकूलन काम करने के लिए प्रकट होता है और डेवलपर बहुत सक्षम लगता है, लेकिन यह "के बारे में ScalaCL" स्क्रीन में मोटे अक्षरों में कहते हैं, " ScalaCL उत्पादन तैयार नहीं है! "। दूसरे शब्दों में, आप एक छोटी सी संभावना है कि आप बग और अस्थिरता

2) आपको हर बार प्लगइन के साथ संकलन करना याद रखना होगा, अन्यथा आपको अचानक प्रदर्शन समस्याएं मिल सकती हैं। आप नहीं हो सकते सुनिश्चित करें कि प्लगइन मध्यम या दीर्घकालिक

3) आप ऑप्टिमाइज़ेशन पर निर्भर हो सकते हैं, जिससे आप अक्षम कोड लिख सकते हैं, जबकि बाधाओं को पहचानने और हाथ-अनुकूलित करने से तेज़ कोड हो सकता है कुल मिलाकर, दूसरे शब्दों में, यह "दरारों पर पेपर"

4) यह एक अतिरिक्त लाइब्रेरी निर्भरता है और आपकी बिल्ड फ़ाइलों में जटिलता जोड़ता है

आपने विपक्ष के लिए कहा, लेकिन यह अपने पेशेवरों की तुलना में काफी मामूली है। व्यक्तिगत रूप से मुझे व्यक्तिगत परियोजनाओं के लिए लूप-ऑप्टिमाइज़ेशन का उपयोग करने में कोई हिचकिचाहट नहीं होगी; अभी तक क्ल-संग्रह के बारे में इतना निश्चित नहीं है (मैंने उनको आजमाया और मेरे जीपीयू को मेरे सीपीयू की तुलना में थोड़ा धीमा पाया - ओबीवी यह उपलब्ध हार्डवेयर पर निर्भर है), लेकिन मुझे लगता है कि परियोजना का एक अच्छा भविष्य है, चाहे वह स्वयं या इसमें शामिल हो मानक कंपाइलर और पुस्तकालयों। मैंने कुछ कोड के लिए कुछ नाटकीय गति (20x तेज की तरह) देखा है।

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