2011-05-30 10 views
8

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

+1

मैं इसे शक है, और अगर वहाँ थे, यह एक बिल्ली के गलमुच्छा जितना के बारे में होगा। –

उत्तर

6

वहाँ क्योंकि वे जिस तरह से गणना की कर रहे हैं, विभिन्न विधेय की तुलना के बीच कोई उल्लेखनीय अंतर नहीं होना चाहिए (सावधान रहना तो यह अलग काम कर सकते हैं मैं विस्तार से 86 मैनुअल नहीं पढ़ा है):

अधिकांश निर्देश एक उपज के रूप में कई झंडे उत्पन्न करते हैं, आमतौर पर आपके पास कम से कम होता है: ले जाएं (सी), ओवरफ्लो (ओ), शून्य (जेड) और नकारात्मक (एन)।

उन विधेय एक एक्स-y अनुदेश द्वारा बनाई गई हैं कि (कि इसके बाद के संस्करण 4 मज़बूती से बनाता है) हम आसानी से पता लगा सकते हैं सभी तुच्छता comparisions चाहता था का उपयोग करना। अहस्ताक्षरित संख्या के लिए:

x = y z 
x != y !z 
x < y !c 
x <= y !c + z 
x > y c . !z 
x >= y c 

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

आधुनिक वास्तुकला (इंटेल साइड पर सी 2 डी से शुरू) कभी-कभी एक मैक्रो ओप में दो माइक्रोस को फ्यूज कर सकते हैं - तथाकथित मैक्रो-ऑप संलयन जिसमें कुछ अच्छे फायदे हैं। और एक आर्किटेक्चर से अगले में उस परिवर्तन के नियम और थोड़ी देर तक हैं। उदाहरण शाखाओं कि अतिप्रवाह, समता या संकेत झंडा केवल (JO, JNO, जेपी, JNP, जे एस, JNS) परीक्षण के लिए लेकिन टेस्ट के साथ फ्यूज नहीं कर सकते सीएमपी साथ C2D और Nehalems (you bet I looked that one up - section 7.5) पर।

तो हम बस कह सकते हैं यह जटिल है और इस तरह की चीजों के बारे में चिंता नहीं है? यह सिवाय इसके कि यदि आप एक कंपाइलर के लिए एक ऑप्टिमाइज़र लिख रहे हैं, क्योंकि वास्तव में - आप अपने स्रोत कोड में जो लिखते हैं उससे स्वतंत्र है, तो संकलक ऐसा करेगा जो किसी भी तरह से चाहता है - और अच्छे कारण के लिए (यानी यदि जेजीई सैद्धांतिक रूप से तेज़ था लिखने के लिए अगर (x < वाई) आमतौर पर ..)। और यदि आपको वास्तव में एक सलाह की आवश्यकता है: 0 के विरुद्ध तुलना करना अक्सर तेज़ होता है।

3

मुझे पूरा यकीन नहीं है कि एएलयू/एफपीयू में अंतर्निहित कार्यान्वयन कैसे किया जाता है लेकिन उनमें से सभी के लिए केवल एक ही ऑपरेशन होना चाहिए (आदिम प्रकारों पर) वह यह है कि)

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

आप घटना सिर्फ एक का उपयोग करके सभी संबंध ऑपरेटरों को लागू कर सकते हैं:

 
a < b is the base 
a > b == b < a 
a >= b == !(a < b) 
a <= b == !(a > b) 

बेशक यह है कि कैसे नहीं यह सीपीयू में लागू है, इस अधिक सामान्य ज्ञान है।

-1

मुझे गंभीरता से संदेह है कि इसमें कोई अंतर है।

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