क्या सर्वोत्तम संकलक विकल्प (किसी दिए गए मशीन पर) को स्वचालित रूप से खोजने का कोई तरीका है, जिसके परिणामस्वरूप सबसे तेज़ संभव निष्पादन योग्य है?दिए गए मशीन पर सबसे तेज़ एक्सई के लिए स्वचालित रूप से कंपाइलर विकल्प ढूंढें?
स्वाभाविक रूप से, मैं g++ -O3
का उपयोग करता हूं, लेकिन अतिरिक्त झंडे हैं जो कोड को तेज़ी से चला सकते हैं, उदाहरण के लिए -ffast-math
और अन्य, जिनमें से कुछ हार्डवेयर-निर्भर हैं।
क्या किसी को कुछ कोड पता है जो मैं अपने configure.ac
फ़ाइल (जीएनयू ऑटोोटूल) में डाल सकता हूं, ताकि ध्वज ./configure
कमांड द्वारा स्वचालित रूप से मेकफ़ाइल में जोड़ा जा सके?
स्वचालित झंडे को स्वचालित रूप से निर्धारित करने के अलावा, मुझे कुछ उपयोगी कंपाइलर झंडे में दिलचस्पी होगी जो सबसे अनुकूलित एक्जिक्यूटिव के लिए डिफ़ॉल्ट के रूप में उपयोग करने के लिए अच्छे हैं।
अद्यतन: अधिकांश लोग केवल अलग झंडे का प्रयास करने और अनुभवी सर्वोत्तम विकल्पों का चयन करने का सुझाव देते हैं। उस विधि के लिए, मेरे पास एक फॉलो-अप प्रश्न होगा: क्या ऐसी कोई उपयोगिता है जो उस मशीन के लिए संभव है जो सभी कंपाइलर झंडे सूचीबद्ध करती है (उदाहरण के लिए यदि एसएसई निर्देश उपलब्ध हैं तो परीक्षण करें)?
"सर्वश्रेष्ठ" अनुकूलन विकल्प आपके कोड वास्तव में क्या करता है इस पर निर्भर करता है। केवल आप ही जानते हैं। –
और इसे 'ग्यारह तक जाना' बनाने के लिए आपको इसे प्रोफ़ाइल करना चाहिए। कंपाइलर टॉगल के मामले में कुछ मुफ्त लंच छोड़े गए हैं। –
ठीक है, वास्तव में इसे मेरे कोड में दर्ज़ करने के लिए मुझे हाथों का चयन करना चाहिए और उन्हें प्रोफाइल करना चाहिए। लेकिन यह उस मशीन पर उचित '-march = cpu-type' जोड़ने के लिए चोट नहीं पहुंचा सकता है? और कार्यक्रमों की कुछ श्रेणियां होनी चाहिए जो कुछ अन्य (हार्डवेयर-निर्भर) संकलन झंडे से लाभान्वित हों? उदाहरण के लिए, मेरा प्रोग्राम श्रेणी में आता है "बहुत सारे फ़्लोटिंग-पॉइंट ऑपरेशंस का उपयोग करता है"। – Frank