2009-07-04 31 views
7

मुझे एहसास है कि यह एक हार्डवेयर प्रश्न है, लेकिन यह सॉफ्टवेयर के लिए भी बहुत प्रासंगिक है, खासकर जब बहु-थ्रेडेड बहु-कोर/सीपीयू वातावरण के लिए प्रोग्रामिंग।जो अधिक कुशल है? अधिक कोर या अधिक CPUs

कौन सा बेहतर है, और क्यों? चाहे वह दक्षता, गति, उत्पादकता, उपयोगिता, आदि के बारे में हो।

1.) 4 क्वाड-कोर CPUs वाला कंप्यूटर/सर्वर?

या

2.) 16 एकल-कोर सीपीयू के साथ एक कंप्यूटर/सर्वर?

कृपया अन्य सभी कारकों (गति, कैश, बस गति, बैंडविड्थ इत्यादि) मान लें।

संपादित:

मैं सामान्य रूप में प्रदर्शन पहलू में दिलचस्पी रखता हूँ। अगर यह एक पहलू और भयानक (या बेहतर नहीं) पर विशेष रूप से बेहतर है, तो मैं उसे भी जानना चाहता हूं।

और यदि मुझे चुनना है, तो मुझे सबसे अधिक दिलचस्पी होगी जो I/O-bound अनुप्रयोगों और गणना -बद्ध अनुप्रयोगों के संबंध में बेहतर है।

+1

क्या के लिए बेहतर है? I/O- बाध्य अनुप्रयोग? गणनाबद्ध अनुप्रयोग? डेटाबेस सर्वर? वेब सर्वर? वीडियो स्ट्रीमिंग? अधिकतर –

+0

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

+0

और यदि मुझे चुनना है, तो मुझे सबसे अधिक दिलचस्पी होगी जो I/O-bound अनुप्रयोगों और गणना -बद्ध अनुप्रयोगों के संबंध में बेहतर है। – Sev

उत्तर

12

यह उत्तर देने का एक आसान सवाल नहीं है। कंप्यूटर वास्तुकला आश्चर्यजनक रूप से जटिल है। नीचे कुछ दिशानिर्देश हैं लेकिन ये भी सरलीकरण हैं। इसमें से बहुत कुछ आपके आवेदन पर आ जाएगा और आप किस बाधाओं के भीतर काम कर रहे हैं (व्यवसाय और तकनीकी दोनों)।

सीपीयू में कई (2-3 आम तौर पर) levels of caching on the CPU हैं। कुछ आधुनिक सीपीयू में मरने पर मेमोरी कंट्रोलर भी होता है। यह कोर के बीच स्मृति को स्वैप करने की गति में काफी सुधार कर सकता है। सीपीयू के बीच मेमोरी I/O को बाहरी बस पर जाना होगा, जो धीमा हो जाता है।

एएमडी/अति चिप्स HyperTransport का उपयोग करें, जो एक बिंदु-से-बिंदु प्रोटोकॉल है।

यह सब जटिल है हालांकि बस वास्तुकला है। इंटेल का कोर 2 डुओ/क्वाड सिस्टम shared bus का उपयोग करता है। इस बारे में ईथरनेट या केबल इंटरनेट की तरह सोचें जहां गोल करने के लिए केवल इतना बैंडविड्थ है और हर नया प्रतिभागी पूरी तरह से एक और हिस्सा लेता है। कोर i7 और नए ज़ीन्स QuickPath का उपयोग करते हैं, जो हाइपरट्रांसपोर्ट के समान ही है।

अधिक कोर कम जगह पर कब्जा करेंगे, कम जगह और कम बिजली का उपयोग करें और कम लागत (जब तक आप वास्तव में कम संचालित CPUs का उपयोग नहीं कर रहे हों) प्रति-कोर शर्तों और अन्य हार्डवेयर (जैसे मदरबोर्ड) की लागत में।

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

आपके संपादन वास्तव में बहुत कुछ नहीं बदलते हैं। "प्रदर्शन" एक अत्यधिक व्यक्तिपरक अवधारणा है। क्या प्रदर्शन?ध्यान रखें कि यदि आपका आवेदन अतिरिक्त कोर का लाभ उठाने के लिए पर्याप्त रूप से बहुप्रचारित (या मल्टीप्रोसेस) नहीं है तो आप वास्तव में अधिक कोर जोड़कर प्रदर्शन कम कर सकते हैं।

आई/ओ बाध्य अनुप्रयोग शायद दूसरे पर एक को पसंद नहीं करेंगे। वे, आखिरकार, I/O द्वारा सीपीयू नहीं हैं।

गणना-आधारित अनुप्रयोगों के लिए यह गणना की प्रकृति पर निर्भर करता है। यदि आप बहुत सारे फ़्लोटिंग पॉइंट कर रहे हैं तो आप ऑफलोड गणनाओं के लिए एक GPU का उपयोग करके कहीं अधिक लाभ उठा सकते हैं (उदाहरण के लिए Nvidia CUDA का उपयोग करना)। आप विशाल इस से प्रदर्शन लाभ प्राप्त कर सकते हैं। इसके उदाहरण के लिए GPU client for [email protected] पर एक नज़र डालें।

संक्षेप में, आपका प्रश्न स्वयं को एक विशिष्ट उत्तर में उधार नहीं देता है क्योंकि विषय जटिल है और पर्याप्त जानकारी नहीं है। तकनीकी वास्तुकला ऐसा कुछ है जिसे विशिष्ट एप्लिकेशन के लिए डिज़ाइन किया जाना है।

+0

लागत और स्थान पर विचार किए बिना, क्या आप विस्तार कर सकते हैं कि विभिन्न पहलुओं के संबंध में कौन सा बेहतर है? अगर आप कृपया मेरी पोस्ट पर संपादन पर विचार करें। – Sev

+1

यदि आपके पास मेमोरी बैंडविड्थ-भूखे कार्य हैं, तो एक बहु-सॉकेट सिस्टम प्रति कार्य अधिक बैंडविड्थ प्रदान करने में सक्षम हो सकता है यदि ओएस NUMA जागरूक है। हालांकि, यदि कार्य सिंक्रनाइज़ेशन-भारी होते हैं (यानी अक्सर संशोधित डेटा की बड़ी मात्रा साझा करते हैं) तो बहु-सॉकेट सिस्टम की उच्च मेमोरी विलंबता चोट पहुंचा सकती है। – user57368

+3

सेव, मुझे लगता है कि आप समझ नहीं सकते हैं कि आपके प्रश्नों का सरल उत्तर "यह निर्भर करता है" क्योंकि इस पर प्रारंभिक स्टैब लेने पर विचार करने के लिए कई कारक हैं और क्लीटस अच्छा काम करता है। –

3

ठीक है, बिंदु यह है कि अन्य सभी कारक वास्तव में बराबर नहीं हो सकते हैं।

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

1

यह कुछ हद तक वास्तुकला पर निर्भर करता है; लेकिन एक ट्रैक्टर कोर सीपीयू कम संचार के कारण 4 शारीरिक रूप से अलग CPUs की तुलना में काफी समान (या बेहतर) है (यानी मरने से दूर नहीं जाना है और बहुत दूर यात्रा नहीं करना है, जो एक कारक है), और साझा संसाधन।

+0

तो आप कह रहे हैं कि अधिक कोर कोर सिंगल कोर सीपीयू की तुलना में बेहतर हैं? मेरी इच्छा है कि यह साबित करने के लिए कुछ मानक उपलब्ध थे। – Sev

+0

हालांकि एक एकल प्रोसेसर कुछ कोर के बीच साझा कैश हो सकता है। यदि कोर स्मृति के विभिन्न हिस्सों पर काम कर रहे हैं तो प्रोसेसर अधिकांश समय कैश लाइनों को अमान्य कर देगा और बस के माध्यम से मुख्य मेमोरी से डेटा लाएगा। – Ben

2

कम CPUs पर अधिक कोर निश्चित रूप से तेज़ है क्योंकि एसपीवर्ली लिखते हैं। उनका जवाब अब तीन साल पुराना है लेकिन रुझान वहां हैं और मेरा मानना ​​है कि उनके जवाब को कुछ स्पष्टीकरण की जरूरत है। पहले कुछ इतिहास।

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

उन बड़े क्लंकी पी 2 & इंटेल और शुरुआती एथलॉन से पी 3 प्रोसेसर याद रखें & एएमडी से डरन्स जो एक तरफ सेट किए गए थे और एक बड़े प्लास्टिक पैकेज में निहित थे? इसका कारण प्रोसेसर चिप के बगल में एक कैश चिप फिट करने में सक्षम होना था क्योंकि उस समय की फैब्रिकेशन प्रक्रियाओं ने प्रोसेसर पर कैश फिट करने के लिए इसे असुरक्षित बना दिया था। Voilà एक ऑफ-मर, प्रोसेसर समाधान। ये कैश चिप्स, समय सीमाओं के कारण, CPUs घड़ी आवृत्ति के एक अंश (50% या तो) पर चलते हैं। जैसे ही विनिर्माण प्रक्रियाओं को पकड़ा गया, कैशों को मरने पर ले जाया गया और आंतरिक घड़ी आवृत्ति पर दौड़ना शुरू हो गया।

कुछ साल पहले एएमडी ने नॉर्थब्रिज (ऑफ-मर) से और प्रोसेसर (ऑन-डाई) पर रैम मेमोरी कंट्रोलर ले जाया था। क्यूं कर? यह स्मृति के संचालन और अधिक कुशल (तेज) आधे से बाहरी को संबोधित कर रहे तारों को नष्ट करने से बनाता है और Northbridge (सीपीयू तारों-Northbridge तारों-रैम सीपीयू तारों-राम बनने से पहले) के माध्यम से जा निकाल क्योंकि। परिवर्तन भी यह संभव राम ही मर जाते हैं जो प्रोसेसर की स्मृति बैंडविड्थ बढ़ जाती है पर एक साथ काम कर के अपने स्वयं के सेट के साथ कई स्वतंत्र स्मृति नियंत्रकों के लिए बनाया है।

वापस स्पष्टीकरण हम मदरबोर्ड से और प्रोसेसर मरने पर प्रदर्शन के लिए महत्वपूर्ण कार्यक्षमता की ओर एक दीर्घकालिक रुझान देखने को मिलता है।उल्लेख किए गए लोगों के अलावा हमने एक ही मरने पर कई कोरों का एकीकरण देखा है, ऑफ-डाई एल 2/ऑन-डाई एल 1 कैश ऑफ-मर एल 3/ऑन-डाई एल 1 और एल 2 कैश बन गए हैं जो अब मरने वाले एल 1 हैं, एल 2 और एल 3 कैश। कैश इस हद तक बड़े और बड़े हो गए हैं कि वे स्वयं कोर की तुलना में अधिक जगह लेते हैं।

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

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