एकमात्र चीज जिसे मैंने अभी तक पाया है "त्रुटि मुक्त परिवर्तन" हैं। a+b
, a-b
, और a*b
से किसी भी फ़्लोटिंग पॉइंट नंबर त्रुटियों के लिए फ्लोटिंग पॉइंट नंबर भी हैं (निकटतम मोड में, कोई ओवरफ़्लो/अंडरफ्लो इत्यादि नहीं मानते हैं)।
अतिरिक्त (और स्पष्ट रूप से घटाव) त्रुटि गणना करना आसान है; यदि abs(a) >= abs(b)
, त्रुटि वास्तव में b-((a+b)-a)
(2 फ्लॉप, या 4-5 है यदि हम नहीं जानते कि कौन सा बड़ा है)। गुणात्मक त्रुटि fma
के साथ गणना करने के लिए तुच्छ है - यह केवल fma(a,b,-a*b)
है। fma
के बिना यह बदसूरत कोड की 16 फ्लॉप है। और सही ढंग से गोलाकार fma
का पूर्ण जेनेरिक इम्यूलेशन उससे भी धीमा है।
असली गणना के प्रति फ्लॉप त्रुटि त्रुटि के अतिरिक्त 16 फ्लॉप एक विशाल ओवरकिल है, लेकिन केवल 1-5 पाइपलाइन-अनुकूल फ्लॉप के साथ यह काफी उचित है, और त्रुटि ट्रैकिंग के उस 50% -200% ओवरहेड के आधार पर कई एल्गोरिदम के लिए और मुआवजे के परिणाम छोटे से गलती के रूप में होते हैं जैसे कि सभी गणनाएं कई मामलों में बीमारियों की संख्या से दोगुना हो जाती हैं, कई मामलों में बीमारियों से परहेज करते हैं।
दिलचस्प बात यह है fma
कभी इन एल्गोरिदम में परिणाम की गणना करने के लिए, बस त्रुटियों को खोजने के लिए, नहीं किया जाता क्योंकि fma
की त्रुटि खोजने गुणन की त्रुटि खोजने के रूप में एक धीमी गति से fma
बिना किया गया है।
खोज करने के लिए प्रासंगिक कीवर्ड "मुआवजा हॉर्नर योजना" और "मुआवजा डॉट उत्पाद" होगा, हॉर्नर योजना के साथ बहुत अधिक लाभ होगा।
प्रश्न, राउंडिंग के प्रभाव के बारे में है नहीं इस बारे में। आपका उत्तर भी गलत है क्योंकि एफएमए को मानक 2 इनपुट के बजाय 3 इनपुट फ़्लोटिंग पॉइंट यूनिट की आवश्यकता होती है, फ्लोटिंग पॉइंट रजिस्टर फ़ाइल में अतिरिक्त पोर्ट, और व्यापक फ़्लोटिंग पॉइंट एडर्स यह मुफ़्त नहीं है, यह कुछ की लागत पर एफएमए समर्थन का व्यापार-बंद है अन्य हार्डवेयर – taw
टाव: आपने पूछा कि एफएमए से क्या एल्गोरिदम लाभान्वित हैं और कुछ उदाहरणों के लिए जहां गोलाकार एक गैर-तुच्छ लाभ है। मैंने पहले भाग का जवाब दिया, जो कि अधिकांश एल्गोरिदम लाभान्वित होंगे। – Gabe