सीपीयू में एक एकल धागा क्यों फैला है?


24

मैं बस उत्सुक हूं कि शेड्यूलर लगातार सीपीयू के बीच एक ऐप को स्थानांतरित करता है, बजाय इसे एक पर रखने के। यह 100% पर एक के बजाय 25% पर 4 कोर होने के लिए थोड़ा मूर्खतापूर्ण दिखता है।

क्या यह गर्मी के साथ करना है, या यह किसी भी तरह अधिक कुशल है? क्या अन्य ओएस इसे अलग तरीके से करते हैं?

इनसाइट्स या इन-डेप्थ स्टफ के लिंक अच्छे होंगे। (खुद को ज्यादा नहीं पा सका।)

अद्यतन करें:

"स्प्रेड आउट" से मेरा मतलब यह नहीं है कि यह एक साथ कई सीपीयू पर निष्पादित होता है, लेकिन एक से दूसरे तक प्रति सेकंड कई बार स्थानांतरित किया जा रहा है, जिससे यह प्रभाव फैलता है।


3
यहां तक ​​कि जब "कुछ और नहीं चल रहा है", हमेशा सीपीयू के लिए प्रतिस्पर्धा करने वाले सिस्टम थ्रेड होते हैं। उदाहरण के लिए, O / S के पास पुनःप्राप्त मेमोरी पेजों को शून्य करने के लिए एक धागा है, इसलिए जब मेमोरी की आवश्यकता होती है, तो इसके पास जाने के लिए कुछ पेज तैयार होंगे। जब आपका धागा फिर से निष्पादित करने के लिए जाता है, तो आप जिस सीपीयू पर थे, वह इन थ्रेड्स में से एक के उपयोग में हो सकता है। ओएस को क्या करना चाहिए? इसके लिए प्रतीक्षा करें या आपको एक नए सीपीयू में स्थानांतरित करें? यह कभी भी करता है, आप कुछ मामलों में अवांछनीय व्यवहार को समाप्त करते हैं।
टोनी ली

यह एक गोमुख है। SMB, LBP नहीं। :)
मैके १

मेरे "उत्तर" में, मैंने एक एकल पिरोया हुआ कार्यक्रम दिखाया जैसा कि आप वर्णन करते हैं, अर्थात "प्रति सेकंड एक से कई बार स्थानांतरित किया जा रहा है, जिससे यह प्रभाव फैलता है।"
इवान रोज़िका

जवाबों:


8

मुझे लगता wierobहै कि इस बिंदु का वर्णन काफी अच्छी तरह से किया गया है।
यहां क्वाड-कोर QX6800 के साथ सेटिंग्स पर चर्चा करने वाला एक पुराना लेख है । (लिंक उस लेख के दूसरे पृष्ठ पर इंगित करता है)।processor affinity

यदि आप प्रक्रिया को प्रभावित नहीं करते हैं तो कोर को आत्मीयता प्रदान करते हैं ?

  • जबकि विंडोज अनुसूचक कैश के साथ से बचने के ताड़ना के लिए इस तरह के संबंध में फैसला करने की जरूरत है, प्रोसेसर डिजाइन खुद भी ऐसी बातों पर विचार करता है।
  • इंटेल QX6800 क्वाड-कोर (के बाद से मैं यह पहले उल्लेख इस उत्तर में)
    एक है 8MB L3कैश अपने 4 कोर के पार साझा

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


आगे बढ़ते हुए, साथ Nehalem वास्तुकला और NUMA ,
कई सॉकेट भर प्रोसेसर भी बेहतर पता पहुँच पिटाई कर सकेंगे।
यहाँ NUMA पर एक ArsTechnica पेज से एक त्वरित तस्वीर है ।

यहाँ छवि विवरण दर्ज करें

यदि नेह्म और आपकी i7रुचि है, तो मेरे पास इस उत्तर में कुछ और लिंक हैं


आपको क्या लगता है कि "नेहलम आर्किटेक्चर और NUMA के साथ आगे बढ़ते हुए, कई सॉकेट्स में प्रोसेसर भी बेहतर एड्रेस एक्सेस थ्रैश में सक्षम होंगे।" ? जैसा कि मैं इसे देखता हूं, NUMA मेमोरी को और भी अधिक स्थानीय और विशेष रूप से प्रोसेसर से संबंधित बनाता है, इसलिए ट्रैशिंग के बिगड़ते प्रभाव।
रोलैंड पिहलकास

@RolandPihlakas, इस उत्तर के बाद से एक समय हो गया था, लेकिन अर्स्टेक्निका लेख और इन बिंदुओं को देखते हुए मुझे लगता है कि मैं नए प्लेटफार्मों की क्षमता के लिए बेहतर मेमोरी कनेक्टिविटी और सॉफ्टवेयर का लाभ उठाने के लिए लेखांकन कर रहा था (उस विकल्प के साथ नहीं) उस समय एकाधिक सॉकेट विन्यास; (नेहेलम से पहले)।
नीक

6

शेड्यूलर केवल अगले थ्रेड को निष्पादित करता है जो "फ्री" कोर / सीपीयू पर निष्पादन के लिए तैयार है।

आप Windows कार्य प्रबंधक के माध्यम से एक विशेष CPU के लिए एक प्रक्रिया असाइन कर सकते हैं।

25% पर 4 कोर होने का मतलब है कि 4 धागे एक साथ निष्पादित किए जाते हैं। जबकि, x% पर एक कोर का मतलब है कि केवल एक थ्रेड निष्पादित होता है। तो पूर्व कुछ मामलों में अधिक कुशल है।

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

आपका धागा क्या करता है? यदि थ्रेड बहुत कम समय के लिए "सोता है" तो इसे पहले किसी अन्य खतरे के कब्जे में रखा जा सकता है और इस तरह आपके धागे को अगले उपलब्ध कोर पर निष्पादित किया जाता है। यदि आप अपनी प्रक्रिया (जैसे ia कार्य प्रबंधक) द्वारा उपयोग किए जाने वाले केवल एक कोर को निर्दिष्ट करते हैं तो क्या होता है?


3
afaik विंडोज अनुसूचक एक ही सीपीयू / कोर पर धागे रखने का एक बहुत अच्छा काम करता है, ताकि उस मुद्दे से बचा जा सके।
पैक्सिजी

@ Pär: मेरा धागा वास्तव में प्रत्येक कोर पर अमल करने लगता है।
मैके

हाँ, यह शायद ओएस procs है जो मेरे धागे को चारों ओर से काटता है। दो उत्तर कैसे स्वीकार करें? :)
मैके

@ कम से कम Windows XP में मेरे अनुभव से PärBjörklund नहीं। मुझे लगता है कि "कैश-बाउंसिंग" समस्या विस्टा या बाद में तय की गई थी
वैक्सहेड

1
"25% पर 4 कोर होने का मतलब है कि 4 धागे एक साथ निष्पादित होते हैं।" नहीं, इसका मतलब है कि एक धागा निष्पादित किया जाता है, एक कोर पर थोड़ा, फिर ओ दूसरे और इसी तरह। जैसा कि टास्क मैनेजर औसत उपयोग दिखाता है, यह प्रत्येक कोर के लिए 25% (4 कोर सिस्टम पर, दो कोर पर यह 50% दिखाएगा) दिखाएगा। इसका मतलब है कि कोर एक चौथाई समय का पूरी तरह से उपयोग किया गया था और समय के फेर में बेकार था।
डेविड बालैसिक 17

0

यह। एक धागा केवल एक प्रोसेसर पर चल सकता है। हालाँकि, कुछ प्रक्रियाएँ में कई धागे होते हैं, जिन्हें बाहर फैलाया जा सकता है।

तर्क, मानो या न मानो, कभी नहीं माना कि यह कैसा दिखता है। सिस्टम थ्रेड्स को फैलाने की कोशिश करता है क्योंकि इसके पास यह जानने का कोई तरीका नहीं है कि कोई स्पाइक कब देगा।


1
मेरा जोड़ा स्पष्टीकरण देखें। यह एक थ्रेड है, जो पूरे थ्रॉटल पर चल रहा है, जिसे जल्दी से चारों ओर ले जाया जा रहा है ताकि समय के साथ, प्रत्येक कोर (सामने से) 25% व्यस्त हो। (अन्य सभी प्रक्रियाएँ / सूत्र नगण्य हैं)
मैके

0

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

ध्यान दें कि आमतौर पर (विशिष्ट घरेलू उपयोग) अंतर कुछ प्रतिशत की सीमा में होता है।

"4 कोर प्रत्येक 25% उपयोग पर" का अर्थ है, क्योंकि टास्क मैनेजर औसत उपयोग दिखाता है, कि प्रत्येक कोर एक चौथाई समय का पूरी तरह से उपयोग किया गया था और बाकी समय को खाली कर दिया था।

विवरण विंडोज के लिए है, लेकिन यह अन्य ऑपरेटिंग सिस्टम पर भी समान है।


-1

अगर किसी को अभी भी यह पढ़ रहा है, तो मैंने इस पर ध्यान दिया है, और यह देखने के लिए कि क्या यह केवल एक अस्थायी नहीं है, कुछ परीक्षण किए। यह पता चला है कि यह नहीं है! मेरा मानना ​​है कि सभी कारणों से एक ही धागा फैलाना कई कारणों से अधिक कुशल है:

  1. सभी धागों में एक धागा फैलाने से बिजली की खपत कम होती है। अधिकांश प्रोसेसर अपनी आवृत्तियों को कम करते हैं, और अधिक महत्वपूर्ण बात, लोड के अनुसार वोल्टेज, इसलिए एक कोर 2 क्वाड, उदाहरण के लिए, बहुत कम बिजली की खपत करेगा और एक कोर का उपयोग करने के बजाय सभी 4 कोर में एक धागा फैलाकर कम गर्मी का उत्पादन करेगा (जो होगा) सभी कोर में वोल्टेज बढ़ रहा है, क्योंकि केवल एक वोल्टेज नियामक है - जो कि बहुत अप्रभावी है)।
  2. यह सुनिश्चित करता है कि धागा हमेशा अधिकतम / निरंतर गति से चलता है। यदि थ्रेड अचानक अधिक प्रसंस्करण शक्ति का अनुरोध करता है, तो एक कोर अतिभारित हो सकता है और निष्पादन में देरी होगी। इसे कोर में फैलाकर, किसी भी अचानक स्पाइक को बिना लैग और देरी के आसानी से संभाला जाएगा।

इसके अलावा, उपरोक्त दो टिप्पणियों के कारण, मुझे विश्वास है कि टर्बो बूस्ट और आईडीए अप्रभावी हैं। वे पुराने ऑपरेटिंग सिस्टम पर उपयोगी हो सकते हैं, लेकिन लिनक्स और विंडोज 7 सभी कोर में बहुत कुशलता से सब कुछ फैलाते हैं। तो, एक कोर 2 क्वाड q9100 @ 2.26 गीगाहर्ट्ज़ लगभग होगा (हमेशा अपवाद होते हैं :-) हमेशा कोर 2 डुओ X9100 @ 3.06GHz की तुलना में तेज़ होना चाहिए, और मैंने शायद ही कभी इसे आईडीए का उपयोग किया है (मूल रूप से ट्यूरोर को बढ़ावा देने के लिए पूर्ववर्ती) केवल एक पिरोया एप्लिकेशन के लिए एक या दो कोर पर आवृत्ति बढ़ जाती है)।

  • कोर 2 क्वाड में दो घड़ी डोमेन होते हैं, इस तथ्य के लिए धन्यवाद कि दो भौतिक मृत्यु हैं, इसलिए दो कोर पूर्ण आवृत्ति पर चल सकते हैं, जबकि दो सबसे कम आवृत्ति पर हैं। मुझे नहीं पता कि दो वोल्टेज नियामक हैं, हालांकि - मैंने देखा है कि वोल्टेज सभी 4 कोर में समान है, इसलिए पूरे पैकेज के लिए केवल एक नियामक होना चाहिए।

3
यह कई कारणों से संदिग्ध लगता है। कृपया अपने "तथ्यों" का संदर्भ दें। सबसे पहले, चार कोर पर 25% पर कंप्यूटिंग सामान एक पर 100% से कम बिजली क्यों खपत करता है? (मैं सहमत हो सकता हूं कि गर्मी अधिक समान रूप से फैली हुई है, लेकिन ...) इसके अलावा, मेरे प्रश्न में धागा पूर्ण झुकाव (100%) पर चल रहा है, इसलिए यह "अधिक प्रसंस्करण शक्ति का अनुरोध नहीं करेगा", क्योंकि यह पहले से ही कर रहा है जितना संभव।
मैके

खैर, यह सिर्फ मेरी अपनी टिप्पणियों से है - मुझे आईडीए और टर्बोबोस्ट द्वारा साज़िश की गई, कुछ परीक्षण करने का फैसला किया गया। यह कुछ समय पहले था, लेकिन मैं उपरोक्त निष्कर्ष पर पहुंचा। प्रोसेसर कम बिजली की खपत करता है, क्योंकि सभी कोर कम वोल्टेज पर चलते हैं - एक 0.1V कमी से बिजली की खपत में 6-10 वाट की बचत होती है (यदि एक कोर 100% लोड होता है, तो सभी कोर उच्च वोल्टेज पर चलते हैं, चाहे वे निष्क्रिय हों या नहीं)। यह विशेष रूप से SL2M मोड के साथ Core2Duo में सच है। आप पूर्ण झुकाव पर चलने वाले धागे के बारे में सही हैं, किसी भी अधिक प्रोसेसर युक्तियों का अनुरोध नहीं करते हैं, लेकिन ऐसे ऐप हैं जो वास्तव में ऐसा करते हैं।
JakL

"एक धागा फैलाने" जैसी कोई चीज नहीं है (नहीं, 5 साल बाद भी नहीं)। एक ही धागा है, एक कोर पर निष्पादित। और फिर बाद में दूसरे पर। और इसी तरह। प्रत्येक क्षण में एक कोर 100% पर चल रहा है और अन्य निष्क्रिय हैं। इसलिए कोई बचत नहीं है। विशेष रूप से जब आप उल्लेख करते हैं कि सभी कोर पूरे समय वैसे भी पूर्ण वोल्टेज हैं (जैसा कि आपने कहा, वे वोल्टेज साझा करते हैं)। जैसा कि पहले से ही एक ही कोर पर संबोधित किया जा रहा है यह सुनिश्चित करता है कि थ्रेड को सभी प्रसंस्करण शक्ति मिलती है। जैसा कि कोर पहले से ही 100% उपयोग किया जाता है, ओएस अन्य थ्रेड्स को अन्य, कम उपयोग किए गए कोर को शेड्यूल करेगा।
डेविड बालैसिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.