मल्टी-सीपीयू पहला संस्करण था: आपके पास उन पर एक या अधिक सीपीयू चिप्स के साथ एक या एक से अधिक मेनबोर्ड होंगे। यहां मुख्य समस्या यह थी कि सीपीयू को अपने आंतरिक डेटा को दूसरे सीपीयू में उजागर करना होगा ताकि वे अपने रास्ते में न आएं।
अगला कदम हाइपर-थ्रेडिंग था। मेनबोर्ड पर एक चिप लेकिन इसमें दो बार आंतरिक रूप से कुछ हिस्से थे ताकि यह एक ही समय में दो निर्देशों को निष्पादित कर सके।
वर्तमान विकास मल्टी-कोर है। यह मूल रूप से मूल विचार (कई पूर्ण CPU) हैं, लेकिन एक एकल चिप में। लाभ: चिप डिजाइनर आसानी से चिप में सिंक सिग्नल के लिए अतिरिक्त तारों को डाल सकते हैं (बजाय उन्हें पिन पर रूट करने के लिए, फिर भीड़ वाले मेनबोर्ड पर और दूसरी चिप में)।
सुपर कंप्यूटर आज मल्टी-सीपीयू, मल्टी-कोर हैं: उनके पास आमतौर पर 2-4 सीपीयू के साथ बहुत सारे मेनबोर्ड हैं, प्रत्येक सीपीयू मल्टी-कोर है और प्रत्येक की अपनी रैम है।
[संपादित करें] आपको वह बहुत सही लगा। बस कुछ मामूली बिंदु:
हाइपर-थ्रेडिंग एक ही कोर में दो संदर्भों का ट्रैक रखता है, जो आउट-ऑफ-ऑर्डर सीपीयू कोर के अधिक समानता को उजागर करता है। यह निष्पादन इकाइयों को काम से खिलाया जाता है, तब भी जब एक धागा कैश मिस, ब्रांच मिसप्रिंट, या उच्च-विलंबता निर्देशों के परिणामों की प्रतीक्षा कर रहा है। यह ज्यादा हार्डवेयर की नकल के बिना अधिक कुल थ्रूपुट प्राप्त करने का एक तरीका है, लेकिन अगर कुछ भी यह प्रत्येक धागे को अलग-अलग धीमा कर देता है। अधिक जानकारी के लिए इस प्रश्नोत्तर को देखें , और इस अनुच्छेद के पिछले शब्दों के साथ क्या गलत था, इसकी व्याख्या।
मल्टी-सीपीयू के साथ मुख्य समस्या यह है कि उन पर चलने वाला कोड अंततः रैम तक पहुंच जाएगा। एन सीपीयू हैं लेकिन रैम तक पहुंचने के लिए केवल एक बस है। तो आपके पास कुछ हार्डवेयर होना चाहिए जो यह सुनिश्चित करता है कि) प्रत्येक CPU को उचित मात्रा में RAM एक्सेस प्राप्त होता है, b) जो रैम के एक ही हिस्से तक पहुँचता है, समस्याएँ उत्पन्न नहीं करता है और c) सबसे महत्वपूर्ण बात यह है कि CPU 2 को सूचित किया जाएगा। जब CPU 1 कुछ मेमोरी एड्रेस पर लिखता है जो CPU 2 के आंतरिक कैश में है। यदि ऐसा नहीं होता है, तो सीपीयू 2 खुशी से कैश्ड मूल्य का उपयोग करेगा, इस तथ्य से बेखबर कि यह पुराना है
बस कल्पना करें कि आपके पास एक सूची में कार्य हैं और आप उन्हें सभी उपलब्ध सीपीयू में फैलाना चाहते हैं। इसलिए CPU 1 सूची से पहला तत्व लाएगा और पॉइंटर्स को अपडेट करेगा। सीपीयू 2 वही करेगा। दक्षता कारणों से, दोनों सीपीयू न केवल कुछ बाइट्स को कैश में कॉपी करेंगे, बल्कि एक पूरी "कैश लाइन" (जो भी हो)। धारणा यह है कि, जब आप बाइट X पढ़ते हैं, तो आप जल्द ही X + 1 भी पढ़ लेंगे।
अब दोनों CPU अपने कैश में मेमोरी की एक प्रति है। सीपीयू 1 फिर सूची से अगला आइटम लाएगा। कैश सिंक के बिना, यह ध्यान नहीं दिया जाएगा कि सीपीयू 2 ने सूची भी बदल दी है, और यह सीपीयू 2 के समान आइटम पर काम करना शुरू कर देगा।
यह वही है जो मल्टी-सीपीयू को प्रभावी ढंग से जटिल बनाता है। इसके साइड इफ़ेक्ट से एक परफॉर्मेंस हो सकती है जो कि बदतर है अगर आपको केवल एक ही सीपीयू पर पूरा कोड चलता है। समाधान मल्टी-कोर था: आप आसानी से कई तारों को जोड़ सकते हैं जैसे कि आपको कैश को सिंक्रनाइज़ करने की आवश्यकता होती है; आप डेटा को एक कैश से दूसरे में भी कॉपी कर सकते हैं ( कैश लाइन के कुछ हिस्सों को अपडेट करने और उसे फिर से लोड किए बिना), आदि या कैश तर्क यह सुनिश्चित कर सकते हैं कि सभी सीपीयू को एक ही कैश लाइन मिलती है जब वे पैकेज के एक ही हिस्से तक पहुंचते हैं वास्तविक RAM, बस कुछ नैनोसेकंड के लिए सीपीयू 2 को अवरुद्ध कर रहा है जब तक कि सीपीयू 1 ने अपने परिवर्तन नहीं किए हैं।
[EDIT2] मल्टी-सीपीयू की तुलना में मल्टी-कोर सरल होने का मुख्य कारण यह है कि एक मेनबोर्ड पर, आप बस दो चिप्स के बीच सभी तारों को नहीं चला सकते हैं जिन्हें आपको सिंक प्रभावी बनाने की आवश्यकता होगी। साथ ही एक सिग्नल केवल 30 सेमी / एनपीएस टॉप (प्रकाश की गति; एक तार में, आपके पास आमतौर पर बहुत कम होता है) की यात्रा करता है। और यह मत भूलो कि, मल्टी-लेयर मेनबोर्ड पर, सिग्नल एक-दूसरे को प्रभावित करना शुरू करते हैं (क्रॉसस्टॉक)। हम यह सोचना पसंद करते हैं कि 0 0V है और 1 5V है, लेकिन वास्तव में, "0" -0.5V के बीच की चीज़ है (1-1 से एक लाइन ड्रॉप करते समय ओवरड्राइव) और .5V और "1" 0.8V से ऊपर कुछ भी है।
यदि आपके पास एक चिप के अंदर सब कुछ है, तो सिग्नल बहुत तेजी से चलते हैं और आपके पास जितने चाहें (अच्छी तरह से, लगभग :) हो सकते हैं। इसके अलावा, सिग्नल क्रॉसस्टॉक को नियंत्रित करना बहुत आसान है।