"CPU बाध्य" और "I / O बाध्य" शब्द का क्या अर्थ है?


जवाबों:


452

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

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

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


मोबाइल डिवाइस पर HTTP संचार को समझने में यह कैसे टाई करता है? मैंने java.nio ऑपरेशन का उपयोग करने से सीपीयू उपयोग स्पाइक देखा है ।
इगोरगानापोलस्की

I / O "इनपुट / आउटपुट" है।
कॉमरेड चे

246

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

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

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

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

I / O बाउंड मेमोरी से धीमी होगी बाउंड सीपीयू की तुलना में कैश बाउंड से धीमी होगी।

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


72

बहु सूत्रण

इस उत्तर में, मैं CPU बनाम IO बाउंड वर्क के बीच अंतर करने के एक महत्वपूर्ण उपयोग के मामले की जांच करूंगा: जब बहु-थ्रेडेड कोड लिख रहा हो।

RAM I / O बाध्य उदाहरण: वेक्टर सम

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

#define SIZE 1000000000
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]

समानांतर करना कि आपके प्रत्येक कोर के लिए समान रूप से सरणी को विभाजित करके आम आधुनिक डेस्कटॉप पर सीमित उपयोगिता है।

उदाहरण के लिए, मेरे उबंटू 19.04 पर, सीपीयू के साथ लेनोवो थिंकपैड P51 लैपटॉप: इंटेल कोर i7-7820HQ सीपीयू (4 कोर / 8 धागे), रैम: 2x सैमसंग M471A2K43BB1-CRC (2xGGBB) मुझे इस तरह के परिणाम मिलते हैं:

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

प्लॉट डेटा

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

बेंचमार्क कोड:

मुझे वक्र के आकार को पूरी तरह से समझाने के लिए पर्याप्त कंप्यूटर वास्तुकला नहीं पता है, लेकिन एक बात स्पष्ट है: गणना 8x तेज नहीं होती है क्योंकि मेरे सभी 8 थ्रेड का उपयोग करने के कारण भोलेपन की उम्मीद है! किसी कारण के लिए, 2 और 3 धागे सबसे इष्टतम थे, और अधिक जोड़ने से चीजें बहुत धीमी हो जाती हैं।

इसकी तुलना सीपीयू बाउंड वर्क से करें, जो वास्तव में 8 गुना तेज होता है: समय (1) के आउटपुट में 'वास्तविक', 'उपयोगकर्ता' और 'एसईएस' का क्या मतलब है?

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

CPU 1   --\    Bus    +-----+
CPU 2   ---\__________| RAM |
...     ---/          +-----+
CPU N   --/

इसलिए मेमोरी बस जल्दी से अड़चन बन जाती है, सीपीयू नहीं।

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

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

उस गणना को गति देने का एकमात्र तरीका, नए मेमोरी हार्डवेयर, जैसे मल्टी-चैनल मेमोरी के साथ व्यक्तिगत मेमोरी एक्सेस को तेज करना होगा ।

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

अन्य उदाहरण

  • मैट्रिक्स गुणन रैम और जीपीयू पर सीपीयू-बाउंड है। इनपुट में है:

    2 * N**2
    

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

    N ** 3
    

    गुणन किया जाता है, और यह व्यावहारिक बड़े एन के लिए इसके समानांतर होने के लिए पर्याप्त है।

    यही कारण है कि समानांतर CPU मैट्रिक्स गुणन पुस्तकालय निम्न की तरह मौजूद हैं:

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

    यह सभी देखें:

  • नेटवर्किंग प्रोटोटाइप IO- बाउंड उदाहरण है।

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

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

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

  • एक डमी सी ++ सीपीयू बाउंड ऑपरेशन जो एक नंबर लेता है और उसे बहुत क्रंच करता है:

  • निम्नलिखित प्रयोग के आधार पर छंटनी सीपीयू प्रतीत होती है: क्या C ++ 17 समानांतर एल्गोरिदम पहले से ही लागू हैं? जो समानांतर प्रकार के लिए एक 4x प्रदर्शन में सुधार दिखा, लेकिन मैं एक अधिक सैद्धांतिक पुष्टि भी करना चाहूंगा

सीपीयू या आईओ बाउंड हैं तो कैसे पता करें

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

या, यदि निष्पादन त्वरित है, और आप थ्रेड्स की संख्या को परिमार्जित करते हैं, तो आप इसे आसानी से देख सकते हैं timeकि सीपीयू बाउंड वर्क के लिए थ्रेड्स की संख्या बढ़ जाती है: 'वास्तविक', 'उपयोगकर्ता' और 'सिस' का क्या अर्थ है समय का उत्पादन (1)?

RAM-IO बाध्य: यह बताना कठिन है, क्योंकि RAM प्रतीक्षा समय CPU%माप में शामिल है , यह भी देखें:

कुछ विकल्प:

  • इंटेल सलाहकार रूफलाइन (गैर-मुक्त): https://software.intel.com/en-us/articles/intel-advisor-roofline ( संग्रह ) "एक रूफलाइन चार्ट हार्डवेयर सीमाओं के संबंध में अनुप्रयोग प्रदर्शन का एक दृश्य प्रतिनिधित्व है, मेमोरी बैंडविड्थ और कम्प्यूटेशनल चोटियों सहित। ”

GPUs

GPU में एक IO टोंटी होती है जब आप पहली बार इनपुट डेटा को नियमित CPU पठनीय RAM से GPU में ट्रांसफर करते हैं।

इसलिए, सीपीयू केवल सीपीयू बाध्य अनुप्रयोगों के लिए सीपीयू से बेहतर हो सकता है।

एक बार जब डेटा को GPU में स्थानांतरित कर दिया जाता है, तो यह सीपीयू की तुलना में तेजी से उन बाइट्स पर काम कर सकता है, क्योंकि GPU:

  • अधिकांश सीपीयू प्रणालियों की तुलना में अधिक डेटा स्थानीयकरण है, और इसलिए डेटा को कुछ कोर के लिए दूसरों की तुलना में तेजी से एक्सेस किया जा सकता है

  • किसी भी डेटा पर केवल लंघन द्वारा डेटा समानता और बलिदान विलंबता का शोषण करता है जो तुरंत संचालित होने के लिए तैयार नहीं है।

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

इसलिए यदि आपका आवेदन जीपीयू तेज हो सकता है तो सीपीयू:

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

इन डिजाइन विकल्पों ने मूल रूप से 3 डी रेंडरिंग के आवेदन को लक्षित किया, जिनके मुख्य चरण ओपनगेल में क्या हैं , इस पर दिखाए गए हैं और हमें उनके लिए क्या चाहिए?

  • वर्टेक्स शेडर: 4x4 मैट्रिक्स द्वारा 1x4 वैक्टर का एक गुच्छा गुणा करना
  • टुकड़ा shader: त्रिकोण के प्रत्येक सापेक्ष स्थिति के आधार पर त्रिकोण के प्रत्येक पिक्सेल के रंग की गणना करें

और इसलिए हम निष्कर्ष निकालते हैं कि वे अनुप्रयोग सीपीयू-बाउंड हैं।

प्रोग्रामयोग्य GPGPU के आगमन के साथ, हम कई GPGPU अनुप्रयोगों का निरीक्षण कर सकते हैं जो CPU बाउंड ऑपरेशन के उदाहरण के रूप में कार्य करते हैं:

यह सभी देखें:

CPython Global Intepreter Lock (GIL)

एक त्वरित मामले के अध्ययन के रूप में, मैं पायथन ग्लोबल इंटरप्रेटर लॉक (GIL) की ओर इशारा करना चाहता हूं: CPython में ग्लोबल इंटरप्रेटर लॉक (GIL) क्या है?

यह CPython कार्यान्वयन विवरण CPU-बाउंड कार्य का उपयोग करते हुए कुशलतापूर्वक एकाधिक पायथन थ्रेड को रोकता है। CPython डॉक्स कहते हैं:

CPython कार्यान्वयन विवरण: CPython में, ग्लोबल इंटरप्रेटर लॉक के कारण, केवल एक धागा पायथन कोड को एक ही बार में निष्पादित कर सकता है (भले ही कुछ प्रदर्शन उन्मुख पुस्तकालय इस सीमा को पार कर सकते हैं)। यदि आप चाहते हैं कि आपका एप्लिकेशन मल्टी-कोर मशीनों के कम्प्यूटेशनल संसाधनों का बेहतर उपयोग करे, तो आपको सलाह दी जाती है कि आप इसका उपयोग करें multiprocessingया concurrent.futures.ProcessPoolExecutor। हालाँकि, थ्रेडिंग अभी भी एक उपयुक्त मॉडल है यदि आप एक साथ कई I / O- बाउंड कार्य चलाना चाहते हैं।

इसलिए, यहां हमारे पास एक उदाहरण है जहां सीपीयू-बाउंड कंटेंट उपयुक्त नहीं है और आई / ओ बाउंड है।


1
यार, तुम इतने सक्षम होने का प्रबंधन कैसे करते हो और इस तरह का लेखन देते हो?
मिकायिल अब्दुल्लायेव

1
@MikayilAbdullayev धन्यवाद! मैं केवल "महत्वपूर्ण प्रश्नों" का उत्तर देता हूं और मैं नए प्रासंगिक सामानों को सीखते हुए उन पर बार-बार आता हूं।
सिरो सेंटिल्ली 郝海东 冠状 iro i 法轮功

31

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

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

[और "अड़चन" से मेरा तात्पर्य उस चीज से है जो आपके कार्यक्रम को धीमा बना देती है, अन्यथा उसके पास नहीं है।]


21

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

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

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

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


11

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

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

किसी भी स्थिति में, प्रोग्राम को तेज करने की कुंजी हार्डवेयर को गति देने के लिए नहीं हो सकती है, लेकिन IO या CPU की आवश्यकता को कम करने के लिए प्रोग्राम को ऑप्टिमाइज़ करने के लिए या इसे I / O करने के लिए होना चाहिए जबकि यह CPU को गहन भी करता है। सामान।


6

I / O बाउंड एक ऐसी स्थिति को संदर्भित करता है जिसमें गणना करने में लगने वाला समय मुख्य रूप से इनपुट / आउटपुट ऑपरेशंस के पूरा होने की प्रतीक्षा में खर्च की गई अवधि से निर्धारित होता है।

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


6

IO बद्ध प्रक्रियाएँ: संगणना की तुलना में IO करने में अधिक समय व्यतीत करती हैं, बहुत कम सीपीयू फटते हैं। सीपीयू बाध्य प्रक्रियाएँ: अभिकलन करते हुए अधिक समय व्यतीत करते हैं, कुछ बहुत लंबे सीपीयू फटते हैं


2

देखें Microsoft क्या कहता है।

Async प्रोग्रामिंग का मुख्य कार्य टास्क और टास्क ऑब्जेक्ट्स हैं, जो अतुल्यकालिक संचालन को मॉडल करते हैं। वे एसिंक्स द्वारा समर्थित हैं और कीवर्ड की प्रतीक्षा कर रहे हैं। मॉडल ज्यादातर मामलों में काफी सरल है:

  • I / O- बाउंड कोड के लिए, आप एक ऑपरेशन का इंतजार करते हैं जो एक Async विधि के अंदर एक टास्क या टास्क देता है।

  • सीपीयू-बाउंड कोड के लिए, आप एक ऑपरेशन का इंतजार करते हैं जो टास्क के साथ एक बैकग्राउंड थ्रेड पर शुरू होता है।

प्रतीक्षारत कीवर्ड वह जगह है जहां जादू होता है। यह उस विधि के कॉलर को नियंत्रित करता है जिसने प्रतीक्षा की थी, और यह अंततः UI को उत्तरदायी या लोचदार होने की सेवा देता है।

I / O- बाउंड उदाहरण: एक वेब सेवा से डेटा डाउनलोड करना

private readonly HttpClient _httpClient = new HttpClient();

downloadButton.Clicked += async (o, e) =>
{
    // This line will yield control to the UI as the request
    // from the web service is happening.
    //
    // The UI thread is now free to perform other work.
    var stringData = await _httpClient.GetStringAsync(URL);
    DoSomethingWithData(stringData);
};

सीपीयू-बाउंड उदाहरण: एक गेम के लिए गणना करना

private DamageResult CalculateDamageDone()
{
    // Code omitted:
    //
    // Does an expensive calculation and returns
    // the result of that calculation.
}

calculateButton.Clicked += async (o, e) =>
{
    // This line will yield control to the UI while CalculateDamageDone()
    // performs its work.  The UI thread is free to perform other work.
    var damageResult = await Task.Run(() => CalculateDamageDone());
    DisplayDamage(damageResult);
};

ऊपर दिए गए उदाहरणों से पता चला है कि आप किस तरह से एसिंक्स का उपयोग कर सकते हैं और I / O- बाउंड और CPU-बाउंड वर्क का इंतजार कर सकते हैं। यह महत्वपूर्ण है कि आप पहचान सकते हैं कि आपको कब नौकरी करनी है I / O- बाउंड या CPU-बाउंड, क्योंकि यह आपके कोड के प्रदर्शन को बहुत प्रभावित कर सकता है और संभावित रूप से कुछ निर्माणों का दुरुपयोग कर सकता है।

किसी भी कोड को लिखने से पहले आपको दो प्रश्न पूछने चाहिए:

क्या आपका कोड किसी चीज़ के लिए "वेटिंग" होगा, जैसे डेटाबेस से डेटा?

  • यदि आपका उत्तर "हां" है, तो आपका काम I / O- बाध्य है।

क्या आपका कोड एक बहुत महंगी गणना कर रहा है?

  • यदि आपने "हां" उत्तर दिया है, तो आपका काम सीपीयू-बाउंड है।

यदि आपके पास काम I / O- बाध्य है, तो Async का उपयोग करें और कार्य के बिना प्रतीक्षा करें । आपको टास्क पैरेलल लाइब्रेरी का उपयोग नहीं करना चाहिए। इसका कारण गहराई में Async में उल्लिखित है लेख ।

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


2

निष्पादन के दौरान अंकगणितीय / तार्किक / फ्लोटिंग-पॉइंट (ए / एल / एफपी) प्रदर्शन जब सीपीयू-बाउंड होता है, तो ज्यादातर प्रोसेसर के सैद्धांतिक शिखर-प्रदर्शन (निर्माता द्वारा उपलब्ध कराए गए डेटा और विशेषताओं द्वारा निर्धारित) के पास होता है प्रोसेसर: कोर की संख्या, आवृत्ति, रजिस्टर, ALUs, FPUs, आदि)।

असंभव नहीं कहने के लिए, वास्तविक दुनिया के अनुप्रयोगों में झांकना प्रदर्शन बहुत मुश्किल है। अधिकांश एप्लिकेशन निष्पादन के विभिन्न हिस्सों में मेमोरी तक पहुंचते हैं और प्रोसेसर कई चक्रों के दौरान ए / एल / एफपी संचालन नहीं कर रहा है। मेमोरी और प्रोसेसर के बीच मौजूद दूरी के कारण इसे वॉन न्यूमैन लिमिटेशन कहा जाता है ।

यदि आप सीपीयू शिखर-प्रदर्शन के पास होना चाहते हैं, तो मुख्य मेमोरी से डेटा की आवश्यकता से बचने के लिए कैश मेमोरी में अधिकांश डेटा का पुन: उपयोग करने की एक रणनीति हो सकती है। एक एल्गोरिथ्म जो इस सुविधा का शोषण करता है, वह है मैट्रिक्स-मैट्रिक्स गुणन (यदि दोनों मैट्रिस को कैश मेमोरी में संग्रहीत किया जा सकता है)। ऐसा इसलिए होता है क्योंकि यदि मैट्रिसेस साइज़ के होते हैं n x nतो आपको 2 n^3केवल 2 n^2एफपी नंबरों के डेटा का उपयोग करके ऑपरेशन के बारे में करना होगा। उदाहरण के लिए, दूसरी ओर मैट्रिक्स जोड़, कम सीपीयू-बाउंड या मैट्रिक्स-गुणा की तुलना में अधिक मेमोरी-बाउंड एप्लिकेशन है क्योंकि इसमें n^2एक ही डेटा के साथ केवल FLOP की आवश्यकता होती है ।

निम्नलिखित आंकड़े में एक Intel i5-9300H में मैट्रिक्स जोड़ और मैट्रिक्स गुणन के लिए भोले एल्गोरिदम के साथ प्राप्त FLOPs दिखाया गया है:

मैट्रिक्स जोड़ और मैट्रिक्स गुणन के बीच FLOPs की तुलना

ध्यान दें कि मैट्रिक्स के प्रदर्शन में उम्मीद के मुताबिक मैट्रिक्स के अलावा गुणा से अधिक है। इन परिणामों चलाकर reproduced किया जा सकता है test/gemmऔर test/mataddइस में उपलब्ध भंडार

मेरा सुझाव है कि इस आशय के बारे में जे। डोंगरा द्वारा दिया गया वीडियो भी देखें ।


1

I / O बाध्य प्रक्रिया: - यदि किसी प्रक्रिया के जीवनकाल का अधिकांश भाग i / o अवस्था में व्यतीत होता है, तो प्रक्रिया ai / o बाध्य प्रक्रिया है ।example: -calculator, इंटरनेट एक्सप्लोरर

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


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

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

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