46

एक एकल कोर सीपीयू पर, प्रत्येक प्रक्रिया ओएस में चलती है, और सीपीयू एक प्रक्रिया से दूसरी प्रक्रिया में अपने आप का सबसे अच्छा उपयोग करने के लिए कूदता है। एक प्रक्रिया में कई धागे हो सकते हैं, इस मामले में सीपीयू संबंधित प्रक्रियाओं पर चलने पर इन धागे के माध्यम से चलता है।एसएमपी कोर, प्रक्रियाएं, और थ्रेड एक साथ कैसे काम करते हैं?

अब, एक बहु कोर सीपीयू पर:

  • कोर हर प्रक्रिया में एक साथ चलाने, या कोर समय से एक खास बिंदु पर विभिन्न प्रक्रियाओं में अलग से चला सकते हैं? उदाहरण के लिए, आपके पास प्रोग्राम ए दो धागे चल रहा है। क्या एक दोहरी कोर सीपीयू इस कार्यक्रम के दोनों धागे चला सकता है? मुझे लगता है कि अगर हम OpenMP जैसे कुछ उपयोग कर रहे हैं तो जवाब हाँ होना चाहिए। लेकिन जब इस ओपनएमपी-एम्बेडेड प्रक्रिया में कोर चल रहे हैं, तो क्या कोर में से एक बस अन्य प्रक्रिया में स्विच कर सकता है?

  • एकल कोर के लिए बनाए गए प्रोग्रामों के लिए, 100% पर चलते समय, प्रत्येक कोर का CPU उपयोग क्यों वितरित किया जाता है? (उदाहरण के लिए 80% और 20% का दोहरी कोर सीपीयू। इस मामले के लिए सभी कोरों का उपयोग प्रतिशत हमेशा 100% तक जोड़ता है।) क्या कोर प्रत्येक तरीके को प्रत्येक थ्रेड को चलाने के लिए एक दूसरे की मदद करने की कोशिश करते हैं, कुछ तरीकों से ?

+2

हार्डवेयर कैसे काम करता है इसका न्यूनतम उदाहरण: http://stackoverflow.com/a/33651438/895245 –

उत्तर

43

कोर (या सीपीयू) आपके कंप्यूटर के भौतिक तत्व हैं जो कोड निष्पादित करते हैं। आम तौर पर, प्रत्येक कोर में कंप्यूटेशंस करने, फ़ाइलों को पंजीकृत करने, लाइनों को बाधित करने आदि के लिए सभी आवश्यक तत्व होते हैं।

अधिकांश ऑपरेटिंग सिस्टम प्रक्रिया के रूप में अनुप्रयोगों का प्रतिनिधित्व करते हैं। इसका अर्थ यह है कि एप्लिकेशन का अपना पता स्थान (== स्मृति का दृश्य) है, जहां ओएस सुनिश्चित करता है कि यह दृश्य और इसकी सामग्री अन्य अनुप्रयोगों से अलग हो।

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

अब अपने विशिष्ट सवाल:

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

2) भले ही आप बहु-कोर CPU पर एकल-थ्रेडेड एप्लिकेशन चला रहे हों, फिर भी आप अन्य सीपीयू काम भी करते हैं। यह एक आता है) ओएस से इस दौरान अपना काम कर रहा है और बी) इस तथ्य से कि आपका एप्लिकेशन कभी अकेले नहीं चल रहा है - प्रत्येक चलने वाली प्रणाली में समवर्ती रूप से निष्पादित कार्यों का पूरा समूह होता है। क्या चल रहा है यह जांचने के लिए विंडोज़ 'टास्क मैनेजर (या ps/top लिनक्स पर) जांचें।

4

हाँ, धागे और प्रक्रियाओं बहु-कोर सीपीयू पर समवर्ती चला सकते हैं, तो यह काम करता है के रूप में आप (चाहे कैसे आप उन थ्रेड्स और प्रक्रियाओं, OpenMP या अन्यथा बनाने की) का वर्णन। एक ही प्रक्रिया या थ्रेड एक समय में केवल एक कोर पर चलता है। यदि उपलब्ध कोर (आमतौर पर मामला) से CPU समय का अनुरोध करने वाले अधिक थ्रेड हैं, तो ऑपरेटिंग सिस्टम शेड्यूलर थ्रेड को आवश्यकतानुसार कोर को चालू और बंद कर देगा।

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

9

ध्यान दें कि ओएस को बहुत अधिक परवाह नहीं है जो धागे की प्रक्रिया से हैं। यह आमतौर पर थ्रेड को प्रोसेसर/कोर पर शेड्यूल करेगा, भले ही थ्रेड से कौन सी प्रक्रिया हो। इससे एक ही समय में चलने वाली एक प्रक्रिया से चार धागे हो सकते हैं, जैसे कि एक ही समय में चार प्रक्रियाओं से एक थ्रेड चल रहा है।

+0

यह वास्तव में शेड्यूलिंग योजना पर निर्भर करता है। कुछ लोग, जैसे गैंग शेड्यूलिंग (http://en.wikipedia.org/wiki/Gang_scheduling), उस जानकारी को शामिल करते हैं जिस पर धागे एक साथ हैं। – BjoernD

+0

मुझे जो जवाब चाहिए वो मिला .. बहुत संक्षिप्त – TheRumboJumbo

6

@BjoernD, आप .. कि उल्लेख किया ..

आपके आवेदन, केवल एक ही धागे के होते हैं, तो आपके पूरे बहु सीपीयू प्रणाली आप ज्यादा मदद नहीं करेगा के रूप में यह अभी भी केवल होगा आपके आवेदन के लिए एक सीपीयू का उपयोग करें ...

मुझे लगता है कि यहां तक ​​कि अपने यदि एक भी लड़ी आवेदन, कि आवेदन धागा अपने जीवनकाल के दौरान विभिन्न कोर पर क्रियान्वित किया जा सकता है। प्रत्येक प्रमोशन और बाद में एक सीपीयू के लिए असाइनमेंट पर, एक थ्रेड को एक अलग कोर असाइन किया जा सकता है।

+0

यह सही है। – BjoernD

+2

पिकी लेकिन सही :) लेकिन यह अभी भी दुर्भाग्यवश है कि सिस्टम आपके प्रोसेस के काम को विभाजित करने के लिए संभव नहीं है ... –

+0

हां, यह एक एकल कोर सिस्टम से भी बदतर हो जाता है, क्योंकि नए कोर पर कैश एक नकली प्रवास के बाद ठंडा हो जाएगा । (बेशक, यदि अन्य पृष्ठभूमि कार्य हैं, तो उन्हें एकल-थ्रेडेड प्रोग्राम से चक्र चोरी करने के बजाय अन्य कोरों पर निर्धारित किया जा सकता है)। वैसे भी, यह एक व्यर्थ quibble है; BjoernD स्पष्ट रूप से "एक समय में एक सीपीयू" मतलब था। –

0

यदि कोई थ्रेड एप्लिकेशन है जो 10 धागे कहता है, शुरुआत में यह उसी सीपीयू/कोर पर शुरू होगा। कई समय के दौरान लिनक्स में लोड बैलेंसर के कारण कई कोर/सीपीयू को कई धागे वितरित किए जाएंगे । यदि ऐसे कई थ्रेड एप्लिकेशन हैं, तो मुझे लगता है कि सभी एप्लिकेशन थ्रेड ज्यादातर कोर/सीपीयू पर चलते हैं क्योंकि थ्रेड के स्थानीय/ग्लोबल्स कोर के एल 1/एल 2 कैश में आसानी से उपलब्ध होते हैं जिसमें वे चल रहे थे। कोर से बाहर उनके निष्पादन समय की तुलना में समय लेने वाला होता है। अगर धागे को एक अलग कोर में चलाने की आवश्यकता होती है। मुझे लगता है कि किसी को धागे को एफ़िनिटी जानकारी प्रदान करनी होगी।

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