2011-05-26 13 views
5

के साथ जगहों में परिवर्तन करना, जब किसी के पास ऑब्जेक्ट्स की एक श्रृंखला होती है तो यह अक्सर कुछ वस्तुओं को अद्यतन (प्रतिस्थापित) करने के लिए वांछनीय (उदा। प्रदर्शन कारणों के लिए) होती है। उदाहरण के लिए, यदि आप पूर्णांकों की एक सरणी है, तो आप सकारात्मक लोगों के साथ नकारात्मक पूर्णांक को बदलने के लिए चाहते हो सकता है:समांतर संग्रह

// Faster for primitives 
var i = 0 
while (i < a.length) { 
    if (a(i) < 0) a(i) = -a(i) 
    i += 1 
} 

// Fine for objects, often okay for primitives 
for (i <- a.indices) if (a(i) < 0) a(i) = -a(i) 

समानांतर संग्रह लाइब्रेरी का उपयोग कर इस तरह एक संशोधन प्रदर्शन करने के लिए विहित तरीका क्या है?

+0

मामले में किसी को भी चमत्कार - हालांकि यह है कि मैं चाहिए लग सकता है, मैं वास्तव में इस सवाल का जवाब (केवल अनुमान लगा लेता है) नहीं है, इसलिए मैं अपने ही सवाल का इस समय का जवाब दे नहीं किया जाएगा! –

उत्तर

5

जहां तक ​​समांतर सरणी माना जाता है - यह एक निरीक्षण है। समांतर सरणी के लिए समानांतर transform शायद अगली रिलीज में शामिल किया जाएगा।

आप कर सकते हैं, हालांकि, एक समानांतर रेंज का उपयोग कर यह कार्य करें:

for (i <- (0 until a.length).par) a(i) = computeSomething(i) 

ध्यान रखें कि सभी परिवर्तनशील संग्रह इस तरह से जगह में परिवर्तनीय हैं। आम तौर पर, यदि आप किसी चीज़ को संशोधित करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि यह ठीक से सिंक्रनाइज़ किया गया हो। यह इस मामले में सरणी के लिए कोई समस्या नहीं है, क्योंकि अलग-अलग सूचकांक अलग-अलग सरणी तत्वों को संशोधित करेंगे (और अंत में कॉलर को परिवर्तन दिखाई दे रहे हैं, क्योंकि समांतर ऑपरेशन की पूर्ति की गारंटी है कि सभी लिखने वाले कॉलर को दिखाई देते हैं)।

2

अनुक्रमिक परिवर्तनशील संग्रह transform तरह के तरीकों, जिसमें जगह काम करते हैं।

समानांतर परिवर्तनशील संग्रह इन तरीकों की कमी है, लेकिन मुझे यकीन है कि वहाँ इसके पीछे एक कारण यह है या अगर यह सिर्फ एक निरीक्षण है नहीं कर रहा हूँ।

मेरा जवाब यह है कि आप वर्तमान में भाग्य से बाहर हैं, लेकिन आप इसे स्वयं ही लिख सकते हैं।

हो सकता है कि इस पर चर्चा के बाद शायद टिकट दर्ज करने में समझदारी होगी?

2

एक समानांतर संग्रह है कि बदलने के लिए और फिर एक सरणी में एक कोशिका उत्परिवर्तित करने के लिए foreach चलाने के लिए सरणी में सूचकांक रखती बनाने, सूचकांक दिया के बारे में कैसे।

इस तरह आप भी अधिक नियंत्रण है और यह एक सरणी के चार क्वाटर्स पर चार कार्यकर्ताओं, कि काम करने के लिए संभव है। क्योंकि केवल एक सिंगल इंटीजर साइन फ़्लिप करना समानांतर गणना को उचित ठहराने के लिए पर्याप्त काम नहीं है।

+0

यह आपके सरणी के आकार पर निर्भर करता है - यदि यह वास्तव में बड़ा है, तो यह समझ में आ सकता है। – axel22

+0

सुधार - यदि आप सूचकांक का समानांतर संग्रह बनाते हैं, तो शायद नहीं, लेकिन आप 'ParRange' का उपयोग कर सकते हैं। – axel22

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