निष्पादन के प्रवाह को बदलने वाला कोई भी कोड निर्देश कैश को प्रभावित करता है। इसमें फ़ंक्शन कॉल और लूप के साथ-साथ फ़ंक्शन पॉइंटर्स को डिफ्रेंसिंग भी शामिल है।
जब कोई शाखा या कूद निर्देश निष्पादित किया जाता है, तो प्रोसेसर को यह निर्णय लेने में अतिरिक्त समय व्यतीत करना पड़ता है कि कोड पहले से ही निर्देश कैश में है या फिर उसे निर्देश कैश (शाखा के गंतव्य से) को फिर से लोड करने की आवश्यकता है या नहीं।
उदाहरण के लिए, कुछ प्रोसेसर में छोटे लूप के लिए निष्पादन कोड रखने के लिए पर्याप्त पर्याप्त निर्देश कैश हो सकता है। कुछ प्रोसेसर में एक बड़ा निर्देश कैश नहीं होता है और इसे सरल पुनः लोड किया जाता है। निर्देश कैश को फिर से लोड करने में समय लगता है जिसे निष्पादन निर्देशों को खर्च किया जा सकता है।
- लूप unrolling
- सशर्त अनुदेश निष्पादन (एआरएम प्रोसेसर पर उपलब्ध है)
- इनलाइन कार्यों
- निर्देश पाइपलाइन
संपादित करें: 1: प्रोग्रामिंग तकनीक
इन विषयों खोजें बेहतर प्रदर्शनके लिए प्रदर्शन में सुधार और अनुदेश कैश reloading निम्न कार्य को कम करने के लिए:
कम "अगर" बयान को कम से कम करने के लिए अपने कोड डिजाइन "अगर" बयान । इसमें बूलियन बीजगणित शामिल हो सकता है, अधिक गणित या तुलनात्मक सरलीकरण का उपयोग कर (क्या उन्हें वास्तव में आवश्यकता है?)। "तब" और "अन्य" खंडों की सामग्री को कम करने के लिए पसंद करें ताकि संकलक सशर्त असेंबली भाषा निर्देशों का उपयोग कर सकें।
या इनलाइन के रूप में छोटे कार्यों मैक्रो
परिभाषित ऐसी वापसी स्थान भंडारण और अनुदेश कैश को पुन: लोड के रूप में बुला काम करता है, के साथ जुड़े एक ओवरहेड नहीं है। कम बयानों वाले कार्यों के लिए, संकलक को सुझाव दें कि उन्हें इनलाइन बनाया जाए। इनलाइनिंग का मतलब कोड की सामग्री को पेस्ट करना है जहां फ़ंक्शन कॉल करने के बजाए निष्पादन है। चूंकि फ़ंक्शन कॉल से बचा जाता है, इसलिए निर्देश कैश को फिर से लोड करने की आवश्यकता है।
उतारना पाश लूप
छोटे पुनरावृत्तियों के लिए, नहीं है, लेकिन पाश की सामग्री (कुछ compilers उच्च अनुकूलन स्तर सेटिंग्स पर ऐसा कर सकते हैं) को दोहराएँ। अधिक सामग्री दोहराई गई, लूप के शीर्ष पर शाखाओं की कम संख्या और निर्देश कैश को फिर से लोड करने की आवश्यकता कम है।
तालिका उपयोग लुकअप, नहीं "अगर" बयान
कुछ कार्यक्रमों का उपयोग करें "अगर-किसी और यदि" मानचित्रण डेटा के लिए सीढ़ी मूल्यों के लिए। प्रत्येक "अगर" कथन निर्देश कैश में निष्पादन में एक ब्रेक है। कभी-कभी, थोड़ा गणित के साथ, मानों को एक सरणी जैसे तालिका में रखा जा सकता है और सूचकांक गणितीय गणना की जाती है। एक बार इंडेक्स ज्ञात हो जाने पर, प्रोसेसर निर्देश कैश को बाधित किए बिना डेटा पुनर्प्राप्त कर सकता है।
डेटा या डेटा बदलें संरचनाओं
हैं डेटा के प्रकार के स्थिर है, एक प्रोग्राम डेटा के आसपास अनुकूलित किया जा सकता है। उदाहरण के लिए, संदेश पैकेट को संभालने वाला एक प्रोग्राम पैकेट आईडी (फ़ंक्शन पॉइंटर्स की सोच सरणी) के आधार पर अपने परिचालनों का आधार बना सकता है। पैकेट प्रसंस्करण के लिए कार्यों को अनुकूलित किया जाएगा।
लिंक किए गए सूचियों को सरणी या अन्य यादृच्छिक-एक्सेस कंटेनर में बदलें। किसी सरणी के तत्वों को गणित का उपयोग करके एक्सेस किया जा सकता है और निष्पादन को बाधित नहीं किया जा सकता है। किसी आइटम को ढूंढने के लिए लिंक्ड सूचियों को ट्रैवर्स (लूप) होना चाहिए।
आभासी कार्यों से बचें, और जटिल लूप को छोटे लूप में तोड़ दें। – lpapp
@ लियोर: किस तरह से डुप्लिकेट है? – lpapp
क्षमा करें, मैंने गलत सवाल का जिक्र किया है, एक बार जब मैं कंप्यूटर के पास हूं, तो मैं वोट वापस ले जाऊंगा, लेकिन मुझे सकारात्मक है कि कोड कैश संदर्भ के साथ इसका जवाब दिया गया था, जिसमें ट्रेस कैश, डीकोडेड यूओपी कैश इत्यादि शामिल हैं। – Leeor