6

मैं एक हाइपर थ्रेड किए गए CPU पर OpenMP कोड का उपयोग कर रहा हूं।हाइपरथ्रेडिंग समानांतरता को कैसे प्रभावित करता है?

यदि अन्य सभी बराबर थे, गैर-हाइपर थ्रेड किए गए CPU पर प्रदर्शन कैसे बदलता है?

मुझे 100% प्रोसेसर उपयोग दिखाई देता है, इससे कोई फर्क नहीं पड़ता कि मैं कितने धागे चलाता हूं, लेकिन धागे की संख्या बदलने से प्रदर्शन में वृद्धि होती है। यह कैसे हो सकता है?

क्या कहानी गैर-इंटेल मल्टीथ्रेड किए गए CPUs के लिए समान है?

उत्तर

3

हाइपरथ्रेडिंग से प्रदर्शन सुधार (यदि कोई है) भविष्यवाणी करना मुश्किल है।

हाइपरथ्रेडिंग का अर्थ है कि यदि एक थ्रेड किसी भी कारण से (लगभग) किसी भी कारण के लिए स्टाल करता है, तो सीपीयू के पास दूसरे धागे से निर्देशों का पूल होगा (प्रयास करने के लिए)। यदि, उदाहरण के लिए, कोड मुख्य-स्मृति विलंबता पर बहुत निर्भर है (उदाहरण के लिए, बिना प्रीफेचिंग वाले अप्रत्याशित पठन पैटर्न), हाइपरथ्रेडिंग प्रदर्शन को काफी हद तक बढ़ा सकती है।

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

मान लें कि आप पूरी तरह से सिंगल-थ्रेडेड कोड से शुरू कर रहे हैं, और कुछ ओपनएमपी निर्देश जोड़ रहे हैं, मेरा खुद का अनुभव यह है कि हाइपरथ्रेडिंग आमतौर पर आदेश या 10% पर प्रदर्शन में सुधार के लिए अच्छा है। यदि कोड प्रीफेक्शिंग या किसी भी तरह के समान किसी भी प्रयास को बनाता है, तो उस लाभ के अधिकांश (यदि नहीं सभी) लगभग तुरंत वाष्पित हो जाते हैं।

+0

मुझे पता चला कि आप BIOS में हाइपरथ्रेडिंग अक्षम कर सकते हैं। क्या आप सुधार का निर्धारण कर रहे हैं? – roro

+0

@roro: मैंने BIOS में हाइपरथ्रेडिंग को अक्षम करके दोनों परीक्षण किए हैं, और थ्रेड गिनती को भौतिक कोर की संख्या में मैन्युअल रूप से सीमित करके मुझे पता था कि मैन्युअल रूप से थ्रेड एफ़िनिटी को समायोजित कर रहा था। –

+0

मैं मानता हूं कि एचटी का प्रदर्शन सुधार भविष्यवाणी करना मुश्किल है। हालांकि, सभी निष्पादन संसाधनों का उपयोग स्टाल तक नहीं किया जाता है। इसके बजाय निष्पादन संसाधन (बंदरगाह, कैश, ...) हाइपर-थ्रेड्स के बीच साझा किए जाते हैं। तो एचटी 1 के लिए एक ऐड μop हैसवेल पोर्ट 0 पर निष्पादित कर सकता है जबकि उसी घड़ी चक्र में पोर्ट 5 पर एचटी 2 निष्पादन के लिए एक ली μop। इंटेल से उद्धरण, "एक माइक्रोआर्किटेक्चर परिप्रेक्ष्य से, इसका मतलब है कि दोनों लॉजिकल प्रोसेसर के निर्देश साझा निष्पादन संसाधनों पर एक साथ बने रहेंगे और निष्पादित होंगे।" http://www.cs.virginia.edu/~mc2zk/cs451/vol6iss1_art01.pdf – Olsonist

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