2013-02-22 13 views
7

मैं स्केला समानांतरवाद का उपयोग कर निष्पादन समय में तेजी लाने के लिए प्रयास कर रहा हूँ करने के लिए सूची में बदल दिया।जब एक जावा से अधिक पुनरावृत्ति स्केला समानांतरवाद का उपयोग अपरिवर्तनीय

तो अपरिवर्तनीय एक मैं उपयोग करने के लिए एक जावा ArrayList कन्वर्ट करने के लिए:

var imList = scala.collection.JavaConversions.asScalaBuffer(normalQLFolderList) 

और फिर जब पुनरावृत्ति का उपयोग मैं कई कोर का लाभ लेने के:

for (i <- imList .par) { 
} 

मैं स्केला का लाभ लेने के कर रहा हूँ सही तरीके से समांतरता? इस मामले में एक सूची में पुनरावृत्ति। क्या स्केलबफर के रूप में एक बड़ा प्रदर्शन मारा गया है?

+2

Scala'ish रास्ता imList.par.map (x => yourFunction (x)) – Rajesh

+0

होगा मैं पूरी तरह से सहमत नहीं हैं कि: के साथ मौलिक रूप से कुछ भी गलत नहीं है स्कैला में 'लूप' के लिए - यह वही बात कहने का एक अलग तरीका है। कभी-कभी एक स्पष्ट फॉर-लूप स्पष्ट हो सकता है, खासकर जब फ्लैटमैपिंग। –

उत्तर

5

संग्रह जो निरंतर समय में उनके समानांतर समकक्षों में बदला जा सकता परिवर्तनशील और अपरिवर्तनीय हैश नक्शे और हैश सेट, पर्वतमाला, वैक्टर और सरणियों शामिल हैं। जावा से आ संग्रह के आसपास रैपर सहित अन्य सभी संग्रह प्रकार के लिए, बुला par परिणाम बनता है के लिए अधिक उपयुक्त एक प्रारूप में संग्रह की सामग्री को कॉपी में।

यह और अधिक विस्तार में यहाँ वर्णित है:

http://docs.scala-lang.org/overviews/parallel-collections/conversions.html

हालांकि, कितना बड़ा संग्रह है, और कैसे महंगा for खंड है पर निर्भर करता है, यह पूरी तरह से इस रूपांतरण के लिए भुगतान करने के लिए उचित हो सकता है। प्रत्येक तत्व के समानांतर for ब्लॉक जितना अधिक प्रोसेसिंग करता है, उतना अधिक रूपांतरण की लागत को अमूर्त किया जाता है।

मैं कहूंगा कि यदि प्रत्येक तत्व के प्रति गणना में कुछ भी शामिल नहीं है (उदाहरण के लिए यह कम से कम नई वस्तुएं बनाता है) रूपांतरण के लिए भुगतान करना समझ में आता है, लेकिन एक अच्छा विचार अनुक्रमिक संस्करण और समांतर के बीच प्रदर्शन अंतर को मापना है संस्करण है जो भी शामिल है par बुला:

http://docs.scala-lang.org/overviews/parallel-collections/performance.html

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