2012-01-10 17 views
11

मेरे पास लूप के लिए घोंसला है। मैंने पहले स्थान को Parallel.For() के साथ बदल दिया है और गणना की गति में वृद्धि हुई है।नेस्टेड समानांतर।() लूप गति और प्रदर्शन

मेरा प्रश्न Parallel.For() के साथ दूसरे (एक के अंदर) को बदलने के बारे में है। क्या यह गति बढ़ाएगा? या कोई फर्क नहीं पड़ता है? या यह धीमा हो जाएगा?

संपादित करें:

के बाद से कोर असीमित नहीं हैं (आमतौर पर वहाँ 2 से 8 कोर है), अंदर पाश समानांतर चल रहा है। इसलिए, अगर मैं अंदर Parallel.For() के साथ बदलता हूं, तो यह समानांतर चलता है। लेकिन मुझे यकीन नहीं है कि यह प्रदर्शन और गति को कैसे बदलता है।

+0

कोर की संख्या पर निर्भर करता है, लेकिन मुझे संदेह होगा कि आपको कोई सुधार दिखाई नहीं देगा। हालांकि, इसे आजमाएं। – Ryan

+5

http://guyellisrocks.com/coding/nested-parallel-foreach/ ... हम आपको क्या बता सकते हैं कि एक साधारण बेंचमार्क परीक्षण नहीं होगा? –

उत्तर

14

", बहुत सुक्ष्म भी मोटे कणों" उप-अनुभाग, "विरोधी पैटर्न" "Patterns of parallel programming" पुस्तक में .NET parallel computing team अनुभाग से:

जवाब यह है कि सबसे अच्छा संतुलन प्रदर्शन परीक्षण के माध्यम से पाया जाता है।यदि समांतरता के ऊपरी भाग कम से कम की तुलना में न्यूनतम हैं, तो जितना संभव हो सके समानांतर: इस मामले में, जिसका अर्थ दोनों लूप समानांतर करना होगा। यदि के ऊपरी भाग में आंतरिक लूप समानांतर होता है तो अधिकांश सिस्टम पर प्रदर्शन को कम कर देगा, ऐसा करने से पहले दो बार सोचें, क्योंकि यह संभवत: बाहरी लूप को समानांतर करने के लिए सबसे अच्छा होगा।

उस उपधारा पर एक नज़र डालें, यह समानांतर रे ट्रेसिंग एप्लिकेशन से विस्तृत उदाहरणों के साथ स्वयं निहित है। और इसके सुझाव लूप को समानांतरता की बेहतर डिग्री रखने के लिए आपके लिए सहायक भी हो सकता है।

1

यह आपके लिए और मशीन के अंदर उपयोग किए जाने वाले डेटा और कार्यों पर बहुत निर्भर करता है। मैं हाल ही में समानांतर के साथ गड़बड़ कर रहा हूं। समान और समानांतर। पहले और पता चला कि उन्होंने मेरे ऐप्स को धीमा कर दिया है ... (4 कोर मशीन पर, शायद यदि आपके पास 24 कोर सर्वर है तो एक और कहानी है)

मुझे लगता है कि धागे का प्रबंधन बहुत अधिक ओवरहेड का मतलब है ...

यहां तक ​​कि उनके प्रलेखन पर एमएस (यहां http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=19222 के बारे में msdn पर एक बहुत लंबा पीडीएफ है) मानता है कि यह ऐप्स को तेज़ी से चलाने में सक्षम नहीं होता है। आपको हर बार कोशिश करनी है, और यदि यह काम करता है, बढ़िया है, और यदि बुरा भाग्य नहीं है।

आपको बाहरी और आंतरिक के साथ प्रयास करना चाहिए, लेकिन कम से कम ऐप्स पर मैंने कोशिश की कि उनमें से कोई भी ऐप को तेज़ी से नहीं बनाया। बाहरी या आंतरिक इससे कोई फर्क नहीं पड़ता था, मुझे बस एक ही निष्पादन के समय या इससे भी बदतर लग रहा था।

शायद यदि आप समवर्ती संग्रह का भी उपयोग करते हैं, तो आपको बेहतर प्रदर्शन मिलता है। लेकिन फिर, कोशिश किए बिना कहने का कोई तरीका नहीं है।

संपादित करें:

मैं सिर्फ इतना है कि बहुत उपयोगी साबित हुई MSDN पर एक अच्छा लिंक (मेरे मामले में) में पाया गया Parallel.foreach प्रदर्शन में सुधार करने http://msdn.microsoft.com/en-us/library/dd560853.aspx

3

यह फिर से कई स्थितियों पर निर्भर करता है,

  1. आपके सीपीयू चलने वाले समांतर धागे की संख्या।
  2. पुनरावृत्तियों की संख्या।

यदि आपका सीपीयू एक एकल कोर प्रोसेसर है, तो आपको कोई लाभ नहीं मिलेगा।

यदि पुनरावृत्तियों की संख्या अधिक है, तो आपको कुछ सुधार मिलेगा।

यदि कुछ ही पुनरावृत्तियों हैं, तो यह धीमा हो जाएगा क्योंकि इसमें अतिरिक्त अधिभार शामिल है।

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