2008-09-09 30 views
12

कोई भी इस कंपाइलर सुविधा को जानता है? ऐसा लगता है कि जीसीसी समर्थन है। यह कैसे काम करता है? संभावित लाभ क्या है? किस मामले में यह अच्छा है? अंदरूनी लूप्स?प्रोफ़ाइल-निर्देशित अनुकूलन (सी)

(इस सवाल का, विशिष्ट है नहीं सामान्य रूप में अनुकूलन के बारे में है, धन्यवाद)

+1

http://stackoverflow.com/questions/4365980/how-to-use-profile-guided-optimizations-in-g वर्णन करता है कि इसका उपयोग कैसे करें (झंडे, आदि) – rogerdpack

उत्तर

12

यह प्रत्येक कोडपैथ लेने की संख्या की गणना करने के लिए अतिरिक्त कोड डालकर काम करता है। जब आप दूसरी बार संकलित करते हैं तो संकलक आपके प्रोग्राम के निष्पादन के बारे में प्राप्त ज्ञान का उपयोग करता है जो कि पहले ही अनुमान लगा सकता है। पीजीओ कुछ काम कर सकता है:

  • यह तय करना कि कौन से कार्यों को रेखांकित किया जाना चाहिए या नहीं कि उन्हें कितनी बार बुलाया जाता है।
  • यह तय करना कि "if" कथन की कौन सी शाखा का अनुमान लगाया जाना चाहिए, एक कॉल या दूसरे कॉल पर जाने वाले कॉल के प्रतिशत के आधार पर संकेत दिया जाना चाहिए।
  • लूप को कॉल करने के लिए हर बार कितने पुनरावृत्तियों को लिया जाता है, इस पर आधारित लूप को अनुकूलित करने का निर्णय लेना तय करना।

आप वास्तव में कभी नहीं जानते कि ये चीजें तब तक आपकी सहायता कर सकती हैं जब तक आप इसका परीक्षण नहीं कर लेते।

+1

धन्यवाद, यह दिलचस्प लगता है। क्या आपके पास साझा करने के लिए कोई दस्तावेज लिंक है? – elmarco

+0

आपके द्वारा उल्लिखित शाखाओं की भविष्यवाणी का उपयोग नहीं किया जाता है और पूरी तरह से बेकार है, क्योंकि शाखा हिट उपसर्ग केवल पहली बार उपयोग किया जाता है जब एक सीपीयू द्वारा शाखा का सामना किया जाता है। वास्तविक लाभ जीसीसी यह जानकर है कि यह भविष्यवाणी की संभावनाओं के आधार पर जटिल ब्रांच कोड को कैसे व्यवस्थित कर सकता है। –

+0

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

2

अनुकूलन के बारे में मज़ा बात यह है कि गति लाभ स्थानों में से अप्रत्याशित में पाए जाते हैं।

यह भी कारण है कि गति की समस्या कहां अनुमान लगाने के बजाय आपको प्रोफाइलर की आवश्यकता है।

मैं एक प्रोफाइलर (gperf से शुरू करने की सलाह देता हूं यदि आप जीसीसी का उपयोग कर रहे हैं) और बस कुछ सामान्य संचालन के माध्यम से अपने आवेदन को चलाने के परिणामों के आसपास पोक करना शुरू करें।

4

जेसन की सलाह सही है। सबसे अच्छा स्पीडअप जो आप प्राप्त करने जा रहे हैं, "खोज" से आते हैं कि आपने ओ (एन) एल्गोरिदम कहीं भी एक आंतरिक लूप में फिसल दिया है, या आप महंगे कार्यों के बाहर कुछ गणनाओं को कैश कर सकते हैं।

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

मुझे इंटेल वीट्यून का उपयोग मुख्य रूप से प्रोफाइलर के रूप में करना पसंद है क्योंकि यह वाद्ययंत्र प्रोफाइलर्स की तुलना में गैर-आक्रामक है जो व्यवहार को बहुत अधिक बदलता है।

6

पीजीओ x264 संकलित करते समय 5% गति वृद्धि देता है, जिस परियोजना पर मैं काम करता हूं, और हमारे पास इसके लिए एक अंतर्निहित प्रणाली है (fprofiled बनाओ)। कुछ मामलों में यह एक अच्छा मुफ्त गति बढ़ावा देता है, और शायद उन अनुप्रयोगों में और अधिक मदद करता है जो x264 के विपरीत हस्तलिखित असेंबली से कम होते हैं।

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