अच्छा सवाल, या कम से कम एक दिलचस्प जवाब के साथ। इस उत्तर का एक हिस्सा एक ऐसी दुनिया की छवि देता है जहां सीपीयू कई अलग-अलग कोर के साथ चौड़ाई में कुशलता से स्केल कर सकता है । लाइसेंस / मूल्य मॉडल अलग होगा!
बाकी बताते हैं कि वे क्यों नहीं कर सकते। सारांश:
- कई कोर पैमाने की लागत रैखिक रूप से करीब है
- 1 कोर के सुपरस्क्लेयर पाइपलाइन के तराजू को चौड़ा करने की लागत ~ चतुर्थांश यह पर्याप्त ब्रूट-बल के साथ, एक बिंदु तक किसी भी तरह से संभव है। एकल-थ्रेडेड प्रदर्शन इंटरैक्टिव उपयोग (एंड-टू-एंड लेटेंसी मामलों, न केवल थ्रूपुट के लिए) के लिए बहुत महत्वपूर्ण है, इसलिए वर्तमान बड़े-कोर हाई-एंड सीपीयू उस कीमत का भुगतान करते हैं। जैसे स्काइलेक (4-चौड़ा), रायज़ेन (5 या 6-चौड़ा), और ऐप्पल ए 12 (बड़े कोर के लिए 7-चौड़ा, छोटी ऊर्जा कुशल कोर के लिए 3-चौड़ा)
- गंभीर ह्रासमान आईपीसी सिर्फ पाइप लाइन को चौड़ा से रिटर्न परे 3 या 4 चौड़ा, यहां तक कि बाहर के आदेश निष्पादन के साथ खोजने के लिए आईएलपी । ब्रांच मिस और कैश मिस कठिन हैं, और फिर भी पूरी पाइपलाइन को रोकती हैं।
आपने आवृत्ति का उल्लेख नहीं किया, बस IPC, लेकिन स्केलिंग आवृत्ति भी कठिन है। उच्च आवृत्ति के लिए उच्च वोल्टेज की आवश्यकता होती है, इसलिए आवृत्ति क्यूब के साथ पावर स्केल : ^1
आवृत्ति से सीधे, और ^2
वोल्टेज से। (कैपेसिटर को वी ^ 2 के साथ ऊर्जा तराजू संग्रहीत किया जाता है, और रिसाव चालू से परे अधिकांश गतिशील शक्ति एफईटी गेट्स + तारों के कैपेसिटिव भार में पंपिंग चार्ज से होती है।)
प्रदर्शन = आवृत्ति बार आईपीसी। (एक ही आर्किटेक्चर के भीतर। विडर SIMD आपको कम निर्देशों के साथ समान काम करने देता है, और कुछ ISAs दूसरों की तुलना में सघन होते हैं, जैसे MIPS अक्सर x86 या AArch64 की तुलना में समान कार्य करने के लिए अधिक निर्देश लेता है।)
लागत मर-क्षेत्र (विनिर्माण लागत) और / या शक्ति में है (जो कि अप्रत्यक्ष रूप से आवृत्ति को सीमित करता है क्योंकि शीतलन कठिन है)। इसके अलावा, प्रति वाट कम शक्ति और प्रदर्शन अपने आप में एक लक्ष्य है, विशेष रूप से मोबाइल (बैटरी) और सर्वर (पावर घनत्व / शीतलन लागत / लागत लागत) के लिए।
मल्टी-कोर प्रति सॉकेट एक चीज होने से पहले, आपके पास उच्च-अंत उपयोग के मामलों के लिए मल्टी-सॉकेट सिस्टम थे जहां आप एक सीपीयू के साथ प्राप्त करने की तुलना में अधिक थ्रूपुट चाहते थे जो निर्मित हो सकते थे, इसलिए वे केवल एसएमपी सिस्टम थे। (सर्वर, हाई-एंड वर्कस्टेशन)।
यदि आप चाहते हैं कि एक भी कोर कुशलता से स्केल कर सकता है, तो हमारे पास 1 भौतिक कोर प्रति सॉकेट और एसएमटी (जैसे हाइपरथ्रेडिंग) के साथ सिस्टम होंगे ताकि उन्हें कई तार्किक कोर के रूप में कार्य करने दिया जा सके। विशिष्ट डेस्कटॉप / लैपटॉप में केवल 1 भौतिक कोर होगा, और हम उन चीजों को समानांतर करने के लिए संघर्ष नहीं करेंगे जो अधिक कोर के साथ रैखिक रूप से पैमाने पर नहीं करते हैं। जैसे make -j4
मल्टी सॉकेट सर्वर का लाभ उठाना, और / या डेस्कटॉप पर I / O विलंबता को छिपाना। (या हो सकता है कि हम अभी भी बहुत कुछ समानांतर करने की कोशिश करेंगे अगर पाइपलाइन की चौड़ाई आसानी से बढ़ जाए लेकिन आईपीसी नहीं था, इसलिए हमें अधिक एसएमटी थ्रेड्स का उपयोग करना पड़ा।) आपके ओएस कर्नेल को तब भी सभी तार्किक कोर में चलाने की आवश्यकता होगी, जब तक कि सीपीयू जिस तरह से नहीं। ओएस के लिए एसएमटी प्रस्तुत करना बहुत अलग था, इसलिए समानांतर शेड्यूलिंग एल्गोरिदम और लॉकिंग की अभी भी वहां आवश्यकता होगी।
डोनाल्ड नुथ ने 2008 के एक साक्षात्कार में कहा
मैं मल्टीकोर आर्किटेक्चर की ओर वर्तमान रुझान के साथ अपनी व्यक्तिगत नाखुशी के बारे में अच्छी तरह जान सकता हूं। मेरे लिए, यह कमोबेश ऐसा लगता है जैसे हार्डवेयर डिज़ाइनर विचारों से बाहर हो गए हैं, और वे मूर के कानून के भविष्य के निधन का दोष सॉफ्टवेयर लेखकों को देने की कोशिश कर रहे हैं। मुख्य बेंचमार्क!
हां, अगर हम वास्तविक कार्यक्रमों पर 8x थ्रूपुट के साथ चमत्कार सिंगल-कोर सीपीयू कर सकते हैं, तो हम शायद अभी भी उनका उपयोग कर रहे हैं। दोहरे सॉकेट सिस्टम के साथ केवल जब यह अधिक थ्रूपुट (एकल-थ्रेडेड प्रदर्शन नहीं) के लिए बहुत अधिक भुगतान करने के लायक था।
मल्टीपल सीपीयू संदर्भ-स्विच की लागत को कम कर देता है जब कई प्रोग्राम चल रहे होते हैं (उनके बीच तेजी से स्विच करने के बजाय वास्तव में समानांतर में चलने देते हैं); इस तरह के एक सीपीयू के लिए बड़े पैमाने पर आउट-ऑफ-ऑर्डर मशीनरी को बाधित करने वाले पूर्व-खाली मल्टीटास्किंग को संभवतः अब इससे भी अधिक चोट लगी होगी।
शारीरिक रूप से यह सिंगल कोर (कोर के बीच कोई इंटरकनेक्ट के साथ एक साधारण कैश पदानुक्रम के लिए) होगा, लेकिन एसएमटी (जैसे इंटेल के हाइपरथ्रेडिंग) का समर्थन करता है, इसलिए सॉफ्टवेयर इसे 8 तार्किक कोर के रूप में उपयोग कर सकता है जो गतिशील रूप से थ्रूपुट संसाधनों के लिए प्रतिस्पर्धा करते हैं। या जब केवल 1 धागा चल रहा है / रुका नहीं है, तो इसका पूरा लाभ मिलेगा।
तो आप कई थ्रेड्स का उपयोग करेंगे जब यह वास्तव में आसान / प्राकृतिक था (उदाहरण के लिए एक बार चलने वाली अलग-अलग प्रक्रियाएं), या निर्भरता श्रृंखलाओं के साथ आसानी से समानांतर समस्याओं के लिए जो इस जानवर के आईपीसी को अधिकतम करने से रोकेंगे।
लेकिन दुर्भाग्य से यह नथ के हिस्से पर इच्छाधारी सोच है कि मल्टी-कोर सीपीयू कभी भी इस बिंदु पर होना बंद हो जाएगा।
एकल-थ्रेड प्रदर्शन स्केलिंग
मुझे लगता है कि अगर उन्होंने 8 कोर सीपीयू के 1 कोर के बराबर बनाया, तो एक कोर में आईपीसी में 800% की वृद्धि होगी, इसलिए आपको सभी कार्यक्रमों में पूर्ण प्रदर्शन मिलेगा, न कि उन लोगों के लिए जो कई कोर के लिए अनुकूलित हैं।
हाँ यह सच है। यदि इस तरह के सीपीयू को बिल्कुल भी बनाना संभव था , तो यह बहुत आश्चर्यजनक होगा। लेकिन मुझे लगता है कि एक ही सेमीकंडक्टर निर्माण प्रक्रिया (यानी ट्रांजिस्टर की समान गुणवत्ता / दक्षता) पर यह सचमुच असंभव है। यह निश्चित रूप से एक ही पावर बजट और मरने वाले क्षेत्र के साथ 8-कोर सीपीयू के रूप में संभव नहीं है, भले ही आप तर्क को गोंद कोर पर सहेज लेंगे, और प्रति-कोर निजी कैश के लिए अधिक स्थान की आवश्यकता नहीं होगी।
यहां तक कि अगर आप आवृत्ति में वृद्धि की अनुमति देते हैं (चूंकि वास्तविक मानदंड प्रति सेकंड काम है, प्रति घड़ी काम नहीं करता है), यहां तक कि एक 2x तेजी से सीपीयू बनाना एक बड़ी चुनौती होगी।
अगर ऐसा सीपीयू बनाने के लिए समान पावर और डाई-एरिया बजट (इस प्रकार मैन्युफैक्चरिंग कॉस्ट) के आसपास कहीं भी संभव हो सकता है , तो सीपीयू विक्रेता पहले से ही उस तरह से निर्माण कर रहे होंगे।
विशेष रूप से अधिक कोर या वाइडर कोर? अनुभाग, इस उत्तर को समझने के लिए आवश्यक पृष्ठभूमि के लिए; यह सरल शुरू होता है कि किस प्रकार से क्रमबद्ध सीपीयू काम करता है, फिर सुपरसेलकर (प्रति घड़ी कई निर्देश)। फिर समझाता है कि हमने पी 4 युग के चारों ओर बिजली की दीवार को कैसे मारा, जिससे आसान आवृत्ति स्केलिंग समाप्त हो जाती है, ज्यादातर आईपीसी को छोड़ दिया जाता है और प्रति निर्देश के अनुसार अधिक काम किया जाता है (उदाहरण के लिए SIMD), छोटे ट्रांजिस्टर के साथ भी।
पाइप लाइन को व्यापक (अधिकतम निर्देश प्रति घड़ी) बनाना आमतौर पर चौड़ाई-वर्ग के रूप में लागत में होता है । व्यापक क्षेत्र पर निर्भरता की जाँच (खतरा का पता लगाना) और चलाने के लिए तैयार निर्देशों को खोजने के लिए एक व्यापक आउट-ऑफ-ऑर्डर अनुसूचक के लिए उस लागत को डाई क्षेत्र और / या शक्ति में मापा जाता है। और अधिक पढ़ें / अपने रजिस्टर फ़ाइल पर बंदरगाहों लिखने और कैश अगर आप के अलावा अन्य निर्देश चलाना चाहते हैं nop
। खासकर यदि आपके पास 3-इनपुट निर्देश जैसे एफएमए या ऐड-ऑन-कैरी (2 रजिस्टर + झंडे) हैं।
सीपीसी को व्यापक बनाने के लिए आईपीसी रिटर्न भी कम हैं ; अधिकांश वर्कलोड में सीपीयू के शोषण के लिए छोटे पैमाने पर / छोटी दूरी की ILP (इंस्ट्रक्शन-लेवल समानांतरता) सीमित है, इसलिए कोर को व्यापक बनाने से IPC (प्रति घड़ी निर्देश) नहीं बढ़ता है अगर IPC पहले से ही चौड़ाई से कम तक सीमित है निर्भरता श्रृंखला, शाखा छूट, कैश मिस, या अन्य स्टालों द्वारा कोर। सुनिश्चित करें कि आपको स्वतंत्र पुनरावृत्तियों के साथ कुछ अनियंत्रित छोरों में स्पीडअप मिलेगा, लेकिन ऐसा नहीं है कि अधिकांश कोड अपना अधिकांश समय खर्च करते हैं। तुलना / शाखा निर्देशों को "विशिष्ट" कोड, IIRC में अनुदेश मिश्रण का 20% बनाते हैं। (मुझे लगता है कि मैंने विभिन्न डेटा सेटों के लिए 15 से 25% तक संख्याएं पढ़ ली हैं।)
इसके अलावा, एक कैश मिस जो सभी आश्रित निर्देशों (और फिर सब कुछ एक बार आरओबी क्षमता तक पहुंच जाता है) को एक व्यापक सीपीयू के लिए अधिक खर्च करता है। (अधिक निष्पादन इकाइयों को बेकार छोड़ने का अवसर लागत; अधिक संभावित काम पूरा नहीं हो रहा है।) या एक शाखा याद आती है इसी तरह एक बुलबुले का कारण बनता है।
8x IPC पाने के लिए, हमें शाखा-भविष्यवाणी सटीकता और कैश हिट दरों में कम से कम 8x सुधार की आवश्यकता होगी । लेकिन कैश हिट दरें अधिकांश वर्कलोड के लिए एक निश्चित बिंदु के साथ कैश क्षमता के साथ अच्छी तरह से पैमाने पर नहीं होती हैं। और HW प्रीफ़ेचिंग स्मार्ट है, लेकिन यह स्मार्ट नहीं हो सकता । और 8x आईपीसी पर, शाखा भविष्यवाणियों को 8x प्रति चक्र के रूप में कई पूर्वानुमानों के साथ-साथ उन्हें अधिक सटीक होने की आवश्यकता होती है।
आउट-ऑफ-ऑर्डर निष्पादन सीपीयू के निर्माण के लिए वर्तमान तकनीक केवल कम सीमाओं पर आईएलपी पा सकती है । उदाहरण के लिए, स्काईलेक का आरओबी आकार 224 फ़्यूज़-डोमेन यूप्स है, गैर-निष्पादित यूओपी के लिए शेड्यूलर 97 अप्रयुक्त-डोमेन है। देखें , दो लंबी निर्भरता श्रृंखला के साथ एक पाश पर lfence के प्रभाव को समझना लंबाई बढ़ाने के लिए एक मामले में जहां अनुसूचक आकार निर्देश के 2 लंबी श्रृंखला से आईएलपी निकालने में सीमित कारक है, अगर वे मिल के लिए भी लंबे समय तक। और / या इसे और अधिक सामान्य और परिचयात्मक उत्तर देखें )।
तो दो अलग-अलग लंबी छोरों के बीच ILP खोजना कुछ ऐसा नहीं है जिसे हम हार्डवेयर के साथ कर सकते हैं। पाश संलयन के लिए गतिशील बाइनरी-पुनर्सकुलेशन कुछ मामलों में संभव हो सकता है, लेकिन हार्ड और कुछ सीपीयू वास्तव में तब तक नहीं कर सकते जब तक कि वे ट्रांसमेटा क्रूसेओ मार्ग पर न जाएं। (एक अलग आंतरिक ISA के शीर्ष पर x86 एमुलेशन परत; उस मामले में VLIW)। लेकिन यूओपी कैश और शक्तिशाली डिकोडर के साथ मानक आधुनिक x86 डिजाइन अधिकांश कोड के लिए हरा करना आसान नहीं है।
और x86 के बाहर, अभी भी उपयोग में आने वाले सभी ISAs को डिकोड करना अपेक्षाकृत आसान है, इसलिए लंबी दूरी की अनुकूलन के अलावा गतिशील-पुनर्संयोजन के लिए कोई प्रेरणा नहीं है। TL: DR: मैजिक कंपाइलर के लिए उम्मीद करना जो कि अधिक ILP को हार्डवेयर में उजागर कर सकता है, Itanium IA-64 के लिए काम नहीं करता है , और निष्पादन के एक सीरियल मॉडल के साथ किसी भी मौजूदा ISA के लिए सुपर-वाइड CPU के लिए काम करने की संभावना नहीं है।
यदि आपके पास एक सुपर-वाइड सीपीयू है, तो आप निश्चित रूप से एसएमटी का समर्थन करना चाहते हैं ताकि आप इसे कम-आईएलपी थ्रेड्स चलाकर काम करने के लिए खिला सकें।
चूंकि स्काइलेक वर्तमान में 4 यूपी चौड़ा है (और प्रति घड़ी 2 से 3 यूओपी का वास्तविक आईपीसी प्राप्त करता है, या यहां तक कि उच्च-थ्रूपुट कोड में 4 के करीब), एक काल्पनिक 8x व्यापक सीपीयू 32-चौड़ा होगा!
होने के नाते 8 या 16 तार्किक सीपीयू में गतिशील रूप से उन निष्पादन संसाधनों को साझा करने में सक्षम होने के नाते : गैर-थ्रेडेड थ्रेड्स सभी फ्रंट-एंड बैंडविड्थ और बैक-एंड थ्रूपुट प्राप्त करते हैं।
लेकिन 8 अलग-अलग कोर के साथ, जब एक थ्रेड स्टॉल होता है, तो निष्पादन इकाइयों को खिलाया रखने के लिए और कुछ नहीं होता है; अन्य धागे लाभ नहीं देते हैं।
निष्पादन अक्सर फटा हुआ होता है: यह कैश मिस लोड के इंतजार में स्टॉल करता है, फिर एक बार समानांतर में कई निर्देश आने पर उस परिणाम का उपयोग कर सकते हैं। सुपर-वाइड सीपीयू के साथ, वह फट तेजी से जा सकता है, और यह वास्तव में एसएमटी के साथ मदद कर सकता है।
लेकिन हमारे पास जादुई सुपर-वाइड सीपीयू नहीं हो सकते हैं
इसलिए थ्रूपुट हासिल करने के लिए हमें थ्रेड-लेवल समानता के रूप में हार्डवेयर के समानांतर समानता को उजागर करना होगा । आमतौर पर कंपाइलर यह जानने में महान नहीं होते हैं कि थ्रेड्स का उपयोग कब / कैसे करना है, बहुत बड़े लूप जैसे सरल मामलों के अलावा। (OpenMP, या gcc का -ftree-parallelize-loops
)। यह अब भी समानांतर रूप से उपयोगी कार्य करने के लिए कोड को फिर से लागू करने के लिए मानवीय चतुराई लेता है, क्योंकि अंतर-थ्रेड संचार महंगा है, और इसलिए थ्रेड स्टार्टअप है।
TLP मोटे दानेदार समानता है, ठीक अनाज वाले ILP के विपरीत निष्पादन के एक एकल धागे के साथ जो HW का शोषण कर सकता है।
इंटरैक्टिव वर्कलोड (जैसे इंटेल / एएमडी x86, और Apple / ARM AArch64 हाई-एंड कोर) के उद्देश्य से सीपीयू निश्चित रूप से आईपीसी स्केलिंग के कम रिटर्न में धक्का देते हैं, क्योंकि एकल-थ्रेडेड प्रदर्शन अभी भी विलंबता के मामले में इतना मूल्यवान है, न कि केवल थ्रूपुट के लिए व्यापक रूप से समानांतर समस्याएं।
15fps पर समानांतर में एक गेम की 8 प्रतियां चलाने में सक्षम होने के कारण प्रत्येक 45fps पर एक कॉपी चलाने में सक्षम होने की तुलना में बहुत कम मूल्यवान है। सीपीयू विक्रेताओं को यह पता है, और यही कारण है कि आधुनिक सीपीयू आउट-ऑफ-ऑर्डर निष्पादन का उपयोग करते हैं, भले ही यह महत्वपूर्ण शक्ति और मरने के क्षेत्र में खर्च हो। (लेकिन GPUs नहीं है क्योंकि उनके काम का बोझ पहले से ही बड़े पैमाने पर समानांतर है)।
इंटेल के कई-कोर Xeon Phi हार्डवेयर (नाइट की लैंडिंग / नाइट के मिल) एक दिलचस्प आधे रास्ते के बिंदु हैं: बहुत ही सीमित आउट-ऑफ-ऑर्डर निष्पादन और एसएमटी को AVX512 SIMD निर्देशों के साथ क्रंच संख्याओं के लिए खिलाए गए 2-वाइड कोर रखने के लिए। कोर इंटेल के लो-पावर सिल्वरमोंट आर्किटेक्चर पर आधारित हैं। (आउट-ऑफ-ऑर्डर निष्पादन लेकिन एक छोटी सी पुन: व्यवस्थित खिड़की के साथ, बड़े-कोर सैंडब्रिज-परिवार की तुलना में बहुत छोटा है। और एक संकीर्ण पाइपलाइन।)
BTW, यह सब SIMD का ऑर्थोगोनल है। प्रति निर्देश के अनुसार अधिक काम करना हमेशा मदद करता है, अगर यह आपकी समस्या के लिए संभव है।
मूल्य निर्धारण मॉडल
हार्डवेयर के वर्तमान परिदृश्य पर सॉफ्टवेयर मूल्य निर्धारण मॉडल की भविष्यवाणी की जाती है।
मल्टी-कोर सीपीयू के आगमन के साथ प्रति-कोर लाइसेंसिंग मॉडल अधिक व्यापक (और एकल-सॉकेट डेस्कटॉप के लिए भी प्रासंगिक) बन गए। इससे पहले, यह केवल सर्वर और बड़े वर्कस्टेशन के लिए प्रासंगिक था।
यदि सॉफ़्टवेयर को शीर्ष गति पर चलने के लिए एकाधिक कोर की आवश्यकता नहीं होती है, तो वास्तव में इसे उन लोगों को सस्ता बेचने का कोई तरीका नहीं होगा, जिन्हें इससे उतना लाभ नहीं मिल रहा है क्योंकि वे इसे कमजोर CPU पर चलाते हैं। जब तक कि सॉफ्टवेयर / हार्डवेयर इकोसिस्टम "एसएमटी चैनलों" पर नियंत्रण विकसित नहीं करता है जो आपको उस तार्किक कोर पर चलने वाले कोड के लिए अधिकतम निष्पादन चौड़ाई को कॉन्फ़िगर करने देता है। (फिर से एक ऐसी दुनिया की कल्पना करें जहां CPU अलग-अलग कोर के बजाय पाइपलाइन चौड़ाई में बड़े पैमाने पर हो।)