विंडोज प्रोसेसर आत्मीयता हाइपरथ्रेडेड सीपीयू के साथ कैसे काम करता है?


27

विंडोज प्रोसेसर आत्मीयता हाइपरथ्रेडेड सीपीयू के साथ कैसे काम करता है? चलो चार कोर के साथ एक प्रणाली का एक उदाहरण (चित्रित) का उपयोग करते हैं, प्रत्येक एक हाइपर-थ्रेडेड वर्चुअल कोर के साथ।

  1. कौन सा कोर प्रत्येक "सीपीयू" के अनुरूप है?
  2. करता है (कहते हैं) सीपीयू 6 और सीपीयू 7 नीचे एक कोर का प्रतिनिधित्व करते हैं; एचटी और असली कोर?
  3. यदि, उदाहरण के लिए, सीपीयू 6 एक वास्तविक कोर और सीपीयू 7 एक एचटी कोर का प्रतिनिधित्व करता है, तो क्या केवल सीपीयू 7 को सौंपा गया एक धागा केवल एक वास्तविक कोर के संसाधनों पर छोड़ दिया जाएगा? (यह मानते हुए कि अन्य कार्य चल रहे हैं)
  4. क्या हाइपरथ्रेडिंग पूरी तरह से प्रोसेसर के भीतर प्रबंधित किया जाता है जैसे कि थ्रेड्स आंतरिक रूप से घिस जाते हैं? यदि हां, तो क्या वह सीपीयू स्कोप या कोर स्कोप है? उदाहरण: यदि CPU 6 और 7 एक कोर का प्रतिनिधित्व करते हैं, तो क्या इससे कोई फर्क नहीं पड़ता कि कौन सी प्रक्रिया सौंपी गई है क्योंकि सीपीयू संसाधनों को एक रनिंग थ्रेड के रूप में उपयुक्त करेगा?
  5. मुझे लगता है कि लंबे समय से चल रहे एकल-थ्रेडेड प्रक्रियाओं को कोर के चारों ओर बहुत कम उछाला जाता है, कम से कम कार्य प्रबंधक के अनुसार। क्या इसका मतलब यह है कि किसी एक कोर को एक प्रक्रिया सौंपने से प्रदर्शन में थोड़ा सुधार होगा (संदर्भ स्विच और कैश अमान्यताओं आदि से बचकर)? यदि हां, तो क्या मुझे पता है कि मैं "सिर्फ एक वर्चुअल कोर" नहीं दे रहा हूं?

यह सब बहुत अस्पष्ट और मुझे भ्रमित करने वाला है। एचटी महान है, लेकिन यह निश्चित रूप से संसाधन आवंटन की पारदर्शिता को कम करता है।

प्रोसेसर आत्मीयता मेनू


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

साथ ही, आपके लिए एक अंतिम टिप्पणी "एचटी महान है, लेकिन यह निश्चित रूप से संसाधन आवंटन की पारदर्शिता को कम करता है।" यह 100% सत्य है, लेकिन इसके बारे में बहुत कम ही आप कर सकते हैं और न ही इसके बारे में कुछ करने के लिए आपके पास कोई कारण है। सभी आधुनिक ऑपरेटिंग सिस्टम जानते हैं कि हाइपरथ्रेडिंग क्या है, अधिकांश के पास इसकी क्षतिपूर्ति करने के लिए उन्नत प्रोसेसर शेड्यूलर हैं, और कुछ विशिष्ट मामलों से अलग (और मेरा मतलब है कुछ), लगभग हमेशा एक प्रदर्शन लाभ होता है।
ब्रेकथ्रू

जवाबों:


18

कौन सा कोर प्रत्येक "सीपीयू" के अनुरूप है?

मान लें कि हमारे पास Core 1, 2, 3 और 4 है, CPU4 और CPU5 कोर 3 का प्रतिनिधित्व करते हैं।

करता है (कहते हैं) सीपीयू 6 और सीपीयू 7 नीचे एक कोर का प्रतिनिधित्व करते हैं; एचटी और असली कोर?

दोनों के बीच कोई अंतर नहीं है - वे दोनों सीपीयू में भौतिक हार्डवेयर इंटरफेस हैं, हार्डवेयर में तार्किक इंटरफ़ेस लागू किया गया है ( अधिक जानकारी के लिए इंटेल कोर प्रोसेसर डेटशीट, वॉल्यूम 1 देखें)। मूल रूप से, प्रत्येक कोर में दो अलग-अलग निष्पादन इकाइयाँ होती हैं, लेकिन यह उनके बीच कुछ सामान्य संसाधनों को साझा करती है। यही कारण है कि कुछ मामलों में हाइपरथ्रेडिंग वास्तव में प्रदर्शन को कम कर सकता है।

यदि, उदाहरण के लिए, सीपीयू 6 एक वास्तविक कोर और सीपीयू 7 एक एचटी कोर का प्रतिनिधित्व करता है, तो क्या केवल सीपीयू 7 को सौंपा गया एक धागा केवल एक वास्तविक कोर के संसाधनों पर छोड़ दिया जाएगा? (यह मानते हुए कि अन्य कार्य चल रहे हैं)

ऊपर देखो। केवल सीपीयू 6 या ओनली सीपीयू 7 को सौंपे गए धागे को उसी गति से निष्पादित किया जाएगा (यह मानते हुए कि धागा एक ही काम करता है, और प्रोसेसर में अन्य कोर निष्क्रिय हैं)। Windows HT- सक्षम प्रोसेसर के बारे में जानता है, और प्रक्रिया अनुसूचक इन बातों को ध्यान में रखता है।

क्या हाइपरथ्रेड को पूरी तरह से प्रोसेसर के भीतर प्रबंधित किया जाता है जैसे कि थ्रेड्स आंतरिक रूप से घिस जाते हैं? यदि हां, तो क्या वह सीपीयू स्कोप या कोर स्कोप है? उदाहरण: यदि CPU 6 और 7 एक कोर का प्रतिनिधित्व करते हैं, तो क्या इससे कोई फर्क नहीं पड़ता कि कौन सी प्रक्रिया सौंपी गई है क्योंकि सीपीयू संसाधनों को एक रनिंग थ्रेड के रूप में उपयुक्त करेगा?

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

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

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

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


5

CPU लेआउट को व्यवस्थित करने के लिए माना जाता है ताकि एक ऑपरेटिंग सिस्टम जो आपके सभी CPU को पहचान न सके, अधिकतम प्रदर्शन संभव हो सके। इसका मतलब यह होगा कि प्रत्येक भौतिक कोर से एक आभासी कोर सूचीबद्ध किया जाएगा, इससे पहले कि कोई भी भौतिक कोर सूचीबद्ध हो।

उदाहरण के लिए, मान लीजिए कि आपके पास A, B, C, और D. नामक चार हाइपर-थ्रेडेड कोर हैं, यदि आप A और B को L2 कैश और C और D को L2 कैश साझा करते हैं, तो ऑर्डर कुछ इस तरह होना चाहिए:
0 = A1 1 = C1 2 = B1 3 = D1 4 = A2 5 = C2 6 = B2 7 = D2

इस तरह, एक ऑपरेटिंग सिस्टम जो केवल दो सीपीयू पकड़ता है, सभी एल 2 कैश का उपयोग करने के लिए मिलता है। इसके अलावा, एक ऑपरेटिंग सिस्टम जो केवल चार सीपीयू पकड़ता है, सभी निष्पादन इकाइयों का उपयोग करने के लिए मिलता है।

फिर, यह वही तरीका है जो यह माना जाता है।

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


1
  1. वे कैसे मेल खाते हैं यह इस बात पर निर्भर करता है कि आपका सीपीयू और मदरबोर्ड कोर की पहचान कैसे करते हैं। क्या होने वाला है कि भौतिक कुर्सियां ​​पहले से जमा हो जाती हैं, तार्किक कोर अगले और आभासी कोर अंतिम हो जाते हैं। आपके मामले में, कोर 0-3 भौतिक कोर और 4-7 आभासी एचटी कोर होना चाहिए। इसका मुख्य कारण यह है कि यदि आप एक ऐसा ओएस चलाते हैं जो सभी उपलब्ध निष्पादन इकाइयों को संभालने में सक्षम नहीं है, तो सबसे साझा इकाइयों से पहले सबसे स्वतंत्र इकाइयों को प्राप्त करने की संभावना है। यह अच्छा नहीं होगा यदि एक काल्पनिक 2-सीपीयू केवल ओएस को आपके सिस्टम में 2 अलग-अलग कोर के बजाय एक एचटी जोड़ी मिले। (यह कुछ शुरुआती HT सिस्टम के लिए एक वास्तविक मुद्दा था, इससे पहले कर्नेल शेड्यूलर्स को नए CPU के लिए अपडेट किया जा सकता है।)
  2. नंबर 1 देखें।
  3. एचटी उससे अधिक जटिल है। याद रखें कि 2 वर्चुअल कोर अक्सर कुछ संसाधनों को साझा करते हैं जबकि अन्य बिट्स अलग हो जाते हैं, लेकिन यह कि एक समय में केवल एक या दूसरे को निष्पादित किया जा सकता है।
  4. की तरह। आपका उदाहरण (मान्यताओं को देखते हुए) आम तौर पर सही है। हालाँकि, यदि एप्लिकेशन यह जान सकता है कि उसके चलने का काम किस तरह का है, तो यह ओएस शेड्यूल थ्रेड्स को उचित रूप से मदद कर सकता है।
  5. कोर hopping के लिए एक बहुत अच्छा कारण है: चारों ओर थर्मल वर्कलोड फैलाना। यह देखते हुए कि कई मामलों में उच्च स्तर के कैश (L2, L3) को सभी कोर में वैसे भी साझा किया जाता है, कोर हूपिंग पर महत्वपूर्ण प्रदर्शन प्रभाव नहीं पड़ेगा, लेकिन थर्मल प्रभाव महत्वपूर्ण होगा क्योंकि आपके पास "हॉट स्पॉट" नहीं होगा एक कोर जो लगातार चल रहा है जबकि अन्य बेकार बैठे हैं। अब, मल्टी सॉकेट सिस्टम (विशेषकर NUMA सिस्टम) में सॉकेट्स को पार करने से महत्वपूर्ण प्रदर्शन प्रभाव पड़ सकता है। अधिकांश शेड्यूलर्स इसके बारे में जानते हैं और इसे ध्यान में रखते हैं।

अंततः, यह क्या उबलता है कि अक्सर आप (एक अंत उपयोगकर्ता के रूप में) थ्रेड एफिनिटी के साथ कर सकते हैं प्रदर्शन प्रभाव के अलावा यह सुनिश्चित करने के अलावा कि आप अप-टू-डेट ओएस चला रहे हैं जो विभिन्न बिट्स के बारे में जानता है आपकी प्रणाली।

यदि आपको कोई कार्यभार मिलता है, जहां मैन्युअल रूप से आत्मीयता प्रदान करने का एक महत्वपूर्ण प्रभाव पड़ता है, तो इसे एप्लिकेशन डेवलपर को बग के रूप में रिपोर्ट करें ताकि प्रोग्राम को ठीक किया जा सके।


4
"कोर 0-3 भौतिक कोर होना चाहिए और 4-7 आभासी एचटी कोर होना चाहिए" वास्तव में, कोर 0 और कोर 1 समान (एकल) भौतिक कोर के अनुरूप हैं। प्रत्येक "हाइपरथ्रेडेड कोर" में सीपीयू के दो भौतिक कनेक्शन होते हैं, इसलिए विंडोज का शाब्दिक रूप से 8 भौतिक कोर दिखाई देता है। यह सिर्फ इतना जानता है कि CPU में हाइपरथ्रेडिंग है। यदि आप रुचि रखते हैं, तो इसके बारे में अधिक जानकारी के लिए इंटेल कोर डेटाशीट देखें।
ब्रेकथ्रू

@ ब्रीकथ्रू एक अच्छा टोपोलॉजी नहीं होगा क्योंकि इसका मतलब यह होगा कि केवल 4 कोर का समर्थन करने वाला एक भोले ओएस केवल भौतिक कोर के आधे हिस्से का उपयोग करके हवा देगा। प्रत्येक भौतिक कोर से एक वर्चुअल कोर वर्चुअल कोर सूची में दिखाई देनी चाहिए, इससे पहले कि कोई भी भौतिक कोर सूचीबद्ध हो।
डेविड श्वार्ट्ज

@DavidSchwartz अच्छा टोपोलॉजी या नहीं, यह है कि कैसे तार्किक प्रोसेसर enumerate। इसलिए व्यापक रूप से प्रारंभिक ओएस (जैसे विंडोज 2000 और उससे पहले) पर हाइपरथ्रेडिंग को अक्षम करने की सिफारिश की जाती है जो भौतिक बनाम सीपीयू बनाम एलपी बनाम कोर को ठीक से गणना नहीं करते हैं।
जेमी हनराहन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.