-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
ध्वज आपको संकलक को बताने का एक तरीका देता है कि आप इन मामलों की परवाह करते हैं या नहीं, इसलिए यह जानता है कि इस तरह के परिवर्तन करने के लिए लाइसेंस प्राप्त है या नहीं।
स्रोत
2011-09-14 15:46:33
एक और भिन्नता पर विचार करें, जहां 'sqrt (x)' का मूल्यांकन बिना शर्त है। जाहिर है, वही अनुकूलन लागू है, लेकिन अब एक अतिरिक्त एफपीयू अपवाद के बजाय, हमारे पास एक एफपीयू अपवाद बहुत जल्दी होता है, संभवत: अन्य स्मृति लिखने से पहले जाल हैंडलर से देखा जा सकता है। सट्टा निष्पादन न केवल अतिरिक्त एफपीयू अपवादों का परिणाम हो सकता है बल्कि अपवादों के समय को भी बदल सकता है। –