5

मुझे आश्चर्य है कि 8 से अधिक धागे 8 कोर के साथ हार्डवेयर पर एक साथ चल सकते हैं या नहीं।मल्टीथ्रेडिंग (ओपनएमपी) - कितने समांतर धागे

यदि ऐसा है, तो एन गणनाओं को समानांतर करने के लिए ओपनएमपी का उपयोग करके, मैं आकार के टुकड़े, कह सकता हूं, एन/8, और प्रत्येक धागे में आगे कांटा (एन/8)/8 थ्रेड में और फिर भी अधिक हो सकता है?

जब मैं समानांतर घोंसला करता हूं तो चीजें कैसे होती हैं? क्या मेरे पास अभी भी नेस्टेड समानांतर के लिए 8 उपलब्ध धागे हैं?

धन्यवाद !!

उत्तर

10

8 कोर केवल समय पर दिए गए अधिकतम 8 धागे पर चल सकते हैं। हालांकि, बहुत कुछ इस बात पर निर्भर करता है कि आपके धागे क्या कर रहे हैं। यदि वे सीपीयू गहन कार्य कर रहे हैं, तो कोर की संख्या (कुछ शायद ठीक है) की तुलना में कई और धागे को बढ़ाने की अनुशंसा नहीं की जाती है। अन्यथा अत्यधिक संदर्भ स्विचिंग और कैश मिस प्रदर्शन को कम करना शुरू कर देंगे। हालांकि, यदि महत्वपूर्ण I/O है, तो थ्रेड को बहुत अधिक अवरुद्ध किया जा सकता है, सीपीयू का उपयोग नहीं कर रहा है, ताकि आप उनमें से कई को समानांतर में चला सकें।

नीचे की रेखा है, आपको अपने विशेष माहौल पर अपने विशेष माहौल में प्रदर्शन को मापने की आवश्यकता है।

this related thread भी देखें।

+0

मुझे लगता है कि कुछ परिदृश्यों में अंतराल की गति संभवतः गति हो सकती है? उदाहरण के लिए, अगर कुछ प्रक्रियाओं को पूरा करने के लिए बहुत इंतजार था? – ScarletAmaranth

+0

ऐसा लगता है कि मेरा प्रोग्राम तेजी से (20%?) नेस्टेड समांतरता का उपयोग कर रहा है। मैं उपयोग करने के लिए धागे की संख्या को कभी भी लागू नहीं करता हूं, मैं केवल omp_set_nested (true) – octoback

+0

@ScarletAmaranth सेट करता हूं, हां वास्तव में। I/O इसका सबसे आम उदाहरण है (इसलिए मैंने इसे अपने उत्तर में बताया), लेकिन अन्य मामले भी हैं। –

0

सबसे पहले, आप 8 से अधिक धागे नहीं चला सकते हैं। दूसरा, नेस्टेड समांतरता का सहारा लेना अगर ओपनएमपी के रूप में कुछ भी काम नहीं करता है तो इस पहलू में बहुत कुछ सुधारना है।

1

आधुनिक सीपीयू प्रोसेसर में हाइपर-थ्रेडिंग का विकल्प होता है।
इसका मतलब है कि पाइपलाइन एक ही समय में दो या दो से अधिक धागे चला सकती है।

तो धागे कि एक साथ चला सकते हैं की संख्या है:
total_threads = num_procs * हाइपरथ्रेडिंग कारक

आम तौर पर, हाइपरथ्रेडिंग कारक = 2.

एक सीपीयू गहन काम का बोझ के लिए, आप चलाना चाहिए total_threads। एक आईओ गहन वर्कलोड के लिए, आपको कुल_थ्रेड * 2 धागे का उपयोग करना चाहिए। इस तरह हम अन्य धागे के आईओ के साथ कुछ धागे की गणना ओवरलैप कर सकते हैं।

ये अंगूठे-नियम हैं जो मैं अनुसरण करता हूं। आप वर्कलोड के आधार पर इसे बदल सकते हैं।

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