2012-10-27 35 views
9

अलग-अलग x86 सीपीयू (बिल्ड-इन एफपीयू के साथ और उचित रूप से हाल ही में, इस सहस्राब्दी को लॉन्च करने के साथ) का उत्पादन उनके फ़्लोटिंग प्वाइंट प्राइमेटिव्स के लिए एक ही परिणाम है, मानते हैं कि सीपीयू की तुलना में एक ही निर्देश उपलब्ध है, वही इनपुट और एक ही ऑपरेटिंग पैरामीटर जैसे राउंडिंग मोड? मुझे समय में मतभेदों में दिलचस्पी नहीं है, न ही Pentium FDIV bug (जो केवल इसलिए योग्य नहीं है क्योंकि यह घटना प्राचीन है)।क्या एफपी ऑपरेशंस वास्तव में विभिन्न x86 CPUs पर एक ही परिणाम देते हैं?

मुझे लगता है कि उत्तर हां, घटाव, अस्वीकृति, और गोल-से-पूर्णांक के लिए हाँ है, क्योंकि इनकी सटीक परिभाषाएं हैं, और मैं शायद ही कल्पना कर सकता हूं कि कार्यान्वयन में क्या अंतर हो सकता है (शायद एक बग का छोटा ओवरफ्लो/अंडरफ्लो का पता लगाना, लेकिन यह कुछ अनुप्रयोगों में आपदा होगी, इसलिए मुझे लगता है कि यह बहुत पहले पकड़ा गया था और तय किया गया था)।

गुणात्मकता को कार्यान्वित करने की संभावना अधिक होती है: दो डीपीएफपीएन के उत्पाद के निकटतम प्रतिनिधित्व करने योग्य डबल-प्रेसिजन फ्लोट-पॉइंट नंबर (64 बिट्स, मंथिसा के 52 + 1 सहित) को निर्धारित करने के लिए कभी-कभी उत्पाद की गणना करने की आवश्यकता होती है उनकी मंथिसा (लगभग) 104-बिट सटीकता, जो कुछ एलएसबीट्स के लिए तर्कसंगत रूप से प्रयास की बर्बादी है। मुझे आश्चर्य है कि यह भी कोशिश की जाती है, और सही ढंग से किया जाता है। या शायद आईईईई -754, या कुछ डी-फैक्टो मानक, कुछ निर्धारित करता है?

डिवीजन और भी नाजुक लगता है।

और, एक सामान्य डिजाइन से कम, मुझे संदेह है कि अधिक जटिल चीजों के सभी कार्यान्वयन (ट्रिग फ़ंक्शंस, लॉग ..) वास्तव में सिंक हो सकते हैं, गणितीय विधियों की विविधता के कारण उपयोग किया जा सकता है।

मैं शुद्ध शुद्धता के संयोजन से यह पूछ रहा हूं; that answer of mine में सुधार करने की इच्छा; और एक विधि के लिए इच्छा (कभी-कभी) एक प्रोग्राम को वीएम में चलने वाले प्रोग्राम की अनुमति देता है ताकि सीपीयू के बीच एक विसंगति का पता लगाया जा सके जो कि चलने का नाटक करता है, और असली।

+1

हालांकि सवाल बहुत दिलचस्प है (और मैं एक जवाब देखना चाहता हूं), ऐसा लगता है कि आप वर्चुअलाइजेशन का पता लगाने के लिए इसका उपयोग कर सकते हैं। अधिकांश वीएम जो मैं चलाता हूं (वीएमवेयर और केवीएम मुख्य रूप से) में भौतिक सीपीयू सही तरीके से रिपोर्ट किया गया है, इसलिए चिप्ससेट विषमताएं उस मामले में मेल नहीं खातीं। – ssube

+0

अनुकूलित कोड जनरेशन चिंता करने के लिए एक बहुत बड़ी बात है। एफपीयू एक निरंतर तरीके से अनुकूलित करने के लिए * बहुत मुश्किल है। बड़े कारण संकलक एसएसई 2 में जा रहे हैं। –

+0

मैं करीबी टिप्पणियों से असहमत हूं। हालांकि प्रश्न के लिए प्रेरणा गैर-रचनात्मक हो सकती है, वास्तविक प्रश्न काफी मान्य है, और इसे "तथ्यों, संदर्भों या विशिष्ट विशेषज्ञता द्वारा समर्थित किया जा सकता है।" –

उत्तर

9

असेंबली स्तर पर मूल फ़्लोटिंग-पॉइंट निर्देश (जोड़ें, घटाएं, गुणा करें, विभाजित करें, वर्ग रूट, एफएमए, राउंड) हमेशा एक ही परिणाम उत्पन्न करें, जैसा कि आईईईई 754 मानक द्वारा वर्णित है। दो प्रकार के निर्देश हैं जो विभिन्न आर्किटेक्चर पर अलग-अलग परिणाम उत्पन्न कर सकते हैं: अनुवांशिक संचालन (एफएसआईएन, एफसीओएस, एफ 2 एक्सएम 1, और एक जैसे) की गणना के लिए जटिल एफपीयू निर्देश, और अनुमानित एसएसई निर्देश (अनुमानित पारस्परिक, और आरएसक्यूआरटीएसएस, आरएसक्यूआरटीपीएस की गणना के लिए आरसीपीएसएस/आरसीपीपीएस अनुमानित पारस्परिक वर्ग रूट की गणना के लिए)। ट्रांसकेंडेंटल x87 एफपीयू ऑपरेशंस माइक्रोकोड में कार्यान्वित किए जाते हैं, और एएफएआईके सभी इंटेल और एएमडी सीपीयू एएमडी के 5 को छोड़कर उसी माइक्रोक्रोड का उपयोग करते हैं, इसलिए आप इसका पता लगाने के लिए उपयोग नहीं कर सकते हैं। यह केवल वीआईए, साइरिक्स, ट्रांसमेटा, और अन्य पुराने सीपीयू का पता लगाने के लिए उपयोगी हो सकता है, लेकिन उन पर विचार करने के लिए बहुत दुर्लभ हैं। लगभग एसएसई निर्देश इंटेल और एएमडी पर अलग-अलग लागू किए जाते हैं, और AFAIK पुराने (प्री-के 8) और नए एएमडी सीपीयू पर कार्यान्वयन में कुछ अंतर है। आप एएमडी सीपीयू को इंटेल और इसके विपरीत होने का नाटक करने के लिए उस अंतर का उपयोग कर सकते हैं, लेकिन यह एक सीमित उपयोग-मामला है।

+1

मैंने कुछ यादृच्छिक प्रयोग किए हैं जो [इस] (http://stackoverflow.com/a/13102431/903600) और [उस अन्य] के साथ संगत हैं (http://stackoverflow.com/a/13102625/903600) उत्तर । मैंने छद्म-यादृच्छिक बिट्स (एक सी यूनियन का उपयोग करके 80-बिट लंबे डबल में परिवर्तित) को '/', 'sqrtl', 'sinl' (x87 निर्देशों के रूप में कार्यान्वित) में खिलाया, और परिणाम धोए (बिट्स में वापस परिवर्तित), 1e6 बार। मैं केवल एक ही अंतर 'sinl' के साथ था, जिसने इंटेल और एएमडी के बीच अलग-अलग हैंश (लेकिन पीआईआईआई और कोर i7 के साथ-साथ एथलॉन एक्सपी और अल्थलॉन 5050e के बीच संगत) दिया। – fgrieu

2

इरेटा में बहुत अच्छी तरह से प्रलेखित चरम मामलों को छोड़कर, सभी आईए -32 निर्देश प्रोसेसर में समान रूप से व्यवहार करते हैं।

स्पष्ट अपवाद हैं, बेशक, CPUID और एमएसआर एक्सेस करता है।

स्पष्ट गैर-अपवाद विभिन्न तर्क, पूर्णांक और फ़्लोटिंग बिंदु संचालन हैं। Maratyszcza ने in his answer लिखा, अधिक जटिल परिचालनों की गणना माइक्रोक्रोड द्वारा की जाती है। यह माइक्रोक्रोड विभिन्न सूक्ष्मजीवों के साथ प्रोसेसर के बीच बहुत अलग हो सकता है, लेकिन परिणाम एक जैसा होने की गारंटी है।इंटेल, एक के लिए (मुझे अन्य x86 डेवलपर्स का कोई पहला ज्ञान नहीं है), प्रोसेसर के बीच पिछड़ा संगतता सुनिश्चित करने के लिए विशाल संसाधनों का निवेश करता है, यहां तक ​​कि "बग्गी" (जो कि नए स्पेक में बग बदलता है) का पुनरुत्पादन भी करता है।

जहां आर्किटेक्चर अलग-अलग व्यवहार करता है, जैसे वीएमएक्स (वर्चुअलाइजेशन) और एसएमएम (सिस्टम मैनेजमेंट) के साथ, नियंत्रण संरचनाओं में एक संशोधन आईडी शामिल होती है। एक ही संशोधन आईडी का उपयोग करने वाले सभी प्रोसेसर इन आर्किटेक्चर के संबंध में वैसे ही व्यवहार करने की गारंटी देते हैं।

मूल प्रश्न, एफपी ऑपरेशंस का उत्तर देने के लिए, वे x87, एसएसई या एवीएक्स हो, IEEE 754 के अनुसार, सभी प्रोसेसर पर एक ही परिणाम दें।

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

  • कोई संबंधित समस्या नहीं^_^