2010-05-12 9 views
10

यह नमूना code क्वाड कोर प्रोसेसर पर थ्रेडेड विधि के साथ धारावाहिक विधि की तुलना करता है। कोड 4 छवियों से सभी पिक्सेल पढ़ने के लिए GetPixel() का उपयोग करता है। मैंने पाया कि गति लगभग 65% है, यह 75% के बराबर क्यों नहीं है क्योंकि मेरे पास 4 कोर हैं और उनमें से सभी का पूरी तरह से उपयोग किया जाता है?क्वाड कोर पर थ्रेडिंग का उपयोग कोड 65% तक बढ़ाता है?

पुनश्च:

आप के रूप में मैं किसी भी मैं ऐसा नहीं करते हैं/ओ कोड जांच कर सकता है, और किसी अन्य प्रक्रिया द्वारा मशीनों पर काम कर रहे हैं (सामान्य विंडो प्रक्रियाओं)

+2

बहुत सारी रैम छू रही है, सीपीयू बस पर लड़ना शुरू कर देंगे। –

उत्तर

4

यह चीजों के किसी भी संख्या हो सकती है । एक जोड़ा जो

  1. विभिन्न धागे को प्रशासित करने से ओवरहेड।
  2. अन्य प्रक्रियाएं एक ही समय में सिस्टम में संसाधनों का उपयोग कर रही हैं।
+0

मुझे यकीन है कि कोई अन्य प्रक्रिया प्रोसेसर का उपयोग कर रहे हैं –

+0

अभी भी एक मजबूत संभावना है कि थ्रेड प्रशासन अपेक्षित प्रदर्शन में गिरावट का कारण बन रहा है। – kemiller2002

2

सबसे अधिक संभावना है कि इसे कुछ डेटा संरचना या फ़ाइल पर अन्य धागे के साथ प्रतिस्पर्धा करनी पड़े, ताकि आपको 100% समांतर निष्पादन न मिले।

उदाहरण के लिए, यदि आप क्वाड-कोर पर 4-तरफा समानांतर में डाउनलोड-वेबपृष्ठ-से-वेबसाइट प्रकार के ऑपरेशन को चलाने के लिए थे, और सर्वर केवल एक ही आईपी पते से 1 समवर्ती डाउनलोड की अनुमति देता है , आपको कोई भी गति नहीं मिलेगी।

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

1

क्योंकि वहाँ अन्य कारकों पर विचार कर रहे हैं। स्मृति और मैं/हे बैंडविड्थ/विवाद, धागा संदर्भ स्विचिंग भूमि के ऊपर आदि

1
  1. आप यह एक ऑपरेटिंग सिस्टम में चल रहे हैं की तरह। अन्य प्रक्रियाएं चल रही हैं। ये कुछ CPU समय का उपयोग करेंगे।
  2. शायद आप अब सीपीयू-सीमित नहीं हैं लेकिन आईओ-सीमित (मेमोरी बैंडविड्थ, डिस्क बैंडविड्थ, ...)।
  3. वहाँ हमेशा आदि सूत्रण (और धागे-स्विचिंग), प्राथमिकता निर्धारण के लिए कुछ भूमि के ऊपर,

कुल मिलाकर, मेरी समानांतर प्रोग्रामिंग अनुभव से, अगर आप 65% कम की एक बीता हुआ समय मिलता है, यह बहुत है हो जाएगा अच्छा।

2

थ्रेडिंग ओवरहेड है, और सबकुछ हमेशा समानांतर में नहीं चल सकता है।

  • धागे बनाने/शुरू/बंद करने का समय।
  • अतिरिक्त काम किया गया (जैसे लॉकिंग/incrementing)
  • हर संसाधन पूरी तरह से समानांतर नहीं हो सकता है, उदा। मेमोरी एक्सेस, या फाइलें पढ़ने/लिखना।
  • ओएस और अन्य ऐप्स को हर समय प्रोसेसर समय की आवश्यकता हो सकती है।
संबंधित मुद्दे