यदि शाखा भविष्यवाणी वास्तव में मेरे कार्यक्रम धीमा या
शाखा भविष्यवाणी में मदद करता है नीचे कार्यक्रमों को धीमा नहीं करता है देखने के लिए। जब लोग मिस्ड भविष्यवाणियों की लागत के बारे में बात करते हैं, तो वे इस बारे में बात कर रहे हैं कि गलत तरीके से भविष्यवाणी की गई शाखा से कितनी महंगी शाखा की तुलना की जाती है।
यदि शाखा पूर्वानुमान मौजूद नहीं था, तो सभी शाखाएं गलत तरीके से महंगी होती हैं।
तो क्या "गलत भविष्यवाणी 10 से 20 घड़ी चक्रों के बीच है" वास्तव में इसका मतलब है कि सफल शाखा भविष्यवाणी आपको 10 से 20 चक्र बचाती है।
शाखाओं न केवल कोड के क्रम प्रदर्शन को बेहतर बनाता निकाला जा रहा है, यह भी कोड का अनुकूलन करने के संकलक मदद करता है।
तब शाखा पूर्वानुमान का उपयोग क्यों करें?
शाखाओं को हटाने पर शाखा पूर्वानुमान का उपयोग क्यों करें? आपको नहीं करना चाहिए यदि एक कंपाइलर शाखाओं को हटा सकता है, तो यह होगा (मानकीकरण सक्षम हैं), और यदि प्रोग्रामर शाखाएं हटा सकते हैं (मानते हैं कि यह पठनीयता को नुकसान नहीं पहुंचाता है या यह कोड का प्रदर्शन-महत्वपूर्ण टुकड़ा है), तो उन्हें चाहिए।
यह शायद ही कभी शाखा भविष्यवाणी बेकार बनाता है। यहां तक कि यदि आप किसी प्रोग्राम से जितनी संभव हो उतनी शाखाएं हटाते हैं, तो इसमें अभी भी कई शाखाएं होंगी। इसलिए इस वजह से और कितनी महंगी अप्रत्याशित शाखाएं हैं, अच्छे प्रदर्शन के लिए शाखा पूर्वानुमान आवश्यक है।
क्या कंपाइलर को शाखाओं के बिना असेंबली कोड उत्पन्न करने के लिए मजबूर करने का कोई तरीका है?
एक के अनुकूलन संकलक पहले से ही एक कार्यक्रम से शाखाओं को हटा देगा जब यह कर सकते हैं, लेकिन, जब तक कि हम एक बहुत ही सरल int main() {return 0;}
प्रकार कार्यक्रम के बारे में बात कर रहे हैं (कार्यक्रम के शब्दों को बदले बिना), यह सब दूर करने के लिए असंभव है शाखाओं। लूप्स को शाखाओं की आवश्यकता होती है (जब तक वे अनियंत्रित नहीं होते हैं, लेकिन यह केवल तभी काम करता है जब आप समय से पहले पुनरावृत्तियों की संख्या जानते हों) और इसलिए यदि अधिकांश- और स्विच-कथन। यदि आप if
एस, switch
es और अपने प्रोग्राम में लूप की संख्या को कम कर सकते हैं, तो आप सभी को हटा नहीं पाएंगे।
या शाखा पूर्वानुमान को अक्षम करने के लिए ताकि सीपीयू? तो मैं दोनों परिणामों की तुलना कर सकते हैं?
मेरे सर्वोत्तम ज्ञान के लिए x86 या x86-64 CPUs पर शाखा पूर्वानुमान को अक्षम करना असंभव है। और जैसा कि मैंने कहा, यह प्रदर्शन में कभी भी सुधार नहीं करेगा (हालांकि यह अनुमान लगा सकता है, लेकिन आमतौर पर उन संदर्भों में आवश्यकता नहीं होती है जहां इन CPUs का उपयोग किया जाता है)।
आपके प्रश्न का उत्तर दिए गए प्रश्न के उत्तर के साथ उत्तर दिया गया है। –
ध्यान दें कि, यदि सीपीयू उनका समर्थन करता है, तो हर स्थिति में शाखा नहीं होती है। कंपाइलर्स इस पर बहुत अच्छे हैं। बीटीडब्ल्यू किसी भी सभ्य सीपीयू AFAIK गलत भविष्यवाणियों (एक मापनीय तरीके से और औसत में!) के मामले में आपका कोड धीमा नहीं करेगा, यह बस इसे तेज नहीं करेगा। मापने के लिए? डेटा का एक विज्ञापन-सेट सेट तैयार करें –
@ जॉर्जस्टॉकर धन्यवाद! इसका उपयोग यह समझने के लिए किया जाता है कि 'शाखा भविष्यवाणी' क्या है लेकिन नीचे ध्यान नहीं दिया गया है, उसने कुछ उपयोगी जानकारी प्रदान की है।अतिरिक्त जानकारी के लिए –