2009-04-26 11 views
6

मैंने कहीं पढ़ा है कि x86 निर्देशों में प्रभावी पते (जैसे एलआईए निर्देश में) की गणना "ईयू" द्वारा की जाती है। यूरोपीय संघ क्या है? एक प्रभावी पते की गणना में वास्तव में क्या शामिल है?x86 आर्किटेक्चर में "ईयू" क्या है? (प्रभावी पता की गणना करता है?)

मैंने केवल MC68k निर्देश सेट के बारे में सीखा है (यूसी बोल्डर इसे पहले सिखाता है) और मुझे google =/के माध्यम से एक अच्छा x86 वेबपृष्ठ नहीं मिल रहा है।

धन्यवाद!

+0

x86 हार्डवेयर विवरणों के अच्छे लिंक के लिए [x86 टैग विकी] (http://stackoverflow.com/tags/x86/info) देखें, विशेष रूप से http://agner.org/optimize/ –

उत्तर

3

"ईयू" निष्पादन इकाई के लिए सामान्य शब्द है। एएलयू एक निष्पादन इकाई का एक उदाहरण है। एफएडीडी और एफएमयूएल, यानी फ्लोटिंग पॉइंट एडर या गुणक, अन्य उदाहरण हैं - क्योंकि, उस मामले के लिए लोड और स्टोर्स के लिए मेमोरी यूनिट (है) है।

एलआईए निर्देशों के लिए प्रासंगिक यूरोपीय संघ एएलयू (जोड़ें, घटाना, और/या, आदि) और एजीई (पता जनरेशन यूनिट) हैं। एजीई मेमोरी पाइपलाइनों, टीएलबी, डेटा कैश इत्यादि के साथ मिलकर

एक सामान्य इंटेल x86 सीपीयू वापस जब मैंने पहली कोडजन गाइड लिखा था तो 2 एएलयू, 1 लोड पाइपलाइन एजीई से जुड़ी थी, एक स्टोर पता पाइपलाइन बंधी थी एक दूसरी एएलयू, और एक स्टोर डेटा पाइपलाइन के लिए। 2016 तक अधिकांश में 3 या 4 एएलयू हैं।

एलआईए एक 3 इनपुट निर्देश है - बेसरेग + इंडेक्सरेग * स्केल + ऑफ़सेट। X86 के मेमोरी एड्रेसिंग मोड की तरह, जिसमें वास्तव में 4 वां इनपुट होता है, सेगमेंट बेस, जो एलआईए गणना का हिस्सा नहीं है। 3 इनपुट आवश्यक रूप से एडीडी के लिए आवश्यक 2 इनपुट से अधिक खर्च करते हैं।

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

अन्य मशीनों पर, एलआईएल एएलयू के एक या दो या तीन द्वारा किया जा सकता है। संभावित रूप से एजीई के बजाय - संभवतः साथ ही साथ एएलयू। यह अधिक लचीलापन साबित करता है।

या, सरल एल ई ऐज़, जैसे reg पैमाने + ऑफसेट, ALUs पर किया जा सकता है, जबकि सबसे बड़ी एल ई ऐज़, जैसे ब्रेग + ireg पैमाने + ऑफसेट, प्रतिबंधित किया जा सकता, या संभावित रूप से दो UOPs किए जाते हैं।

(आउच:।। एप्लिकेशन < < पर छोटा कर दिया, शायद एक HTML quotification बग मैं एक पीसी पर ठीक कर सकता है आह - < < को * बदलकर तय की।)

तो, सवाल करने के लिए नीचे आता है: कौन सा यूरोपीय संघ (निष्पादन इकाई) कौन सा एलईडी संभालता है? एएलयू या एजीई? जवाब मशीन पर निर्भर करता है।

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

+0

इसके अलावा, "सामान्य" x86 CPUs में 3 एएलयू पोर्ट/पाइप और 2 लोड पोर्ट हैं, जब तक कि आप सिल्वरमॉन्ट जैसे कम-शक्ति डिज़ाइन को न देख रहे हों। हैसवेल + में 4 एएलयू बंदरगाह हैं। केवल एएमडी बुलडोजर-परिवार में अभी भी केवल 2 पूर्णांक एएलयू बंदरगाह प्रति पूर्णांक कोर हैं, और यह एक निश्चित-विभाजन एसएमटी की तरह है।के 8/के 10 में प्रति घड़ी 3 एडीडी का थ्रूपुट था। और मैंने देखा है कि आपने 2 एएलयू * बंदरगाहों * की जटिलता में शामिल होने की कोशिश नहीं की है, लेकिन कई विशेष एएलयू (जैसे स्केलर इंटीजर माल यूनिट + वेक्टर एफपी मूल यूनिट + कई इंटेल पी 6/एसएनबी-फ़ैमिली यूर्चेस के पोर्ट 0 पर अन्य सामान)। –

+1

नहीं, पीटर, मैं शुरूआती बंदरगाहों और समापन बंदरगाहों को साझा करने वाले विशेष ईयू के समूहों की जटिलता में नहीं आया, अकेले आरएफ पढ़ने और लिखने के बंदरगाहों, लचीली विलंबता आदि को इंटेल कंपाइलर लेखक के उन मुद्दों को समझाने के लिए काफी कठिन था। गाइड, जब मैंने 1 99 4 के आसपास पी 6 के लिए पहला संस्करण लिखा था। स्टैक ओवरफ्लो के फिटमैफ और प्राइमेटिवली फॉर्मेटिंग में फिट होना बहुत मुश्किल है। –

+0

यूप, आपको कहीं भी रेखा को खींचना है कि उत्तर में कितना विस्तार करना है। मैं ज्यादातर बंदरगाहों के लिए एक फुटनोट के रूप में बंदरगाहों + विशेष यूरोपीय संघों का उल्लेख किया। अच्छा अपडेट; अभी भी अच्छा और छोटा होने पर अधिक सटीक + सही। –

3

ईयू = निष्पादन इकाई?

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

0

एक परिवार के अंदर प्रोसेसर के आंतरिक वर्षों में बहुत कुछ बदल गया है, ताकि "ईयू" संदर्भ को सटीक सीपीयू मॉडल के साथ स्पष्ट करने की आवश्यकता होगी। आपके एम 68 के अनुभव के समानता के रूप में, 68000, 010, 020, 030, 040 और 060 के लिए निर्देश सेट समान रूप से समान हैं लेकिन उनके आंतरिक वास्तव में अलग हैं, इसलिए आंतरिक नाम के किसी भी संदर्भ को उनके भाग संख्या के साथ आने की आवश्यकता है।

6

इंटेल का Software Developer's Manuals x86 पर जानकारी का एक अच्छा स्रोत है, हालांकि वे एक ओवरकिल (और अधिक संदर्भ-जैसे ट्यूटोरियल की तरह) हो सकते हैं।

यूरोपीय संघ (निष्पादन इकाई) संदर्भ एएलयू (अंकगणित तर्क इकाई) के विपरीत सबसे अधिक संभावना है जो आम तौर पर अंकगणितीय और तर्क निर्देशों के लिए जिम्मेदार प्रोसेसर का हिस्सा होता है। हालांकि, यूरोपीय संघ में मेमोरी पतों की गणना के लिए कुछ अंकगणितीय क्षमताओं (या थी) हैं। X86 एलईए निर्देश इन क्षमताओं को असेंबली प्रोग्रामर को बताता है।

आम तौर पर आप एक x86 निर्देश के लिए कुछ बहुत जटिल स्मृति पतों की आपूर्ति कर सकते हैं:

sub eax, [eax + ebx*4 + 0042] 

और जब तक ALU गणित घटाव संभालती है, यूरोपीय संघ पता पैदा करने के लिए जिम्मेदार है। एक पृष्ठ मैं लिंक करने के बाद पर

mul ebx, 4 
add ebx, eax 
add ebx, 0042 

"खंड 1" है:

ए के साथ

, आप अन्य प्रयोजनों के लिए सीमित पता जेनरेट होने क्षमताओं का उपयोग कर सकते हैं:

lea ebx, [eax + ebx*4 + 0042] 

के साथ तुलना करें खंड "3.7.5" डिकसिंग एड्रेसिंग मोड - मेमोरी ऑपरेंड (जिसमें एलआईए एक है) की अपेक्षा रखने वाले निर्देश के लिए आप किस तरह के मेमोरी पते की आपूर्ति कर सकते हैं, यह दर्शाता है कि यूरोपीय संघ के किस तरह के अंकगणितीय (या जो भी मेमोरी इंटरफ़ेस भाग कहा जाता है) क्षमता रखता है।

"वॉल्यूम 2" निर्देश सेट संदर्भ है और एलआईए सहित सभी निर्देशों पर निश्चित जानकारी है।

+1

मुझे आश्चर्य है कि कौन सा तेज/अधिक कुशल है; ली निर्देश या मुल, जोड़ें, कॉम्बो जोड़ें, क्योंकि उन्हें विभिन्न इकाइयों (ईयू/एएलयू) द्वारा संसाधित किया जा रहा है। –

+2

आज के सभी मल्टी-स्टेज पाइपलाइनों, बहु-कोर, बहु-इकाइयों के साथ बताना वाकई मुश्किल है। यूरोपीय संघ इस तरह की गणना के लिए स्वतंत्र हो सकता है जबकि एएलयू व्यस्त हैं, और इसके विपरीत। बिल्ली, मुझे यह भी यकीन नहीं है कि ईयू/एएलयू भेद अब मौजूद है। – aib

+0

एक एएलयू एक प्रकार का ईयू है (वह प्रकार जो जोड़ और शिफ्ट निर्देश चला सकता है)। अन्य प्रकार एक भार इकाई, या एक स्टोर इकाई है, जो उन यूओएस निष्पादित कर सकते हैं। [क्रैजी ग्लेव का जवाब] (http://stackoverflow.com/a/11389785/224132) इस प्रश्न पर अधिक जानकारी बताते हैं। (एंडी ग्लेव इंटेल के पी 6 डिजाइन के आर्किटेक्ट्स में से एक थे। इंटेल की शब्दावली का उनका स्पष्टीकरण सही है, और @ टोनीआर को उस उत्तर को स्वीकार करना चाहिए)। और यदि आप एक से अधिक अन्य निर्देशों को प्रतिस्थापित कर सकते हैं तो 'ली' का उपयोग करना हमेशा एक जीत है। यदि आप सभी 4 (शिफ्ट, 'एड' और 'एड'-तत्काल, और 'mov') को प्रतिस्थापित कर सकते हैं तो यह एक बड़ी जीत है। –

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