2011-09-14 15 views
8

इंटेल C++ कम्पाइलर चल बिन्दु को नियंत्रित करने के लिए दो विकल्प प्रदान करता है से भिन्न क्यों है:क्या बिंदु अटकलें चल रहा है और यह कैसे संकलक के चल बिन्दु मॉडल

-fp-अटकलें (तेज/सुरक्षित/सख्त/बंद) - एफपी-मॉडल (सटीक/तेज़/सख्त और स्रोत/डबल/विस्तारित)

मुझे लगता है कि मैं समझता हूं कि एफपी-मॉडल क्या करता है। लेकिन एफपी-अटकलें क्या हैं और यह एफपी मॉडल से कैसे संबंधित है? मुझे अभी तक कोई इंटेल डॉक नहीं मिला है जो इसे समझाता है!

उत्तर

13

-fp-model प्रभावित करती है कैसे फ्लोटिंग प्वाइंट संगणना किया जाता है, और (असुरक्षित अनुकूलन लाइसेंस द्वारा या परिशुद्धता बदलकर सांख्यिक परिणाम बदल सकते हैं जो मध्यवर्ती पर परिणाम मूल्यांकन किया जाता है)।

-fp-speculation संख्यात्मक परिणाम नहीं बदलता है, लेकिन यह प्रभावित कर सकता है कि एक ऑपरेशन द्वारा फ़्लोटिंग-पॉइंट फ्लैग क्या उठाए जाते हैं (या फ्लोटिंग-पॉइंट जाल सक्षम होने पर क्या जाल लेते हैं)। 99.99% प्रोग्रामर को इन चीजों के बारे में परवाह नहीं है, इसलिए आप शायद डिफ़ॉल्ट के साथ भाग सकते हैं और इसके बारे में चिंता न करें।

यहां एक ठोस उदाहरण है; मान लीजिए आप निम्नलिखित कार्य हो:

double foo(double x) { 
    // lots of computation 
    if (x >= 0) return sqrt(x); 
    else return x; 
} 

sqrt, अपेक्षाकृत बोल, धीमी गति से। यह उत्तोलक इस तरह sqrt(x) की गणना करने के लिए अच्छा होगा:

double foo(double x) { 
    const double sqrtx = sqrt(x); 
    // lots of computation 
    if (x >= 0) return sqrtx; 
    else return x; 
} 

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

-fp-speculation ध्वज आपको संकलक को बताने का एक तरीका देता है कि आप इन मामलों की परवाह करते हैं या नहीं, इसलिए यह जानता है कि इस तरह के परिवर्तन करने के लिए लाइसेंस प्राप्त है या नहीं।

+1

एक और भिन्नता पर विचार करें, जहां 'sqrt (x)' का मूल्यांकन बिना शर्त है। जाहिर है, वही अनुकूलन लागू है, लेकिन अब एक अतिरिक्त एफपीयू अपवाद के बजाय, हमारे पास एक एफपीयू अपवाद बहुत जल्दी होता है, संभवत: अन्य स्मृति लिखने से पहले जाल हैंडलर से देखा जा सकता है। सट्टा निष्पादन न केवल अतिरिक्त एफपीयू अपवादों का परिणाम हो सकता है बल्कि अपवादों के समय को भी बदल सकता है। –

1

आदेश निष्पादन और सट्टा निष्पादन के परिणामस्वरूप अपवाद अपवाद हो सकते हैं या गलत समय पर अपवाद उठा सकते हैं।

यदि यह आपके लिए महत्वपूर्ण है, तो आप फ्लोटिंग-पॉइंट निर्देशों की अटकलों को नियंत्रित करने के लिए fp-speculation विकल्प का उपयोग कर सकते हैं।

के लिए (एक छोटा सा) अधिक जानकारी: http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/fortran/lin/compiler_f/copts/common_options/option_fp_speculation.htm

+1

ध्वज संकलन द्वारा सॉफ्टवेयर * अटकलें नियंत्रित कर रहा है, हार्डवेयर अटकलें निष्पादन नहीं।आउट-ऑफ-ऑर्डर प्रोसेसर में सट्टा निष्पादन * * अपवाद अपवादों को बढ़ा नहीं सकता है - किसी भी नकली अपवाद को निर्देश सेवानिवृत्ति के बिंदु पर लगाया जाता है, ताकि किसी भी कार्यक्रम के लिए देखने योग्य प्रभाव प्रोग्राम आदेश में निर्देशों को निष्पादित किया गया हो। –

+2

@ स्टीफन: हां, और संकलक पैच चीजों को भी तर्क उत्पन्न कर सकते हैं, लेकिन यह प्रोग्राम को धीमा कर देता है। इसलिए सटीक अपवाद व्यवहार बनाम व्यापार गति के विभिन्न विकल्प। –

+0

कंपाइलर को "पैच अप" * हार्डवेयर * अटकलों के लिए कोई कोड उत्पन्न करने की आवश्यकता नहीं है। यह सिलिकॉन में संभाला जाता है। यहां हम कंपाइलर के बारे में बात कर रहे हैं जैसे कि शाखा अंक (* सॉफ़्टवेयर * अटकलें) में लंबे समय तक विलंबता संचालन करना। –

-1

विंडोज ओएस पर: 1. इंटेल कंपाइलर फ़्लोटिंग गणना 32 बिट एप्लिकेशन बनाम 64 बिट एप्लिकेशन, एक ही कोड आपको अलग-अलग परिणाम दे सकता है !!!! कोई फर्क नहीं पड़ता कि आप किस झंडा चुनते हैं:) !!!!

2. विज़ुअल स्टूडियो कंपाइलर फ्लोटिंग गणना 32 बिट बनाम 64 बिट अनुप्रयोग, समान कोड आउटपुट एक ही परिणाम।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना करने या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपनी पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास [पर्याप्त प्रतिष्ठा] (http://stackoverflow.com/help/privileges/comment) हो किसी भी पोस्ट पर टिप्पणी करने में सक्षम हो। –

+0

यह आलोचना या स्पष्टीकरण नहीं है। यह मेरी समाप्ति से सरल तथ्य है और चूंकि मैं इंटेल पर काम कर रहा हूं और इंटेल कंपाइलर से निपट रहा हूं, मुझे लगता है कि मैं "पर्याप्त प्रतिष्ठा" के बिना टिप्पणियां लिख सकता हूं – user3004288

+0

https://software.intel.com/en-us/forums/topic/271440 – user3004288

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