2012-12-02 22 views
10

शायद एक साधारण उत्तर; मैं इनमें से कुछ झंडे के लिए जीसीसी दस्तावेज में उपयोग की जाने वाली भाषा के साथ काफी उलझन में हूं!कुछ ऑप्टिमाइज़ेशन जैसे -फ्वोल-प्रोग्राम और -फ्रोफाइल-कई साझा पुस्तकालयों के साथ उत्पन्न होने पर

वैसे भी, मेरे पास तीन पुस्तकालय और एक कार्यक्रम है जो इन तीनों का उपयोग करता है। मैं अलग-अलग (संभावित रूप से) चेतावनी झंडे के अलग-अलग सेटों के साथ अलग-अलग पुस्तकालयों को संकलित करता हूं। हालांकि, मैं ऑप्टिमाइज़ेशन झंडे के एक ही सेट के साथ सभी तीन पुस्तकालयों को संकलित करता हूं।

मैं फिर इन तीन पुस्तकालयों में अपने मुख्य कार्यक्रम को संकुचित झंडे के सेट के साथ जोड़ता हूं और पुस्तकालयों के संकलन के दौरान उपयोग किए जाने वाले वही अनुकूलन झंडे को संकलित करता हूं।

1) क्या मुझे पुस्तकालयों को अनुकूलन झंडे के साथ संकलित करना है या क्या मैं अंतिम कार्यक्रम को संकलित करते समय और पुस्तकालयों को जोड़ने के दौरान इन झंडे का उपयोग कर सकता हूं? यदि उत्तरार्द्ध, तो क्या यह इन पुस्तकालयों में कोड के सभी या बस कुछ (संभवतः जिसे कहा जाता है) अनुकूलित करेगा?

2) मैं -fwhole-program -flto -fuse-linker-plugin और लिंकर प्लगइन सोना का उपयोग करना चाहता हूं। मैं किस स्तर पर इनके साथ संकलित करता हूं ... केवल अंतिम संकलन या पुस्तकालयों के संकलन के दौरान इन झंडे को प्रस्तुत करने की आवश्यकता है?

3) बहुत अधिक 2) हालांकि, -फ्रोफाइल-जेनरेट-फ़ायरोफाइल-आर्क और -प्रोफाइल-उपयोग। मैं समझता हूं कि एक व्यक्ति जेनरेट के साथ एक प्रोग्राम चलाता है, और फिर उपयोग के साथ। हालांकि, क्या मुझे उत्पन्न/उपयोग इत्यादि के साथ प्रत्येक पुस्तकालयों को संकलित करना है या सिर्फ अंतिम कार्यक्रम? और यदि यह केवल आखिरी कार्यक्रम है, तो जब मैं -फ्रोफाइल-उपयोग के साथ संकलित करता हूं तो यह पुस्तकालयों की कार्यक्षमता को भी अनुकूलित करेगा?

उत्तर

1

मैं तो इसकी चेतावनी झंडे के स्वयं के सेट और पुस्तकालयों 'संकलन के दौरान द्वारा उपयोग किए गए अनुकूलन झंडे के साथ इन तीन पुस्तकालयों में अपने मुख्य कार्यक्रम को जोड़ने संकलन।

यहां दो चरण हैं, एक नहीं। ऑब्जेक्ट फ़ाइल बनाने के लिए मुख्य प्रोग्राम को संकलित करना पहला और फिर निष्पादन योग्य बाइनरी बनाने के लिए सबकुछ जोड़ना दूसरा चरण है।

1) मैं वर्तमान अनुकूलन झंडे के साथ पुस्तकालयों संकलित करने के लिए है या मैं बस जब अंतिम कार्यक्रम और पुस्तकालयों को जोड़ने संकलन इन चिह्नों का उपयोग कर सकते हैं? यदि उत्तरार्द्ध, तो क्या यह पुस्तकालयों में कोड के सभी ( बस कुछ (संभावित रूप से जिसे कहा जाता है) को अनुकूलित करेगा?

अनुकूलन झंडे और किसी भी अन्य कंपाइलर-स्तर झंडे प्रति स्रोत कोड फ़ाइल निर्दिष्ट किए जाने चाहिए। प्रत्येक बार ऑब्जेक्ट फ़ाइल बनाने के लिए एक स्रोत फ़ाइल संकलित की जाती है, तो आपको झंडे निर्दिष्ट करने की आवश्यकता होती है। फिर लिंकर के लिए झंडे के एक अलग सेट का उपयोग करके लिंकर द्वारा लाइब्रेरी या निष्पादन योग्य उत्पादन किया जाता है।

2) मैं -fuse-लिंकर-प्लगइन और लिंकर प्लगइन सोने -flto -fwhole-प्रोग्राम का उपयोग करना चाहते हैं। मैं किस स्तर पर इनके साथ संकलित करता हूं ... केवल अंतिम संकलन या इन झंडे को पुस्तकालयों के संकलन के दौरान उपस्थित होने की आवश्यकता है?

प्रत्येक स्रोत कोड फ़ाइल (या जो आपके लिए उपलब्ध हैं) संकलित करते समय आपको -flto निर्दिष्ट करना होगा।सोना लिंकर या जीएनयू एलडी 2.21 या नए का उपयोग करते समय आपको -fuse-linker-plugin और -fwhole-program निर्दिष्ट करने की आवश्यकता नहीं है। अधिक जानकारी के लिए, पर documentation देखें।

3) सुंदर ज्यादा एक ही 2) के रूप में हालांकि साथ, -fprofile-उत्पन्न -fprofile-आर्क्स और -fprofile उपयोग। मैं समझता हूं कि एक व्यक्ति जेनरेट के साथ एक प्रोग्राम चलाता है, और फिर उपयोग के साथ। हालांकि, क्या मुझे जेनरेट/उपयोग इत्यादि के साथ प्रत्येक पुस्तकालय संकलित करना है या केवल अंतिम प्रोग्राम है? और यदि यह सिर्फ आखिरी कार्यक्रम है, तो जब मैं संकलित करता हूं -फ्रोफाइल-उपयोग से यह लाइब्रेरी कार्यक्षमता को भी अनुकूलित करेगा?

2 के समान। इन झंडे प्रति स्रोत कोड फ़ाइल निर्दिष्ट करने की आवश्यकता है ताकि सभी कोड अनुकूलित हो जाएं।

ध्यान दें कि, यदि आपके पास स्रोत कोड नहीं है, तो भी आप स्थिर या गतिशील पुस्तकालयों को लिंक कर सकते हैं जिन्हें एक ही झंडे के साथ अनुकूलित नहीं किया गया था और कोड काम करेगा। यही है, आप विभिन्न स्तरों पर अनुकूलित कोड को मिश्रित कर सकते हैं।

+1

इसके अलावा - ध्यान दें कि -फ्लो उन साझा लाइब्रेरीज़ से बातचीत नहीं करता है जिन्हें आप लिंक कर रहे हैं, आप साझा लाइब्रेरी को स्वयं बनाते समय लिंक टाइम ऑप्टिमाइज़ेशन कर सकते हैं, इसलिए इसे बनाया जाने पर फ़्लोटो से लाभ होता है, लेकिन आपका स्वयं का निष्पादन योग्य उस साझा लाइब्रेरी के लिंक निष्पादन योग्य और साझा पुस्तकालयों से लिंक समय अनुकूलन निष्पादित नहीं कर सकते हैं। (लेकिन आप स्थिर पुस्तकालयों के साथ कर सकते हैं) – nos