multicore बहु-सीपीयू, बहु-कोर और हाइपर-थ्रेड




smp hyperthreading (3)

आप इंटेल की वेबसाइट पर या येल विश्वविद्यालय से एक संक्षिप्त लेख में दोहरी सीपीयू, बहु-कोर और हाइपर-थ्रेडिंग के बारे में कुछ दिलचस्प लेख पा सकते हैं।

मुझे आशा है कि आपको यहां आवश्यक सारी जानकारी मिल जाएगी।

बहु-सीपीयू, बहु-कोर, और हाइपर-थ्रेड के बीच अंतर को दर्शाने के लिए कोई मुझे कुछ दस्तावेज़ों की सिफारिश कर सकता है? मैं हमेशा इन मतभेदों और विभिन्न परिदृश्यों में प्रत्येक वास्तुकला के पेशेवरों / विपक्ष के बारे में उलझन में हूं।

संपादित करें: ऑनलाइन सीखने और दूसरों की टिप्पणियों से सीखने के बाद यहां मेरी वर्तमान समझ है; क्या कोई टिप्पणी की समीक्षा कर सकता है?

  1. मुझे लगता है कि हाइपर-थ्रेड उनमें से सबसे कम तकनीक है, लेकिन सस्ता है। संदर्भ स्विच समय बचाने के लिए इसका मुख्य विचार डुप्लिकेट रजिस्टर्स है;
  2. मल्टी प्रोसेसर हाइपर-थ्रेड से बेहतर है, लेकिन विभिन्न सीपीयू अलग-अलग चिप्स पर हैं, इसलिए विभिन्न सीपीयू के बीच संचार बहु-कोर की तुलना में लंबी विलंबता है, और एकाधिक चिप्स का उपयोग करके, बहु-कोर की तुलना में अधिक खर्च और अधिक बिजली की खपत होती है ;
  3. बहु-कोर सभी सीपीयू को एक चिप पर एकीकृत करता है, इसलिए बहु-प्रोसेसर की तुलना में विभिन्न CPUs के बीच संचार की विलंबता बहुत कम हो जाती है। चूंकि यह सभी सीपीयू को रखने के लिए एक सिंगल चिप का उपयोग करता है, यह उपभोक्ता कम शक्ति है और एक बहु प्रोसेसर सिस्टम से कम महंगा है।

अग्रिम धन्यवाद, जॉर्ज


संक्षेप में: बहु-सीपीयू या बहु-प्रोसेसर सिस्टम में कई प्रोसेसर हैं। एक मल्टी-कोर सिस्टम एक बहु-प्रोसेसर सिस्टम है जिसमें कई प्रोसेसर एक ही मर जाते हैं। हाइपरथ्रेडिंग में, एकाधिक थ्रेड एक ही प्रोसेसर पर चल सकते हैं (जो कि इन एकाधिक धागे के बीच संदर्भ-स्विच समय बहुत छोटा है)।

बहु-प्रोसेसर अब 30 वर्षों से वहां हैं लेकिन ज्यादातर प्रयोगशालाओं में हैं। मल्टी-कोर नया लोकप्रिय बहु-प्रोसेसर है। सर्वर प्रोसेसर आजकल बहु-प्रोसेसर के साथ हाइपरथ्रेडिंग लागू करते हैं।

इन विषयों पर विकिपीडिया लेख काफी illustrative हैं।


मल्टी-सीपीयू पहला संस्करण था: आपके पास एक या अधिक मुख्य बोर्ड होंगे जिनमें एक या अधिक CPU चिप्स होंगे। यहां मुख्य समस्या यह थी कि सीपीयू को अपने कुछ आंतरिक डेटा को अन्य सीपीयू में बेनकाब करना होगा ताकि वे अपने रास्ते में नहीं पहुंच सकें।

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

वर्तमान विकास बहु-कोर है। यह मूल रूप से मूल विचार (कई पूर्ण CPUs) है लेकिन एक चिप में है। लाभ: चिप डिजाइनर आसानी से चिप में सिंक सिग्नल के लिए अतिरिक्त तार डाल सकते हैं (बजाय उन्हें पिन पर बाहर निकालने के बजाय, भीड़ वाले मुख्य बोर्ड पर और दूसरी चिप में)।

सुपर कंप्यूटर आज मल्टी-सीपीयू, मल्टी-कोर हैं: उनके पास आमतौर पर 2-4 सीपीयू वाले बहुत सारे मेनबोर्ड होते हैं, प्रत्येक सीपीयू बहु-कोर होता है और प्रत्येक की अपनी रैम होती है।

[संपादित करें] आपको वह बहुत सही मिला है। बस कुछ मामूली अंक:

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

  • मल्टी-सीपीयू के साथ मुख्य समस्या यह है कि उन पर चलने वाला कोड अंततः रैम तक पहुंच जाएगा। एन सीपीयू हैं लेकिन रैम तक पहुंचने के लिए केवल एक बस है। तो आपके पास कुछ हार्डवेयर होना चाहिए जो सुनिश्चित करता है कि ए) प्रत्येक सीपीयू को रैम एक्सेस की उचित मात्रा मिलती है, बी) रैम के उसी हिस्से तक पहुंच से समस्याएं उत्पन्न नहीं होती हैं और सी) सबसे महत्वपूर्ण बात यह है कि सीपीयू 2 को अधिसूचित किया जाएगा जब सीपीयू 1 कुछ मेमोरी एड्रेस को लिखता है जो सीपीयू 2 के आंतरिक कैश में होता है। यदि ऐसा नहीं होता है, तो CPU 2 खुशी से कैश किए गए मान का उपयोग करेगा, जो इस तथ्य से अनजान है कि यह पुराना है

    बस कल्पना करें कि आपके पास एक सूची में कार्य हैं और आप उन्हें सभी उपलब्ध CPUs में फैलाना चाहते हैं। तो सीपीयू 1 सूची से पहला तत्व लाएगा और पॉइंटर्स अपडेट करेगा। सीपीयू 2 वही करेगा। दक्षता कारणों से, दोनों सीपीयू न केवल कुछ बाइट्स को कैश में कॉपी करेंगे बल्कि पूरी "कैश लाइन" (जो भी हो) हो। धारणा यह है कि, जब आप बाइट एक्स पढ़ते हैं, तो आप जल्द ही एक्स + 1 भी पढ़ेंगे।

    अब दोनों सीपीयू में उनके कैश में स्मृति की एक प्रति है। सीपीयू 1 फिर अगले आइटम को सूची से लाएगा। कैश सिंक के बिना, यह नहीं देखा होगा कि सीपीयू 2 ने सूची भी बदल दी है, और यह सीपीयू 2 के समान आइटम पर काम करना शुरू कर देगा।

    यह प्रभावी रूप से बहु-सीपीयू को इतना जटिल बनाता है। इसके साइड इफेक्ट्स एक ऐसे प्रदर्शन को जन्म दे सकते हैं जो आपको प्राप्त होगा उससे भी बदतर है यदि पूरा कोड केवल एक ही CPU पर चलता है। समाधान बहु-कोर था: आप आसानी से कई तारों को जोड़ सकते हैं क्योंकि आपको कैश सिंक्रनाइज़ करने की आवश्यकता होती है; आप डेटा को एक कैश से दूसरे में कॉपी भी कर सकते हैं (कैश लाइन के हिस्सों को बिना फ्लश किए और इसे पुनः लोड किए बिना) को अपडेट कर सकते हैं। या कैश लॉजिक यह सुनिश्चित कर सकता है कि सभी सीपीयू एक ही कैश लाइन प्राप्त करते हैं जब वे उसी हिस्से तक पहुंचते हैं असली रैम, सीपीयू 2 को कुछ नैनोसेकंड के लिए अवरुद्ध कर देता है जब तक कि CPU 1 ने इसके परिवर्तन नहीं किए हैं।

[EDIT2] मुख्य कारण मल्टी-कोर मल्टी-सीपीयू से सरल क्यों है कि एक मेनबोर्ड पर, आप बस दो चिप्स के बीच सभी तारों को नहीं चला सकते हैं जिन्हें आपको सिंक प्रभावी बनाने की आवश्यकता होगी। इसके अलावा एक सिग्नल केवल 30 सेमी / एनएस टॉप (प्रकाश की गति; तार में, आमतौर पर बहुत कम होता है) की यात्रा करता है। और यह मत भूलना, एक बहु परत मेनबोर्ड पर, सिग्नल एक-दूसरे को प्रभावित करना शुरू करते हैं (क्रॉसस्टॉक)। हम यह सोचना पसंद करते हैं कि 0 0 वी और 1 5 वी है लेकिन हकीकत में, "0" -0.5V के बीच कुछ है (1-> 0 से लाइन छोड़ते समय ओवरड्राइव) और .5 वी और "1" 0.8V से ऊपर कुछ भी है।

यदि आपके पास एक चिप के अंदर सबकुछ है, सिग्नल बहुत तेजी से चलते हैं और आप जितना चाहें उतना हो सकते हैं (ठीक है, लगभग :)। इसके अलावा, सिग्नल क्रॉसस्टॉक को नियंत्रित करना बहुत आसान है।