2009-05-15 10 views
195

"सीपीयू बाध्य" और "आई/ओ बाध्य" शब्द क्या हैं?"सीपीयू बाध्य" और "आई/ओ बाध्य" शब्द क्या हैं?

+0

मेमोरी अपनी एक समस्या के लिए बाध्य हैं: http://stackoverflow.com/questions/11831844/unobservedtaskexception-being- फेंक-लेकिन-यह-हैंडल-बाय-ए-वर्कस्ड्यूलर-अनब्सर्स? lq = 1 –

उत्तर

288

यह बहुत सहज है:

एक कार्यक्रम सीपीयू बाध्य है अगर यह तेजी से जाना होगा अगर सीपीयू तेजी से थे, अर्थात यह बहुमत अपने समय से बस सीपीयू (गणना कर) का उपयोग कर खर्च करता है। एक प्रोग्राम जो π के नए अंकों की गणना करता है, आमतौर पर सीपीयू-बाध्य होगा, यह केवल क्रंचिंग संख्या है।

आई/ओ उपप्रणाली तेज होने पर यह तेजी से बढ़ने पर एक प्रोग्राम I/O बाध्य होता है। कौन सा सटीक I/O सिस्टम का अर्थ भिन्न हो सकता है; मैं आमतौर पर इसे डिस्क से जोड़ता हूं। एक प्रोग्राम जो कुछ डेटा के लिए एक बड़ी फ़ाइल को देखता है, अक्सर I/O बाध्य होगा, क्योंकि बाधा तब डिस्क से डेटा को पढ़ रही है।

22

सीपीयू बाउंड का मतलब है कि कार्यक्रम सीपीयू, या केंद्रीय प्रसंस्करण इकाई द्वारा बाधित है, जबकि I/O बाध्य मतलब है कि कार्यक्रम I/O, या इनपुट/आउटपुट जैसे डिस्क, नेटवर्क इत्यादि को पढ़ने या लिखने से बाधित है।

सामान्य रूप से, कंप्यूटर प्रोग्राम को अनुकूलित करते समय, कोई बाधा तलाशने और इसे खत्म करने का प्रयास करता है। यह जानकर कि आपका प्रोग्राम सीपीयू बाउंड मदद करता है, ताकि कोई अनावश्यक रूप से कुछ और अनुकूलित न करे।

[और "टोंटी" द्वारा, मैं बात अपने कार्यक्रम धीमी गति से यह अन्यथा होता जाना करता है कि मतलब है।]

8

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

यदि आपका प्रोग्राम बहुत से प्रोग्राम निर्देश चला रहा है और I/O की प्रतीक्षा नहीं कर रहा है, तो इसे सीपीयू बाध्य कहा जाता है। सीपीयू को तेज करने से कार्यक्रम तेजी से चल जाएगा।

किसी भी मामले में, प्रोग्राम को तेज़ करने की कुंजी हार्डवेयर को तेज़ नहीं कर सकती है, लेकिन आईओ या सीपीयू की मात्रा को कम करने के लिए प्रोग्राम को अनुकूलित करने के लिए, या इसे I/O करने के लिए सीपीयू गहन सामान भी करता है।

15

वाक्यांश एक ही विचार करने के लिए एक और तरीका है:

  • तो सीपीयू को तेज करने के लिए अपने कार्यक्रम में तेजी लाने नहीं है, यह हो सकता है I/O बाध्य।

  • यदि I/O (जैसे तेज डिस्क का उपयोग करना) को तेज़ी से बढ़ाया जाता है, तो आपका प्रोग्राम CPUबद्ध हो सकता है।

(मैं इस्तेमाल किया "हो सकता है" क्योंकि आप खाते में अन्य संसाधनों की आवश्यकता है। मेमोरी एक उदाहरण है।)

163

सीपीयू बाउंड दर, जिस पर प्रक्रिया की प्रगति की गति द्वारा सीमित है इसका मतलब है सीपीयू का। एक कार्य जो संख्याओं के एक छोटे से सेट पर गणना करता है, उदाहरण के लिए छोटे matrices गुणा, सीपीयू बाध्य होने की संभावना है।

आई/ओ बाउंड का मतलब है कि जिस प्रक्रिया पर प्रक्रिया प्रगति होती है वह I/O उपप्रणाली की गति से सीमित होती है। एक कार्य जो डिस्क से डेटा को संसाधित करता है, उदाहरण के लिए, फ़ाइल में लाइनों की संख्या की गणना करना I/O बाध्य होने की संभावना है।

मेमोरी बाध्य दर, जिस पर एक प्रक्रिया की प्रगति राशि स्मृति उपलब्ध है और कहा कि स्मृति का उपयोग की गति के द्वारा सीमित है का मतलब है। एक कार्य जो स्मृति डेटा में बड़ी मात्रा में संसाधित करता है, उदाहरण के लिए बड़े मैट्रिक्स गुणा करना, मेमोरी बाउंड होने की संभावना है।

कैश बाध्य का मतलब है कि जिस प्रक्रिया पर प्रक्रिया प्रगति उपलब्ध कैश की मात्रा और गति से सीमित है। एक ऐसा कार्य जो कैश में फ़िट होने से अधिक डेटा को संसाधित करता है, वह कैश बाध्य होगा।

आई/ओ बाउंड धीमा होगा धीमी गति से धीमा होगा कैश बाउंड सीपीयू बाउंड से धीमा होगा।

I/O बाध्य होने का समाधान अधिक मेमोरी प्राप्त करने के लिए आवश्यक नहीं है। कुछ स्थितियों में, एक्सेस एल्गोरिदम I/O, मेमोरी या कैश सीमाओं के आसपास डिज़ाइन किया जा सकता है। Cache Oblivious Algorithms देखें।

0

मैं/हे बाउंड प्रक्रिया: - एक प्रक्रिया के जीवनकाल के अधिकांश भाग मैं में खर्च किया जाता है, तो/ओ राज्य है, तो प्रक्रिया ऐ/ओ बाध्य process.example है: -calculator, इंटरनेट एक्सप्लोरर

सीपीयू बाउंड प्रक्रिया: - यदि सीपीयू में प्रक्रिया जीवन का अधिकांश हिस्सा खर्च किया जाता है, तो यह सीपीयू बाध्य प्रक्रिया है।

+7

कैलक्यूलेटर आईओ बाध्य प्रक्रिया कैसे होगा? निश्चित रूप से यह सीपीयू बाध्य होगा। यदि आपका कैलकुलेटर नेटवर्क या डिस्क तक पहुंचने से अवरुद्ध समय के अधिकांश समय बिताता है तो मैं सुझाव दूंगा कि इसमें कुछ गड़बड़ है। – rickerbh

+3

मैंने सोचा कि कैलकुलेटर उदाहरण स्पष्ट था: अधिकांश समय उपयोगकर्ता के लिए एक बटन दबाए जाने के लिए इसकी प्रतीक्षा, इस प्रकार I/O के लिए प्रतीक्षा करें। – psp

3

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

यह सीपीयू बाध्य होने के कार्य के विपरीत है। यह परिस्थिति तब उत्पन्न होती है जब डेटा जिस दर पर अनुरोध किया जाता है वह उस दर से धीमा होता है जो इसे खाया जाता है या दूसरे शब्दों में, इसे संसाधित करने से डेटा का अनुरोध करने में अधिक समय व्यतीत होता है।

3

आईओ बाध्य प्रक्रियाएं: गणनाओं की तुलना में आईओ करने में अधिक समय व्यतीत करें, कई लघु CPU विस्फोट हैं। सीपीयू बाध्य प्रक्रियाओं: और अधिक समय बिताने संगणना कर रही है, कुछ बहुत लंबे सीपीयू फटना

17

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

रैम आई/ओ बाध्य उदाहरण: वेक्टर योग

एक प्रोग्राम है जो एक एकल वेक्टर के सभी मानों का योग पर विचार करें:

#define SIZE 1000000 
unsigned int is[SIZE]; 
unsigned int sum = 0; 
size_t i = 0; 
for (i = 0; i < SIZE; i++) 
    /* Each one of those requires a RAM access! */ 
    sum += is[i] 

parallelizing कि से प्रत्येक के लिए समान रूप से सरणी विभाजित करके अपने कोर आधुनिक आधुनिक डेस्कटॉप पर सीमित उपयोगिता है। सी ++ बेंचमार्क: https://github.com/cirosantilli/algorithm-cheat/blob/ea16f6bba12e7dcc32c0cbbbcdc74bcc2fd2d05b/src/cpp/interactive/sum_array_parallel.cpp

जीसीसी 5.2.1, उबंटू 15.10 पर 4 कोर इंटेल i5-3210M, लेनोवो टी 430 के साथ परीक्षण किया गया। नमूना ठेठ परिणाम (चर के बाद से मल्टी-थ्रेडेड):

Time  N Threads Comment 
--------- ---------- -------- 
0.045962 none 
0.0487619 1   Worse than 0 threads because of startup overhead. 
0.0329526 2 
0.0302511 3 
0.0232993 4   Best time. Only about 2x as fast. 
0.0281021 5   Worse than 4 threads because we don't have 
         that many cores, which generate overhead. 

गणना तेजी से 4 धागे से अपेक्षा के अनुरूप 4x नहीं किया गया था!

कारण यह है सब प्रोसेसर एक भी स्मृति बस रैम को जोड़ने का हिस्सा:

CPU 1 --\  Bus +-----+ 
CPU 2 ---\__________| RAM | 
CPU 3 ---/   +-----+ 
CPU 4 --/ 

तो स्मृति बस जल्दी से टोंटी, नहीं सीपीयू हो जाता है।

ऐसा इसलिए होता है क्योंकि दो नंबर जोड़ना एकल सीपीयू चक्र लेता है, मेमोरी पढ़ता है 2016 हार्डवेयर में 100 CPU cycles लेता है।

तो इनपुट डेटा के प्रति बाइट सीपीयू काम बहुत छोटा है, और हम इसे एक आईओ-बाध्य प्रक्रिया कहते हैं।

उस गणना को आगे बढ़ाने का एकमात्र तरीका, नए मेमोरी हार्डवेयर के साथ व्यक्तिगत मेमोरी एक्सेस को तेज करना होगा, उदाहरण के लिए Multi-channel memory

उदाहरण के लिए एक तेज CPU घड़ी में अपग्रेड करना बहुत उपयोगी नहीं होगा।

अन्य उदाहरण

  • आव्यूह गुणन सीपीयू बाध्य रैम और GPUs पर है। इनपुट शामिल हैं:

    2 * N**2 
    

    संख्या है, लेकिन:

    N ** 3 
    

    गुणा किया जाता है, और

    यही कारण है कि पुस्तकालयों की तरह है साथ में चलाना व्यावहारिक बड़े एन के लिए इसके लायक होने के लिए वह पर्याप्त है :

    मौजूद है।

    कैश उपयोग कार्यान्वयन की गति में एक बड़ा अंतर बनाता है। उदाहरण के लिए यह didactic GPU comparison example देखें।

  • जीपीयू के पास सीपीयू में डेटा स्थानांतरित करने में आईओ बाधा है।

    वे डिज़ाइन किए गए हैं ताकि आउटपुट (पिक्सल का आयत) सीधे सीपीयू राउंड-ट्रिप से बचने के लिए वीडियो मेमोरी पर आउटपुट हो सके।

  • नेटवर्किंग प्रोटोटाइपिकल आईओ-बाध्य उदाहरण है।

    यहां तक ​​कि जब हम डेटा के एक बाइट भेजते हैं, तब भी इसे अपने गंतव्य तक पहुंचने में काफी समय लगता है।

    HTTP अनुरोध जैसे छोटे नेटवर्क अनुरोधों को समानांतर करने से एक विशाल प्रदर्शन लाभ प्रदान किया जा सकता है।

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

  • एक डमी सी ++ सीपीयू बाध्य आपरेशन है कि एक नंबर लेता है और यह एक बहुत crunches:

कैसे पता लगाने के लिए अगर आप सीपीयू हैं या आईओ बाध्य

गैर-रैम आईओ डिस्क की तरह बाध्य, नेटवर्क: ps aux, तो CPU%/100 < n threads पर तोक। यदि हां, तो आप आईओ बाध्य हैं, उदा। read अवरुद्ध करने के लिए बस डेटा की प्रतीक्षा कर रहे हैं और शेड्यूलर उस प्रक्रिया को छोड़ रहा है। फिर यह तय करने के लिए कि कौन सी आईओ समस्या है, sudo iotop जैसे आगे के टूल का उपयोग करें।

रैम-आईओ बाध्य: कड़ी मेहनत के रूप में, RAM प्रतीक्षा समय के रूप में इसे CPU% माप में शामिल किया गया है। कैश मिस का अनुमान लगाने के लिए शायद आप सबसे अच्छा कर सकते हैं।

यह भी देखें:

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

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