इंटेल फोरट्रान कम्पाइलर: संकलन में अनुकूलन पर सुझाव


21

मैं अपनी प्रयोगशाला में अपने व्यक्तिगत अनुभव के साथ शुरुआत करूंगा। Ifort 9 और 10 दिनों में वापस, हम अनुकूलन के साथ काफी आक्रामक हुआ करते थे, -O3 और प्रोसेसर विशिष्ट झंडे (उदाहरण के लिए -xW -xSSE4.2) के साथ संकलन करते थे। लेकिन ifort 11 से शुरू होकर, हमने नोटिस करना शुरू किया:
1. परिणामों में कुछ विसंगतियां (क्योंकि शब्दार्थ संरक्षित नहीं थे)
-O2 की तुलना में छोटे लाभ।

इसलिए वर्तमान में, हम आमतौर पर -O2 और -xhost का संकलन करते हैं। क्या आपके पास ifort 11 के साथ बेहतर सुझाव हैं? क्या यह एक बार फिर से बदल जाएगा क्योंकि हम इफोर्ट 12 में संक्रमण करेंगे? अग्रिम में धन्यवाद।


7
ऑप्टिमाइज़ेशन से सभी कोड समान रूप से लाभान्वित नहीं होते हैं। इस प्रकार, मुझे लगता है कि एक बेहतर सवाल यह होगा कि "मैं अपना कोड कैसे बता सकता हूं ताकि यह पता चल सके कि संकलक अनुकूलन क्या प्रभावी हैं?"
मैट नेप्ले

1
क्योंकि शब्दार्थों को संरक्षित नहीं किया गया था, या क्योंकि कुछ फिर से व्यवस्थित किया गया था? यह विषय से थोड़ा भटक रहा हो सकता है, लेकिन कोड का एक टुकड़ा देखना अच्छा होगा जो समस्या को पुन: पेश करता है। यह हो सकता है कि कुछ इस तरह से पुन: व्यवस्थित किया गया था जो आपको पसंद नहीं है लेकिन यह सोचता है कि संकलक ठीक होना चाहिए। मेरा अनुभव है कि इंटेल 12 अपने किसी भी पूर्ववर्ती की तुलना में वैश्वीकरण का बेहतर काम करता है, इसलिए जब आप नवीनतम पर स्विच करते हैं तो मैं और अधिक बदलावों की उम्मीद करूंगा।
बिल बर्थ

मैंने कहा कि शब्दार्थ को संरक्षित नहीं किया गया था आदेश देने के बराबर नहीं संरक्षित था। वैसे भी, मुझे एहसास है कि मेरा सवाल (भी?) सामान्य है, और मैं बारीकियों में नहीं रहना चाहता था। हमारे पास इंटेल 10 के साथ कई समस्याएं हैं, कुछ संकलक कीड़े थे और कुछ अस्पष्टीकृत छोड़ दिए गए थे। तो 11 के साथ, हम इसे सुरक्षित खेल रहे हैं और हम प्रदर्शन से खुश हैं। लेकिन शायद हम इसे बहुत सुरक्षित खेल रहे हैं, और मैं जानना चाहता था कि क्या समुदाय की कुछ सलाह थी।
फ्रेंचकेवलर

जवाबों:


16

हम दृढ़ता से हमारे सभी उपयोगकर्ताओं को -O3 -xHost -ipoifort 11 और ifort 12 दोनों के लिए शुरू करने की सलाह देते हैं । यदि O3 द्वारा विशेष रूप से फ़्लोटिंग पॉइंट ट्रांसफ़ॉर्मेशन सक्षम हैं जो आपकी कुछ संगणनाओं की सटीकता को प्रभावित करते हैं, तो आप उन लोगों को विशेष रूप से बंद कर सकते हैं -fp-model precise -fp-model except(या, अधिक कठोर, -fp-model strict) अन्य अनुकूलन को बनाए रखने के दौरान O3 सक्षम बनाता है, जैसे कि कैश के लिए लूप ब्लॉकिंग, लूप फ्यूजन और अनरोलिंग और मेमोरी एक्सेस ऑप्टिमाइजेशन।

मैं व्यक्तिगत फाइलों पर फ़्लोटिंग पॉइंट मॉडल सामान आज़माने और यह पता लगाने की सलाह दूंगा कि यह विश्व स्तर पर बंद करने के बजाय कहां फर्क करता है; यह एक ~ 15% स्पीड बम्प हो सकता है, और आप इसे वहां रखना चाहते हैं जहाँ यह आपकी गणनाओं को प्रभावित नहीं करता है। यदि आप सुनिश्चित नहीं हैं कि परिशुद्धता कहाँ प्रभावित हो रही है, तो आप उन फ़ाइलों के लिए फ़्लोटिंग पॉइंट मॉडल फ़्लैग को चालू या बंद कर सकते हैं, या राउंडिंग मोड के साथ खेल सकते हैं

हमने हाल ही में अपने उपयोगकर्ताओं को x86 के लिए ग्नू और इंटेल कम्पाइलर पर ध्यान केंद्रित करते हुए अनुकूलन झंडे के बारे में एक छोटी सी बात दी; आप यहाँ उस बात से स्लाइड देख सकते हैं ।

संयोग से, जब हम आपके कोड के लिए ऑप्टिमाइज़ेशन फ़्लैग चुनने के बारे में बात कर रहे हैं, तो अब-यह भी -vec-रिपोर्ट के आउटपुट को देखने के लायक है, यह देखने के लिए कि कंपाइलर ने एक लूप को कैसे वेक्टर करने का प्रयास किया और नहीं; कभी-कभी छोटे बदलाव होते हैं जो आप अपने पाश में कर सकते हैं जिसके परिणामस्वरूप वेक्टरकरण संभव हो सकता है (जो 4x स्पीडअप हो सकता है)। इसी तरह अधिक सामान्य -अपनाने-रिपोर्ट के लिए


मुझे आपका उत्तर पसंद है लेकिन मैंने इसे हमारे एक टेस्टकेस के साथ फिर से आज़माया है और -O3 -xhost -fp-model precise -fp-model exceptइसके परिणामस्वरूप 30% मंदी आई है । मैं फिर से प्रोफाइलिंग -vec-reportदेखूंगा और यह देखने की कोशिश
करूंगा

2
ओवर -O2 -xhost? यह तो दिलचस्प है; यह बहुत असामान्य है लेकिन ऐसा हो सकता है। इस तरह के मामलों में, ऑप्टिमाइज़र कुछ ऐसा कर रहा है जिसके पास यह सोचने का अच्छा कारण है कि गति में सुधार होगा, लेकिन यह पता चलता है कि इससे चीजें बदतर होती हैं। आमतौर पर वैज्ञानिक कोड के लिए, जिसमें काफी सीधी संरचना होती है, ऐसा नहीं होता है। इस तरह के मामलों में, प्रोफ़ाइल निर्देशित अनुकूलन - software.intel.com/sites/products/documentation/hpc/compilerpro/… - अक्सर मदद कर सकता है।

5

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

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

आशा है कि ये आपकी मदद करेगा।


4

मुझे लगता है कि यह उत्तर शायद बहुत दूर है, लेकिन बहुत देर हो चुकी है, लेकिन आक्रामक अनुकूलन के लिए, "-ऑप्शन" विकल्प सबसे आसान समाधान की तरह लगता है। मैन पेज के कुछ अंश:

-fast
    Maximizes speed across the entire program.
    Description:
    This option maximizes speed across the entire program.

    It sets the following options:
     - On Linux* systems: -ipo, -O3, -no-prec-div, -static, and -xHost
     - On OS X* systems: -ipo, -mdynamic-no-pic, -O3, -no-prec-div, and -xHost
     - On Windows*  systems:  /O3,  /Qipo,  /Qprec-div-,  and /QxHost

    NOTE: Option fast sets some aggressive optimizations that may not be appropriate for all
    applications. The resulting executable may not run on processor types different from the
    one on which you compile. You should make sure that you understand the individual optimi-
    zation options that are enabled by option fast.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.