2010-04-08 9 views
7

यह शायद एक चर्चा प्रश्न का अधिक है, लेकिन मैंने सोचा कि स्टैक ओवरफ्लो यह पूछने का सही स्थान हो सकता है। मैं निर्देश पाइपलाइनिंग की अवधारणा का अध्ययन कर रहा हूं। मुझे सिखाया गया है कि एक पाइपलाइन के निर्देश थ्रूपुट में वृद्धि हो जाती है जब पाइपलाइन चरणों की संख्या बढ़ जाती है, लेकिन कुछ मामलों में, थ्रूपुट बदल नहीं सकता है। किस स्थितियों में, क्या ऐसा होता है? मैं सोच रहा हूं कि स्टॉलिंग और ब्रांचिंग सवाल का जवाब हो सकती है, लेकिन मुझे आश्चर्य है कि मुझे कुछ महत्वपूर्ण याद आ रही है।क्यों पाइपलाइन गहराई में वृद्धि का मतलब हमेशा थ्रूपुट में वृद्धि नहीं होता है?

+0

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

उत्तर

4

परिणाम के लिए प्रतीक्षा करते समय, या कैश मिस पर पूरे निर्देशों से रोक दिया जा सकता है। पाइपलाइनिंग स्वयं गारंटी नहीं देती है कि संचालन पूरी तरह से स्वतंत्र हैं। http://www.infoq.com/presentations/click-crash-course-modern-hardware

यह महान विस्तार में इस तरह सामान बताते हैं, और कैसे आगे throughput और छिपाने विलंबता सुधारने के लिए कुछ समाधान को शामिल किया गया: यहाँ 86 इंटेल/AMD वास्तुकला की जटिलताओं के बारे में बहुत प्रस्तुति है। जस्टजेफ ने एक के लिए ऑर्डर ऑफ ऑर्डर निष्पादन का उल्लेख किया है, और आपके पास प्रोग्रामर मॉडल (x86 पर 8 से अधिक रजिस्टरों) द्वारा खुला छाया छायांकन नहीं है, और आपके पास शाखा भविष्यवाणी भी है।

0

मैं यह भी सोचूंगा कि एक श्रृंखला में सबसे लंबे समय तक निर्देश निष्पादित करने के लिए पाइपलाइनिंग बढ़ाना प्रदर्शन में वृद्धि नहीं करेगा। मुझे लगता है कि स्टॉलिंग और ब्रांचिंग मौलिक मुद्दे हैं हालांकि।

0

लंबे पाइपलाइनों में निश्चित रूप से स्टालों/बुलबुले थ्रूपुट में भारी नुकसान का कारण बनते हैं। और निश्चित रूप से, पाइपलाइन जितना अधिक घड़ी चक्र बर्बाद हो जाते हैं।

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

2

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

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

+1

यह 20 निर्देश नहीं है, लेकिन 20 चक्रों के निर्देशों के लायक हैं। एक भारी सुपरस्केकर सीपीयू पर, यह बहुत अधिक हो सकता है। – slacker

1

निर्देश स्तर समांतरता रिटर्न को कम कर रही है। विशेष रूप से, निर्देशों के बीच डेटा निर्भरता संभावित समांतरता निर्धारित करती है।

लिखने के बाद पढ़ें (पाठ्यपुस्तकों में रॉ के रूप में जाना जाता है) के मामले पर विचार करें।

वाक्यविन्यास में जहां पहला ऑपरेंड परिणाम प्राप्त करता है, इस उदाहरण पर विचार करें।

10: add r1, r2, r3 
20: add r1, r1, r1 

लाइन 10 का परिणाम लाइन 10 की गणना के समय से जाना जाना चाहिए। डेटा अग्रेषण इस समस्या को कम करता है, लेकिन ... केवल उस बिंदु पर जहां डेटा ज्ञात हो जाता है।

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