गणना के लिए मुझे कितने कोर का उपयोग करना चाहिए? # करोड़ या # करोड़ -1?


12

मेरे पास करने के लिए एक बड़ी गणना है। जबकि मैं सभी कोर का उपयोग कर सकता हूं, मैंने सोचा कि क्या 1 कोर को छोड़ने का कोई कारण है और इसका उपयोग नहीं करना है? (गणना सीपीयू केवल कोई आईओ)। या क्या मैं OS को कम आंक रहा हूं कि इसे संभालने के लिए नहीं जाना चाहिए और उचित संदर्भ स्विच करना चाहिए, भले ही मैं सभी कोर का उपयोग करूं?


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

कई मामलों में, # कोर + 1 का उपयोग करना बहुत मायने रखता है। यदि आप बस #cores का उपयोग करते हैं, तो कोई भी अप्रत्याशित अवरोधक (जैसे पृष्ठ दोष) अनावश्यक रूप से एक कोर को निष्क्रिय होने के लिए मजबूर करता है।
डेविड श्वार्ट्ज

जवाबों:


28

प्रमुख ऑपरेटिंग सिस्टम यह जानने के लिए पर्याप्त परिपक्व हैं कि हर उपलब्ध कोर का उपयोग करने वाली प्रक्रियाओं को कैसे संभालना है। अन्य प्रक्रियाएं (और अक्सर) प्रभावित होंगी, लेकिन गणना धीमी नहीं हो जाएगी क्योंकि आपने प्रत्येक उपलब्ध कोर का उपयोग किया था।

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

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

दूसरी ओर, यदि आपकी प्राथमिकता कम्प्यूटेशन को यथासंभव तेज करना है, तो आपको सभी कोर का उपयोग करना होगा।


7
उच्च CPU उपयोग होने पर इंटरेक्टिव प्रोग्राम को इंटरएक्टिव रखने पर मॉडर्न OS शेड्यूलर वास्तव में बहुत अच्छे होते हैं, जब तक कि इंटरएक्टिव प्रोग्राम भी बहुत अधिक सीपीयू का उपयोग नहीं कर रहे हैं (जो, दी गई, आधुनिक
ब्लॉटेड

नोट: सर्वरों पर भी, यदि आप ssh करने में सक्षम होना चाहते हैं और एक डरावना उत्तर प्राप्त करना चाहते हैं, तो कोर 0 को अकेला छोड़ना उपयोगी हो सकता है।
मैथ्यू एम।

11

निर्भर करता है।

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

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

यदि मशीन गणना के लिए समर्पित नहीं है, तो गणना के लिए 100% देना आदर्श नहीं हो सकता है। उदाहरण के लिए, यदि आप एक वेब ब्राउज़र का उपयोग कर रहे हैं जबकि कम्प्यूटेशन चल रहा है। क्योंकि आपकी मशीन का भार कभी-कभी 100% से अधिक हो जाएगा, इसलिए यह सुस्त लगेगा। संगणना जैसे थ्रूपुट-उन्मुख कार्यों को वास्तव में धीमा नहीं किया जाएगा, लेकिन GUIs जैसे विलंबता-संवेदनशील कार्य जल्दी से प्रतिक्रिया नहीं करेंगे। तब समझ में आता है कि केवल एनपीआरओसी -1 थ्रेड / प्रक्रियाओं की गणना शुरू करें। वैकल्पिक रूप से, सामान्य कार्यों की तुलना में कम्प्यूटेशन के लिए स्पष्ट रूप से कम प्राथमिकता का उपयोग करके इस समस्या को हल किया जा सकता है, इस स्थिति में किसी भी संसाधनों को बर्बाद नहीं करने के लिए एनपीआरओसी प्रक्रियाओं का उपयोग करना चाहिए।


3
"यदि आप एक वेब ब्राउज़र का उपयोग कर रहे हैं, जबकि कम्प्यूटेशन चल रहा है [...] यह सुस्त महसूस करेगा। कम्प्यूटेशन जैसे थ्रूपुट-उन्मुख कार्यों को वास्तव में धीमा नहीं किया जाएगा, लेकिन GUIs जैसे विलंबता-संवेदनशील कार्य जल्दी से प्रतिक्रिया नहीं करेंगे।" …] सामान्य कार्यों की तुलना में संगणना के लिए स्पष्ट रूप से कम प्राथमिकता का उपयोग करके इस समस्या को हल किया जा सकता है "- और यही कारण है कि यूनिक्स पर प्रक्रिया प्राथमिकता मूल्य को" निकनेस "कहा जाता है और नाम की उपयोगिता का उपयोग करके कॉन्फ़िगर किया गया है nice
जोर्ग डब्ल्यू मित्तग

2
"अप्रयुक्त कंप्यूटिंग संसाधन तकनीकी रूप से चीजों को गति नहीं देते हैं", वे कर सकते थे। कम कोर का उपयोग करने से उच्च घड़ी की दर की अनुमति मिल सकती है, और सिंक्रनाइज़ेशन को कम कर सकता है, जिससे चीजों को गति मिल सकती है या नहीं हो सकती है।
डेविड एमएच

2
@Davidmh नोटों के अलावा आमतौर पर CPU की ओर L1 $ और L2 $ को थ्रेड्स के बीच कुछ हद तक साझा किया जाता है और L3 $ को सॉकेट के सभी हिस्से में साझा किया जाता है, इसलिए अधिक थ्रेड का उपयोग करने से $ गलतियाँ कम होने की प्रक्रिया बढ़ सकती है। विशेष रूप से यदि प्रक्रिया प्रोसेसर बाउंड के बजाय मेमोरी बाउंड है।
मैकीज पाइचोटका

यदि आप उचित रूप से थ्रेड / प्रक्रिया प्राथमिकता स्तर निर्धारित करते हैं, तो आप इंटरैक्टिव प्रक्रियाओं पर पृष्ठभूमि के काम के प्रभाव को कम कर सकते हैं। मैंने एक दशक से अधिक के लिए अपनी व्यक्तिगत मशीन पर वितरित कंप्यूटिंग ऐप चलाए हैं; और सीपीयू कंप्यूट कार्यों के साथ कम प्राथमिकता पर ब्राउज़रों और अन्य सामान्य डेस्कटॉप ऐप्स का उपयोग करने की मेरी क्षमता अप्रभावित है। GPU पर संसाधन साझाकरण उतना उन्नत नहीं है, और मैंने पृष्ठभूमि में GPU कंप्यूट चलाने के दौरान GPU त्वरित HTML5 वीडियो (कभी भी गेम नहीं) के साथ सामयिक समस्याओं में भाग लिया है। बहु-थ्रेडेड गेम प्रकाश जीएफएक्स के साथ भी समस्याग्रस्त हो सकते हैं; जीत स्टार्स थ्रेड्स 2+
Dan Is Fiddling By Firelight

1

मैं उनके नकारात्मक वोटों के कारण, नीचे @motoDrizzt के साथ सहमत होने के बारे में कुछ हद तक अनुमान लगा रहा हूं :), लेकिन यह वास्तव में मेरा वास्तविक अनुभव रहा है - कोर की वास्तविक संख्या से परे भी बेहतर है (लेकिन हजारों नहीं)। उदाहरण के लिए, http://www.forkosh.com/images/avoronoi.gif पर एक नज़र डालें जहां उस 3 डी-वोरोनोई_डिग्राम के प्रत्येक 2 डी-प्लेन को स्वतंत्र रूप से उत्पन्न किया जा सकता है। और कार्यक्रम एक साथ n विमानों " गणना " के लिए गणना करने के लिए एक nfork = n query_string विशेषता लेता है ।

चार-कोर प्रोसेसर के साथ, आरेख को पूरा करने के लिए उपयोगकर्ता (उपयोगकर्ता) का समय nfork के साथ रैखिक रूप से बहुत कम हो जाता है, लगभग nfork = 8 (चार कोर हाइपरथ्रेडेड) तक। लेकिन 8 से आगे, समय अभी भी कम हो जाता है, हालांकि अधिक धीरे-धीरे। और 16 से परे, या तो, आगे ध्यान देने योग्य सुधार नहीं। मैंने इस व्यवहार का बिल्कुल भी विश्लेषण नहीं किया है, लेकिन भोलेपन से इसे ओएस (लिनक्स स्लैकवेयर 14.2x64 इस मामले में) का श्रेय दिया जाता है। बाजीगरी की प्रक्रियाएँ पूरी तरह निष्क्रिय समय को और भी कम कर देती हैं।


0

सबसे अच्छा विकल्प प्रणाली पर निर्भर है। तो आप क्या करना चाहते हैं दोनों संस्करणों को एक वास्तविक सिस्टम पर चलाना है, और फिर जांचें कि सिस्टम कैसे प्रतिक्रिया करता है। क्या आप अभी भी अपने सिस्टम पर ब्राउज़र, टेक्स्ट एडिटर, अन्य चीजों का उपयोग कर सकते हैं? और n थ्रेड का उपयोग करते समय प्रदर्शन बेहतर है और n-1 नहीं? यदि आप ऐप को किसी अन्य ऐप के साथ मिलकर चलाते हैं जो सभी सीपीयू का उपयोग करने की कोशिश करता है?

और फिर आपको हाइपरथ्रेडिंग पर विचार करने की आवश्यकता है। चार कोर प्लस हाइपरथ्रेडिंग के साथ, आप 8 कोर, या 7 कोर का उपयोग कर सकते हैं। फिर, सिस्टम और समय समाप्त करने के लिए जवाबदेही का प्रयास करें।

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

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


-4

मुझे नहीं पता कि इसे इस तरह से कैसे लिखा जाए कि "खराब" ध्वनि न हो, इसलिए इसे केवल एक अनुकूल टिप्पणी के रूप में लें, ठीक है?

यह देखते हुए कि एक औसत पीसी में पहले से ही आमतौर पर हजार या अधिक धागे होते हैं, आपको क्या लगता है कि 8 बनाम 7 का उपयोग करने से कोई फर्क पड़ेगा? :-)

अधिक से अधिक धागों का प्रयोग करें। और अगर आपको OS प्रतिक्रिया के बारे में परवाह नहीं है, और आपके धागे काफी लंबे समय (एक सेकंड से अधिक) के लिए चलते हैं, तो आप दो बार कोर की संख्या का उपयोग करने में भी प्रयोग कर सकते हैं।


3
लेकिन इनमें से अधिकांश हजारों धागे 100% सीपीयू का उपयोग नहीं करते हैं, क्या वे करते हैं?
एंड्रियास रिब्रब्रांड

1
दो बार कोर की संख्या का उपयोग करने से आमतौर पर गणना समय में सुधार नहीं होता है। वास्तव में, भौतिक कोर की संख्या से अधिक का उपयोग करना आम तौर पर फायदेमंद नहीं होता है, भले ही आपके पास अधिक तार्किक कोर (हाइपरह्रेडिंग आदि के माध्यम से हो; हालांकि यह आपके द्वारा किए जा रहे सटीक कार्य पर निर्भर हो सकता है)। स्रोत: MATLAB समानांतर प्रसंस्करण का उपयोग करके अतीत से अनुभव।
Sanchises

1
@Sanchises इसका कारण यह है कि हाइपरथ्रेडिंग अर्ध-समांतर अनुदेश इंटरलेविंग का लाभ उठाता है - यह ब्रांकी और मेमोरी हेवी कोड के लिए प्रभावी है। मैट्रिक्स की गणना बहुत FPU तीव्र है और भौतिक कोर प्रति केवल एक FPU है इसलिए हाइपरथ्रेडिंग आपकी मदद नहीं कर सकता है।
जे ...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.