मल्टिप्लाई–एक्यूम्युलेट ऑपरेशन: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Operation common in numerical signal processing}} कम्प्यूटिंग में, विशेष रूप से अंकीय...")
 
(minor changes)
Line 1: Line 1:
{{Short description|Operation common in numerical signal processing}}
{{Short description|Operation common in numerical signal processing}}
[[ कम्प्यूटिंग ]] में, विशेष रूप से [[ अंकीय संकेत प्रक्रिया ]] में, गुणा-संचय (मैक) या गुणा-जोड़ (एमएडी) ऑपरेशन एक सामान्य कदम है जो दो संख्याओं के उत्पाद की गणना करता है और उस उत्पाद को एक [[संचायक (कंप्यूटिंग)]] में जोड़ता है। ऑपरेशन करने वाली हार्डवेयर इकाई को गुणक-संचायक (मैक इकाई) के रूप में जाना जाता है; ऑपरेशन को अक्सर MAC या MAD ऑपरेशन भी कहा जाता है। मैक ऑपरेशन एक संचायक ''ए'' को संशोधित करता है:
[[ कम्प्यूटिंग |कम्प्यूटिंग]] में, खासकर [[ अंकीय संकेत प्रक्रिया |डिजिटल सिग्नल प्रोसेसिंग]] में, मल्टिप्लाई-एक्यूम्युलेट (MAC) या मल्टिप्लाई-एड (MAD) ऑपरेशन एक सामान्य कदम है जो दो नंबरों का गुणन-योग (प्रोडक्ट) करता है और उस प्रोडक्ट को एक [[संचायक (कंप्यूटिंग)|एक्यूम्युलेटर]] में जोड़ता है। ऑपरेशन को करने वाली हार्डवेयर यूनिट को मल्टीप्लाई-एक्यूम्युलेटर (MAC यूनिट) के रूप में जाना जाता है; स्वयं ऑपरेशन को अक्सर एक MAC या MAD ऑपरेशन भी कहा जाता है। MAC ऑपरेशन एक एक्यूम्युलेटर एक a को संशोधित करता है:


:<math>\ a \leftarrow a + ( b \times c )</math>
:<math>\ a \leftarrow a + ( b \times c )</math>
जब [[तैरनेवाला स्थल]] नंबरों के साथ किया जाता है, तो इसे दो [[ गोलाई ]] (कई [[डिजिटल सिग्नल प्रोसेसर]] में विशिष्ट), या एक राउंडिंग के साथ किया जा सकता है। जब एकल राउंडिंग के साथ प्रदर्शन किया जाता है, तो इसे फ़्यूज़्ड मल्टीप्ली-ऐड (FMA) या फ़्यूज़्ड मल्टीप्ली-एक्युमुलेट (FMAC) कहा जाता है।
[[तैरनेवाला स्थल|फ्लोटिंग पॉइंट]] नंबरों के साथ काम करने पर, इसे दो [[ गोलाई |गोलाईयों]] (बहुत से [[डिजिटल सिग्नल प्रोसेसर|DSP]] में सामान्य) के साथ किया जा सकता है, या एक गोलाईयों के साथ किया जा सकता है। एकल गोलाईयों के साथ किया जाने पर, इसे फ्यूज्ड मल्टिप्लाई-एड (FMA) या फ्यूज्ड मल्टिप्लाई-एक्यूम्युलेट (FMAC) कहा जाता है।
 
आधुनिक कंप्यूटरों में एक समर्पित मैक हो सकता है, जिसमें [[संयोजन तर्क]] में कार्यान्वित गुणक, उसके बाद एक [[योजक (इलेक्ट्रॉनिक्स)]] और एक संचायक रजिस्टर शामिल होता है जो परिणाम को संग्रहीत करता है। रजिस्टर का आउटपुट योजक के एक इनपुट पर वापस फीड किया जाता है, ताकि प्रत्येक घड़ी चक्र पर, गुणक का आउटपुट रजिस्टर में जोड़ा जा सके। संयोजन गुणक को बड़ी मात्रा में तर्क की आवश्यकता होती है, लेकिन यह पहले के कंप्यूटरों के विशिष्ट [[किसान गुणन]] की तुलना में किसी उत्पाद की अधिक तेज़ी से गणना कर सकता है। [[पर्सी लुडगेट]] 1909 की अपनी विश्लेषणात्मक मशीन में MAC की कल्पना करने वाले पहले व्यक्ति थे,<ref>{{cite web |url=http://www.fano.co.uk/ludgate/ |title=लुडगेट की विश्लेषणात्मक मशीन की व्यवहार्यता|url-status=live |archive-url=https://web.archive.org/web/20190807233229/http://www.fano.co.uk/ludgate/ |archive-date=2019-08-07 |access-date=2020-08-30}}</ref> और विभाजन के लिए MAC का उपयोग करने वाले पहले (अभिसरण श्रृंखला के माध्यम से पारस्परिक आधार पर गुणन का उपयोग करके) {{math|(1+''x'')<sup>−1</sup>}}). मैक इकाइयों से लैस होने वाले पहले आधुनिक प्रोसेसर [[डिजिटल सिग्नल प्रोसेसर]] थे, लेकिन यह तकनीक अब सामान्य प्रयोजन प्रोसेसर में भी आम है।<ref>{{Cite journal|last1=Lyakhov|first1=Pavel|last2=Valueva|first2=Maria|last3=Valuev|first3=Georgii|last4=Nagornov|first4=Nikolai|date=January 2020|title=काटे गए बहु-संचित इकाइयों के आधार पर डिजिटल फ़िल्टर प्रदर्शन को बढ़ाने की एक विधि|journal=Applied Sciences|language=en|volume=10|issue=24|pages=9052|doi=10.3390/app10249052|doi-access=free}}</ref><ref>{{Cite book|last1=Tung Thanh Hoang|last2=Sjalander|first2=M.|last3=Larsson-Edefors|first3=P.|title=2009 IEEE International Symposium on Parallel & Distributed Processing |chapter=Double Throughput Multiply-Accumulate unit for FlexCore processor enhancements |date=May 2009|chapter-url=https://ieeexplore.ieee.org/document/5161212|pages=1–7|doi=10.1109/IPDPS.2009.5161212|isbn=978-1-4244-3751-1|s2cid=14535090}}</ref><ref>{{Cite journal|date=2020-03-01|title=PV-MAC: Multiply-and-accumulate unit structure exploiting precision variability in on-device convolutional neural networks|url=https://www.sciencedirect.com/science/article/abs/pii/S0167926019302809|journal=Integration|language=en|volume=71|pages=76–85|doi=10.1016/j.vlsi.2019.11.003|issn=0167-9260|last1=Kang|first1=Jongsung|last2=Kim|first2=Taewhan|s2cid=211264132 }}</ref><ref>{{cite web |url=https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/mad---ps|title=पागल - पी.एस|access-date=2021-08-14}}</ref>
 
 
==[[फ़्लोटिंग-पॉइंट अंकगणित]] में==
जब [[पूर्णांक]]ों के साथ किया जाता है, तो ऑपरेशन आम तौर पर सटीक होता है ([[दो की शक्ति]] की गणना [[मॉड्यूलर अंकगणित]])। हालाँकि, फ़्लोटिंग-पॉइंट अंकगणित|फ़्लोटिंग-पॉइंट संख्याओं में केवल एक निश्चित मात्रा में गणितीय अंकगणितीय सटीकता होती है। अर्थात्, डिजिटल फ़्लोटिंग-पॉइंट अंकगणित आम तौर पर साहचर्यता या वितरणात्मकता नहीं है। (देखना {{slink|Floating point#Accuracy problems}}.)
इसलिए, इससे परिणाम पर फर्क पड़ता है कि क्या गुणा-जोड़ दो राउंडिंग के साथ किया जाता है, या एक ऑपरेशन में एकल राउंडिंग (एक फ़्यूज्ड मल्टीप्ली-ऐड) के साथ किया जाता है। [[आईईईई 754-2008]] निर्दिष्ट करता है कि इसे एक राउंडिंग के साथ निष्पादित किया जाना चाहिए, जिससे अधिक सटीक परिणाम प्राप्त होंगे।<ref>{{cite web |url=https://developer.nvidia.com/sites/default/files/akamai/cuda/files/NVIDIA-CUDA-Floating-Point.pdf |title=Precision & Performance: Floating Point and IEEE 754 Compliance for NVIDIA GPUs |publisher=nvidia |first1=Nathan |last1=Whitehead |first2=Alex |last2=Fit-Florea |year=2011 |access-date=2013-08-31}}</ref>
 


आधुनिक कंप्यूटर में एक विशेषित MAC (मल्टिप्लाई-एक्यूम्युलेटर) हो सकता है, जिसमें एक [[संयोजन तर्क|कम्बिनेशनल लॉजिक]] में लागू मल्टिप्लायर, एक [[योजक (इलेक्ट्रॉनिक्स)|एडर]] और रिजिस्टर होता है जो परिणाम को संग्रहीत करता है। रिजिस्टर का आउटपुट एडर के एक इनपुट में पुनर्वितरण किया जाता है, इस प्रकार प्रत्येक घड़ी के साइकिल पर, मल्टिप्लायर का आउटपुट रजिस्टर में जोड़ा जाता है। कम्बिनेशनल मल्टिप्लायर बड़े मात्रा में लॉजिक की आवश्यकता होती है, लेकिन पहले के कंप्यूटरों के उनके [[किसान गुणन|शिफ्टिंग और जोड़ने के तरीके]] की तुलना में वे उत्पाद को बहुत तेजी से निर्धारित कर सकते हैं। 1909 में [[पर्सी लुडगेट|पर्सी लज्गेट]] ने अपनी एनालिटिकल मशीन में पहले MAC की विचारधारा को अभिज्ञात किया था,<ref>{{cite web |url=http://www.fano.co.uk/ludgate/ |title=लुडगेट की विश्लेषणात्मक मशीन की व्यवहार्यता|url-status=live |archive-url=https://web.archive.org/web/20190807233229/http://www.fano.co.uk/ludgate/ |archive-date=2019-08-07 |access-date=2020-08-30}}</ref> और विभाजन के लिए पहले MAC का उपयोग किया (जो रूपांतरित श्रृंगांतक्रम {{math|(1+''x'')<sup>−1</sup>}} के माध्यम से प्रारंभिक गुणना उपयुक्त करती थी)। पहले आधुनिक प्रोसेसर जो MAC यूनिट के साथ संपन्न हुए थे, वे [[डिजिटल सिग्नल प्रोसेसर]] थे, लेकिन यह तकनीक अब सामान्य उद्देश्य प्रोसेसरों में भी आम हो गई है।<ref>{{Cite journal|last1=Lyakhov|first1=Pavel|last2=Valueva|first2=Maria|last3=Valuev|first3=Georgii|last4=Nagornov|first4=Nikolai|date=January 2020|title=काटे गए बहु-संचित इकाइयों के आधार पर डिजिटल फ़िल्टर प्रदर्शन को बढ़ाने की एक विधि|journal=Applied Sciences|language=en|volume=10|issue=24|pages=9052|doi=10.3390/app10249052|doi-access=free}}</ref><ref>{{Cite book|last1=Tung Thanh Hoang|last2=Sjalander|first2=M.|last3=Larsson-Edefors|first3=P.|title=2009 IEEE International Symposium on Parallel & Distributed Processing |chapter=Double Throughput Multiply-Accumulate unit for FlexCore processor enhancements |date=May 2009|chapter-url=https://ieeexplore.ieee.org/document/5161212|pages=1–7|doi=10.1109/IPDPS.2009.5161212|isbn=978-1-4244-3751-1|s2cid=14535090}}</ref><ref>{{Cite journal|date=2020-03-01|title=PV-MAC: Multiply-and-accumulate unit structure exploiting precision variability in on-device convolutional neural networks|url=https://www.sciencedirect.com/science/article/abs/pii/S0167926019302809|journal=Integration|language=en|volume=71|pages=76–85|doi=10.1016/j.vlsi.2019.11.003|issn=0167-9260|last1=Kang|first1=Jongsung|last2=Kim|first2=Taewhan|s2cid=211264132 }}</ref><ref>{{cite web |url=https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/mad---ps|title=पागल - पी.एस|access-date=2021-08-14}}</ref>
==फ़्लोटिंग-पॉइंट अंकगणित में==
जब [[पूर्णांक|इंटीजर्स]] के साथ किया जाता है, तो यह ऑपरेशन सामान्य रूप से बिल्कुल सही होता है (किसी [[दो की शक्ति|दो के घात]] के साथ की गणना [[मॉड्यूलर अंकगणित|मॉड्यूलो]])। हालांकि, [[फ़्लोटिंग-पॉइंट अंकगणित|फ़्लोटिंग-पॉइंट]] नंबर्स के पास केवल निश्चित मात्रा में गणितीय सटीकता होती है। अर्थात्, डिजिटल फ्लोटिंग-पॉइंट अंकगणित आम तौर पर गठनशील नहीं होता है और ना ही समानुपाती या वितरक। ({{slink|फ्लोटिंग पॉइंट§सटीकता समस्याएँ}} देखें)। इसलिए, यह फर्क पड़ता है कि परिणाम में क्या अंतर होता है कि क्या दो गोलाईयों के साथ मल्टिप्लाई-एड किया जाता है, या एक ऑपरेशन में एकल गोलाईयों के साथ (फ्यूज्ड मल्टिप्लाई-एड)। [[आईईईई 754-2008]] ने निर्धारित किया है कि इसे एक गोलाईयों के साथ किया जाना चाहिए, जिससे अधिक सटीक परिणाम प्राप्त होता है।<ref>{{cite web |url=https://developer.nvidia.com/sites/default/files/akamai/cuda/files/NVIDIA-CUDA-Floating-Point.pdf |title=Precision & Performance: Floating Point and IEEE 754 Compliance for NVIDIA GPUs |publisher=nvidia |first1=Nathan |last1=Whitehead |first2=Alex |last2=Fit-Florea |year=2011 |access-date=2013-08-31}}</ref>
==फ़्यूज्ड गुणा-जोड़ें==
==फ़्यूज्ड गुणा-जोड़ें==
एक फ़्यूज्ड मल्टीप्ली-ऐड (FMA या fmadd)<ref>{{cite web|title=fmadd instrs|website=[[IBM]] |url=https://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.alangref/idalangref_fmadd_instrs.htm}}</ref>
फ्यूज्ड मल्टिप्लाई-एड (FMA या fmadd)<ref>{{cite web|title=fmadd instrs|website=[[IBM]] |url=https://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.alangref/idalangref_fmadd_instrs.htm}}</ref> एक फ्लोटिंग-पॉइंट मल्टिप्लाई-एड ऑपरेशन है जो एक ही कदम में किया जाता है और एकल गोलाईयों के साथ होता है। अर्थात्, जहां एक अफ्यूज्ड मल्टिप्लाई-एड गणना {{math|''b'' × ''c''}} का उत्पाद करेगा, उसे N महत्वपूर्ण बिटों में गोलाईयों के साथ देखेगा, फिर इसे a के साथ जोड़ेगा और फिर आखिरी परिणाम को फिर से N महत्वपूर्ण बिटों में गोलाईयों के साथ देखेगा, वहीं एक फ्यूज्ड मल्टिप्लाई-एड भागफलस्वरूप व्यक्ति ने पूरे प्रकार से अभिव्यक्ति {{math|''a'' + (''b'' × ''c'')}} की गणना करेगा और अंतिम परिणाम को N महत्वपूर्ण बिटों में गोलाईयों के साथ देखेगा।
एक फ़्लोटिंग-पॉइंट मल्टीप्ली-ऐड ऑपरेशन है जो एक ही राउंडिंग के साथ एक चरण में किया जाता है। यानी, जहां एक अप्रयुक्त गुणा-जोड़ उत्पाद की गणना करेगा {{math|''b'' × ''c''}}, इसे एन महत्वपूर्ण बिट्स तक गोल करें, परिणाम को में जोड़ें, और एन महत्वपूर्ण बिट्स पर वापस राउंड करें, एक फ़्यूज्ड मल्टीप्ल-ऐड संपूर्ण अभिव्यक्ति की गणना करेगा {{math|''a'' + (''b'' × ''c'')}}अंतिम परिणाम को एन महत्वपूर्ण बिट्स तक पूर्णांकित करने से पहले इसकी पूर्ण सटीकता तक।


एक तेज़ एफएमए उत्पादों के संचय से जुड़ी कई संगणनाओं की गति को बढ़ा सकता है और उनकी सटीकता में सुधार कर सकता है:
एक तेज़ एफएमए उत्पादों के संचय को शामिल करने वाली कई संगणनाओं की सटीकता को तेज़ और बेहतर कर सकता है:


* [[डॉट उत्पाद]]
* [[डॉट उत्पाद|अदिश गुणनफल]]
* [[मैट्रिक्स गुणन]]
* [[मैट्रिक्स गुणन]]
* [[बहुपद मूल्यांकन]] (उदाहरण के लिए, हॉर्नर के नियम के साथ)
* [[बहुपद मूल्यांकन]] (उदाहरण के लिए, हॉर्नर के नियम के साथ)
* कार्यों के मूल्यांकन के लिए न्यूटन की विधि (उल्टे फ़ंक्शन से)
* कार्यों के मूल्यांकन के लिए न्यूटन की विधि (व्युत्क्रम फलन से)
*संकल्प और कृत्रिम तंत्रिका नेटवर्क
*कनवल्शन और कृत्रिम तंत्रिका नेटवर्क
* चौगुनी-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप में गुणन#डबल-डबल अंकगणित|डबल-डबल अंकगणित
* डबल-डबल अंकगणित में गुणन


अधिक सटीक परिणाम देने के लिए फ़्यूज्ड मल्टीप्ली-ऐड पर आमतौर पर भरोसा किया जा सकता है। हालाँकि, [[विलियम मोर्टों कहाँ]] ने बताया है कि अगर बिना सोचे-समझे इस्तेमाल किया जाए तो यह समस्याएँ दे सकता है।<ref>{{cite web |title=IEEE Standard 754 for Binary Floating-Point Arithmetic |author-first=William |author-last=Kahan |author-link=William Morton Kahan |url=http://www.cs.berkeley.edu/~wkahan/ieee754status/ieee754.ps |date=1996-05-31}}</ref> अगर {{math|''x''<sup>2</sup> − ''y''<sup>2</sup>}} के रूप में मूल्यांकन किया जाता है {{math| ((''x'' × ''x'') − ''y'' × ''y'')}} (कहान के सुझाए गए नोटेशन के बाद जिसमें अनावश्यक कोष्ठक संकलक को गोल करने के लिए निर्देशित करते हैं {{math|(''x'' × ''x'')}} टर्म पहले) फ़्यूज्ड मल्टीप्ली-ऐड का उपयोग करते हुए, तब भी परिणाम नकारात्मक हो सकता है {{math|''x'' {{=}} ''y''}} पहले गुणन के कारण कम महत्व वाले बिट्स को हटा दिया गया। उदाहरण के लिए, यदि परिणाम के वर्गमूल का मूल्यांकन किया जाता है तो इससे त्रुटि हो सकती है।
फ्यूज्ड मल्टिप्लाई-एड आम तौर पर अधिक सटीक परिणाम देने के लिए भरोसे के लायक होता है। हालांकि, [[विलियम मोर्टों कहाँ|विलियम कहान]] ने इसका संकेत किया है कि यदि यह बिना सोचे-समझे उपयोग किया जाए तो इससे समस्याएँ हो सकती हैं।<ref>{{cite web |title=IEEE Standard 754 for Binary Floating-Point Arithmetic |author-first=William |author-last=Kahan |author-link=William Morton Kahan |url=http://www.cs.berkeley.edu/~wkahan/ieee754status/ieee754.ps |date=1996-05-31}}</ref> यदि {{math|''x''<sup>2</sup> − ''y''<sup>2</sup>}} को {{math|((''x'' × ''x'') − ''y'' × ''y'')}} (जिसमें कहान द्वारा सुझाया गया नोटेशन अनुसरण किया जाता है जिसमें अतिरिक्त ब्रैकेट द्वारा कम्पाइलर को दिशा दी जाती है कि पहले {{math|(''x'' × ''x'')}} शब्द को गोलाईयों में देखा जाए) के रूप में फ्यूज्ड मल्टिप्लाई-एड का उपयोग किया जाए, तो परिणाम नकारात्मक हो सकता है, भले ही {{math|''x'' {{=}} ''y''}} हो। इसका मतलब है कि पहली गुणना निम्न महत्वपूर्णता बिटों को छोड़ देगी। यदि इसके बाद परिणाम का वर्गमूल निकाला जाए तो यह त्रुटि के लिए कारण बन सकता है।


जब एक [[माइक्रोप्रोसेसर]] के अंदर लागू किया जाता है, तो एक एफएमए एक ऐड के बाद मल्टीपल ऑपरेशन से तेज हो सकता है। हालाँकि, मूल IBM RS/6000 डिज़ाइन पर आधारित मानक औद्योगिक कार्यान्वयन के लिए योग की उचित गणना करने के लिए 2N-बिट योजक की आवश्यकता होती है।<ref>{{cite thesis |url=http://repositories.lib.utexas.edu/bitstream/handle/2152/3082/quinnelle60861.pdf |date=May 2007 |title=Floating-Point Fused Multiply–Add Architectures |author-first=Eric |author-last=Quinnell |degree=PhD |access-date=2011-03-28}}</ref>
जब एक [[माइक्रोप्रोसेसर]] के अंदर लागू किया जाता है, तो एफएमए एक ऐड के बाद होने वाले मल्टीपल ऑपरेशन से तेज हो सकता है। हालाँकि, मूल IBM RS/6000 डिज़ाइन पर आधारित मानक औद्योगिक कार्यान्वयन के लिए योग की ठीक से गणना करने के लिए 2N-बिट योजक की आवश्यकता होती है।<ref>{{cite thesis |url=http://repositories.lib.utexas.edu/bitstream/handle/2152/3082/quinnelle60861.pdf |date=May 2007 |title=Floating-Point Fused Multiply–Add Architectures |author-first=Eric |author-last=Quinnell |degree=PhD |access-date=2011-03-28}}</ref>
इस निर्देश को शामिल करने का एक अन्य लाभ यह है कि यह विभाजन (गणित) ([[विभाजन एल्गोरिथ्म]] देखें) और [[वर्गमूल]] (वर्गमूल की गणना के तरीके देखें) संचालन के एक कुशल सॉफ्टवेयर कार्यान्वयन की अनुमति देता है, इस प्रकार उन कार्यों के लिए समर्पित हार्डवेयर की आवश्यकता समाप्त हो जाती है।<ref name="goldschmidt_algo">{{cite conference |citeseerx=10.1.1.85.9648 |title=गोल्डस्मिड्ट के एल्गोरिदम का उपयोग करते हुए सॉफ्टवेयर डिवीजन और स्क्वायर रूट|author-first=Peter |author-last=Markstein |date=November 2004 |conference=6th Conference on Real Numbers and Computers |url=http://www.informatik.uni-trier.de/Reports/TR-08-2004/rnc6_12_markstein.pdf}}</ref>
 
इस निर्देश को शामिल करने का एक अन्य लाभ यह है कि यह विभाजन ([[विभाजन एल्गोरिथ्म]] देखें) और [[वर्गमूल]] (वर्गमूल की गणना के तरीके देखें) संचालन के एक कुशल सॉफ्टवेयर कार्यान्वयन की अनुमति देता है, इस प्रकार उन कार्यों के लिए समर्पित हार्डवेयर की आवश्यकता समाप्त हो जाती है।<ref name="goldschmidt_algo">{{cite conference |citeseerx=10.1.1.85.9648 |title=गोल्डस्मिड्ट के एल्गोरिदम का उपयोग करते हुए सॉफ्टवेयर डिवीजन और स्क्वायर रूट|author-first=Peter |author-last=Markstein |date=November 2004 |conference=6th Conference on Real Numbers and Computers |url=http://www.informatik.uni-trier.de/Reports/TR-08-2004/rnc6_12_markstein.pdf}}</ref>


===डॉट उत्पाद अनुदेश===
===डॉट उत्पाद अनुदेश===
कुछ मशीनें कई फ़्यूज्ड मल्टीपल ऐड ऑपरेशंस को एक ही चरण में जोड़ती हैं, उदाहरण के लिए। दो 128-बिट एकल निर्देश, एकाधिक डेटा रजिस्टरों पर चार-तत्व डॉट-उत्पाद का प्रदर्शन करना <code>a0×b0 + a1×b1 + a2×b2 + a3×b3</code> एकल चक्र थ्रूपुट के साथ।
विभिन्न मशीनों में कुछ मशीनें कई फ्यूज्ड मल्टिप्लाई-एड ऑपरेशनों को एक स्टेप में संयुक्त करती हैं, उदाहरण के लिए एक 128-बिट SIMD रजिस्टर में <code>a0×b0 + a1×b1 + a2×b2 + a3×b3</code> के दो चार-घटक डॉट-प्रोडक्ट का एकल साइकिल द्वारा प्रवाहशीलता से प्रदर्शन करती हैं।


===समर्थन===
===समर्थन===
एफएमए ऑपरेशन आईईईई 754-2008 में शामिल है।
एफएमए ऑपरेशन IEEE 754-2008 में शामिल है।
 
[[डिजिटल उपकरण निगम|डिजिटल इक्विपमेंट कॉर्पोरेशन]] (DEC) [[वैक्स|VAX]] के <code>POLY</code> निर्देश का उपयोग गुणा और जोड़ चरणों के क्रम का उपयोग करके हॉर्नर नियम के साथ बहुपदों का मूल्यांकन करने के लिए किया जाता है। निर्देश विवरण यह निर्दिष्ट नहीं करते हैं कि गुणा और जोड़ एक ही एफएमए चरण का उपयोग करके किया जाता है या नहीं।<ref>{{Cite web |url=http://uranium.vaxpower.org/~isildur/vax/week.html |title=VAX instruction of the week: POLY |url-status=dead |archive-url=https://web.archive.org/web/20200213093219/http://uranium.vaxpower.org/~isildur/vax/week.html |archive-date=2020-02-13}}</ref> यह निर्देश 1977 में अपने मूल 11/780 कार्यान्वयन के बाद से VAX अनुदेश सेट का एक हिस्सा रहा है।


[[डिजिटल उपकरण निगम]] (डीईसी) [[वैक्स]] <code>POLY</code> निर्देश का उपयोग गुणा और जोड़ चरणों के अनुक्रम का उपयोग करके हॉर्नर के नियम के साथ बहुपदों का मूल्यांकन करने के लिए किया जाता है। निर्देश विवरण यह निर्दिष्ट नहीं करते हैं कि गुणा और जोड़ एकल एफएमए चरण का उपयोग करके किया जाता है या नहीं।<ref>{{Cite web |url=http://uranium.vaxpower.org/~isildur/vax/week.html |title=VAX instruction of the week: POLY |url-status=dead |archive-url=https://web.archive.org/web/20200213093219/http://uranium.vaxpower.org/~isildur/vax/week.html |archive-date=2020-02-13}}</ref> यह निर्देश 1977 में अपने मूल 11/780 कार्यान्वयन के बाद से VAX निर्देश सेट का एक हिस्सा रहा है।
C प्रोग्रामिंग भाषा की 1999 की मानक एक FMA (फ्यूज्ड मल्टिप्लाई-एड) ऑपरेशन का समर्थन fma() मानक गणितीय पुस्तकालय फ़ंक्शन के माध्यम से करती है और एक गुणन एवं एक जोड़ के पश्चात आपूर्ति की स्वचालित परिवर्तन (फ्लोटिंग-पॉइंट अभिव्यक्तियों का संकुचन), जो मानक प्रग्माओं ({{code|#pragma STDC FP_CONTRACT}}) के माध्यम से स्पष्ट रूप से सक्षम या अक्षम किया जा सकता है। [[जीएनयू कंपाइलर संग्रह|GCC]] और [[बजना|Clang]] C कंपाइलर ऐसे रूपांतरण को उन प्रोसेसर शास्त्रविद्याओं के लिए डिफ़ॉल्ट रूप से करते हैं जो FMA निर्देशिकाएं समर्थन करती हैं। GCC, जिसमें उक्त प्रग्मा का समर्थन नहीं है, <ref>{{cite web |title=Bug 20785 - Pragma STDC * (C99 FP) unimplemented |url=https://gcc.gnu.org/bugzilla/show_bug.cgi?id=20785 |access-date=2022-02-02 |website=gcc.gnu.org}}</ref> इसे <code>-ffp-contract</code> कमांड लाइन विकल्प से वैश्विक रूप से नियंत्रित किया जा सकता है।<ref>{{Cite web|title=अनुकूलन विकल्प (जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करके)|url=https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html|access-date=2022-02-02|website=gcc.gnu.org}}</ref>


C (प्रोग्रामिंग भाषा) का [[C99]] इसके माध्यम से FMA ऑपरेशन का समर्थन करता है <code>fma()</code> मानक गणित लाइब्रेरी फ़ंक्शन और गुणन का स्वचालित परिवर्तन जिसके बाद एक जोड़ (फ़्लोटिंग-पॉइंट अभिव्यक्तियों का संकुचन) होता है, जिसे मानक प्रागमास के साथ स्पष्ट रूप से सक्षम या अक्षम किया जा सकता है ({{code|#pragma STDC FP_CONTRACT}}). [[जीएनयू कंपाइलर संग्रह]] और [[बजना]] सी कंपाइलर प्रोसेसर आर्किटेक्चर के लिए डिफ़ॉल्ट रूप से ऐसे परिवर्तन करते हैं जो एफएमए निर्देशों का समर्थन करते हैं। जीसीसी के साथ, जो उपर्युक्त व्यावहारिकता का समर्थन नहीं करता है,<ref>{{cite web |title=Bug 20785 - Pragma STDC * (C99 FP) unimplemented |url=https://gcc.gnu.org/bugzilla/show_bug.cgi?id=20785 |access-date=2022-02-02 |website=gcc.gnu.org}}</ref> इसे विश्व स्तर पर नियंत्रित किया जा सकता है <code>-ffp-contract</code> कमांड लाइन विकल्प.<ref>{{Cite web|title=अनुकूलन विकल्प (जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करके)|url=https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html|access-date=2022-02-02|website=gcc.gnu.org}}</ref>
फ्यूज्ड मल्टिप्लाई-एड ऑपरेशन को "मल्टिप्लाई-एड फ्यूज्ड" के रूप में IBM [[POWER1]] (1990) प्रोसेसर में प्रस्तुत किया गया था,<ref>{{cite journal |last1=Montoye |first1=R. K. |last2=Hokenek |first2=E. |last3=Runyon |first3=S. L. |title=Design of the IBM RISC System/6000 floating-point execution unit |journal=IBM Journal of Research and Development |date=January 1990 |volume=34 |issue=1 |pages=59–70 |doi=10.1147/rd.341.0059}}{{closed access}}</ref> लेकिन तब से यह बहुत से अन्य प्रोसेसरों में जोड़ा गया है:
फ़्यूज्ड मल्टीप्ली-ऐड ऑपरेशन को IBM [[POWER1]] (1990) प्रोसेसर में मल्टीप्ली-ऐड फ़्यूज़ के रूप में पेश किया गया था,<ref>{{cite journal |last1=Montoye |first1=R. K. |last2=Hokenek |first2=E. |last3=Runyon |first3=S. L. |title=Design of the IBM RISC System/6000 floating-point execution unit |journal=IBM Journal of Research and Development |date=January 1990 |volume=34 |issue=1 |pages=59–70 |doi=10.1147/rd.341.0059}}{{closed access}}</ref> लेकिन तब से इसे कई अन्य प्रोसेसरों में जोड़ा गया है:


* [[ हेवलेट पैकर्ड ]] [[पीए-8000]] (1996) और ऊपर
* [[ हेवलेट पैकर्ड | एचपी]] [[पीए-8000]] (1996) और ऊपर
* हिताची, लिमिटेड सुपरएच#एसएच-4|सुपरएच एसएच-4 (1998)
* हिटाची सुपरएच एसएच-4 (1998)
* [[सोनी कंप्यूटर एंटरटेनमेंट]]-[[ तोशीबा ]] [[भावना इंजन]] (1999)
*[[सोनी कंप्यूटर एंटरटेनमेंट|एससीई]]-[[ तोशीबा |तोशीबा]] [[भावना इंजन|इमोशन इंजन]] (1999)
* इंटेल [[इटेनियम]] (2001)
* इंटेल [[इटेनियम]] (2001)
* एसटीआई [[सेल (माइक्रोप्रोसेसर)]] (2006)
*एसटीआई [[सेल (माइक्रोप्रोसेसर)|सेल]] (2006)
* [[ द्रोह ]] [[SPARC64 VI]] (2007) और ऊपर
*[[ द्रोह |फुजित्सु]] [[SPARC64 VI]] (2007) और ऊपर
* ([[एमआईपीएस वास्तुकला]]) [[लूंगसन]]-2एफ (2008)<ref>{{cite web |url=http://www.mdronline.com/mpr/h/2008/1103/224401.html |title=Godson-3 Emulates x86: New MIPS-Compatible Chinese Processor Has Extensions for x86 Translation}}</ref>
*([[एमआईपीएस वास्तुकला|एमआईपीएस-संगत]]) [[लूंगसन]]-2एफ (2008)<ref>{{cite web |url=http://www.mdronline.com/mpr/h/2008/1103/224401.html |title=Godson-3 Emulates x86: New MIPS-Compatible Chinese Processor Has Extensions for x86 Translation}}</ref>
* [[एल्ब्रस-8एस]]|एल्ब्रस-8एसवी (2018)
* [[एल्ब्रस-8एस|एल्ब्रस-8एसवी]] (2018)
* एफएमए निर्देश सेट के साथ x86 प्रोसेसर|एफएमए3 और/या एफएमए4 निर्देश सेट
*FMA3 और/या FMA4 निर्देश सेट के साथ x86 प्रोसेसर
** एएमडी [[बुलडोजर (प्रोसेसर)]] (2011, एफएमए4 केवल)
** एएमडी [[बुलडोजर (प्रोसेसर)|बुलडोजर]] (2011, एफएमए4 केवल)
** एएमडी [[पाइलड्राइवर (माइक्रोआर्किटेक्चर)]] (2012, एफएमए3 और एफएमए4)<ref>{{cite web |last1=Hollingsworth |first1=Brent |title=नए "बुलडोजर" और "पाइलड्राइवर" निर्देश|url=https://developer.amd.com/resources/developer-guides-manuals/new-bulldozer-and-piledriver-instructions/ |publisher=AMD Developer Central |date=October 2012}}</ref>
**एएमडी [[पाइलड्राइवर (माइक्रोआर्किटेक्चर)|पाइलड्राइवर]] (2012, एफएमए3 और एफएमए4)<ref>{{cite web |last1=Hollingsworth |first1=Brent |title=नए "बुलडोजर" और "पाइलड्राइवर" निर्देश|url=https://developer.amd.com/resources/developer-guides-manuals/new-bulldozer-and-piledriver-instructions/ |publisher=AMD Developer Central |date=October 2012}}</ref>
** एएमडी [[स्टीमरोलर (माइक्रोआर्किटेक्चर)]] (2014)
** एएमडी [[स्टीमरोलर (माइक्रोआर्किटेक्चर)|स्टीमरोलर]] (2014)
** एएमडी [[ खुदाई यंत्र (माइक्रोआर्किटेक्चर) ]] (2015)
**एएमडी [[ खुदाई यंत्र (माइक्रोआर्किटेक्चर) |उत्खननकर्ता]] (2015)
** एएमडी [[ज़ेन (माइक्रोआर्किटेक्चर)]] (2017, केवल एफएमए3)
** एएमडी [[ज़ेन (माइक्रोआर्किटेक्चर)|ज़ेन]] (2017, FMA3 केवल)
** [[इंटेल हैसवेल]] (2013, एफएमए3 केवल)<ref>{{cite web |url=http://www.reghardware.co.uk/2008/08/19/idf_intel_architecture_roadmap/ |title=Intel adds 22nm octo-core 'Haswell' to CPU design roadmap |work=The Register |access-date=2008-08-19 |archive-url=https://web.archive.org/web/20120217051330/http://www.reghardware.com/2008/08/19/idf_intel_architecture_roadmap/ |archive-date=2012-02-17 |url-status=dead }}</ref>
** [[इंटेल हैसवेल]] (2013, एफएमए3 केवल)<ref>{{cite web |url=http://www.reghardware.co.uk/2008/08/19/idf_intel_architecture_roadmap/ |title=Intel adds 22nm octo-core 'Haswell' to CPU design roadmap |work=The Register |access-date=2008-08-19 |archive-url=https://web.archive.org/web/20120217051330/http://www.reghardware.com/2008/08/19/idf_intel_architecture_roadmap/ |archive-date=2012-02-17 |url-status=dead }}</ref>
** इंटेल [[स्काईलेक (माइक्रोआर्किटेक्चर)]] (2015, एफएमए3 केवल)
** इंटेल [[स्काईलेक (माइक्रोआर्किटेक्चर)|स्काईलेक]] (2015, एफएमए3 केवल)
* VFPv4 और/या NEONv2 के साथ ARM प्रोसेसर:
* VFPv4 और/या NEONv2 के साथ ARM प्रोसेसर:
** [[एआरएम कॉर्टेक्स-एम4एफ]] (2010)
** [[एआरएम कॉर्टेक्स-एम4एफ]] (2010)
** [[एआरएम कॉर्टेक्स-ए5]] (2012)
** [[एआरएम कॉर्टेक्स-ए5]] (2012)
** [[एआरएम कॉर्टेक्स-ए7 एमपीकोर]]|एआरएम कॉर्टेक्स-ए7 (2013)
** [[एआरएम कॉर्टेक्स-ए7 एमपीकोर|एआरएम कॉर्टेक्स-ए7]](2013)
** [[एआरएम कॉर्टेक्स-ए15 एमपीकोर]]|एआरएम कॉर्टेक्स-ए15 (2012)
** [[एआरएम कॉर्टेक्स-ए15 एमपीकोर|एआरएम कॉर्टेक्स-ए15]](2012)
** [[क्रेट (सीपीयू)]] (2012)
** [[क्रेट (सीपीयू)]] (2012)
**एप्पल A6 (2012)
**एप्पल A6 (2012)
** सभी ARM आर्किटेक्चर#Armv8-A प्रोसेसर
** सभी ARMv8 प्रोसेसर
*** फुजित्सु A64FX में प्रीफ़िक्स इंस्ट्रक्शन के साथ चार-ऑपरेंड FMA है।
*** फुजित्सु A64FX में "प्रीफिक्स इंस्ट्रक्शन के साथ चार-ऑपरेंड एफएमए" है।
* [[आईबीएम]] जेड/आर्किटेक्चर (1998 से)
* [[आईबीएम]] जेड/आर्किटेक्चर (1998 से)
* जीपीयू और जीपीजीपीयू बोर्ड:
* जीपीयू और जीपीजीपीयू बोर्ड:
** [[एएमडी ग्राफिक्स प्रोसेसिंग इकाइयों की सूची]] (2009) और नई
** [[एएमडी ग्राफिक्स प्रोसेसिंग इकाइयों की सूची|एएमडी जीपीयू]] (2009) और नए
*** टेरास्केल (माइक्रोआर्किटेक्चर)#टेरास्केल 2|टेरास्केल 2 सदाबहार -श्रृंखला आधारित
*** टेरास्केल 2 "एवरग्रीन"-श्रृंखला आधारित
*** [[ग्राफ़िक्स कोर अगला]]
*** [[ग्राफ़िक्स कोर अगला|ग्राफ़िक्स कोर नेक्स्ट]]-आधारित
** [[एनवीडिया ग्राफिक्स प्रोसेसिंग इकाइयों की सूची]] (2010) और नई
** [[एनवीडिया ग्राफिक्स प्रोसेसिंग इकाइयों की सूची|एनवीडिया जीपीयू]](2010) और नए
*** [[फर्मी (माइक्रोआर्किटेक्चर)]]-आधारित (2010)
*** [[फर्मी (माइक्रोआर्किटेक्चर)|फर्मी]]-आधारित (2010)
*** [[केप्लर (माइक्रोआर्किटेक्चर)]]-आधारित (2012)
*** [[केप्लर (माइक्रोआर्किटेक्चर)|केप्लर]]-आधारित (2012)
*** [[मैक्सवेल (माइक्रोआर्किटेक्चर)]]-आधारित (2014)
*** [[मैक्सवेल (माइक्रोआर्किटेक्चर)|मैक्सवेल]]-आधारित (2014)
*** [[पास्कल (माइक्रोआर्किटेक्चर)]]-आधारित (2016)
*** [[पास्कल (माइक्रोआर्किटेक्चर)|पास्कल]]-आधारित (2016)
*** [[वोल्टा (माइक्रोआर्किटेक्चर)]]-आधारित (2017)
*** [[वोल्टा (माइक्रोआर्किटेक्चर)|वोल्टा]]-आधारित (2017)
** Intel HD और Iris ग्राफ़िक्स#सैंडी ब्रिज के बाद से Intel GPU
** सैंडी ब्रिज के बाद से इंटेल जीपीयू
** [[इंटेल एमआईसी]] (2012)
** [[इंटेल एमआईसी]] (2012)
** [[माली (जीपीयू)]] (2012) और ऊपर
** एआरएम [[माली (जीपीयू)|माली]] टी600 सीरीज (2012) और उससे ऊपर
* वेक्टर प्रोसेसर:
* वेक्टर प्रोसेसर:
** [[रूट सी एसएक्स - अरोरा त्सुबासा]]
** [[रूट सी एसएक्स - अरोरा त्सुबासा|एनईसी एसएक्स-अरोड़ा त्सुबासा]]
* [[ RISC-वी ]]ी अनुदेश सेट (2010)
* [[ RISC-वी |आरआईएससी-वी]] निर्देश सेट (2010)


==संदर्भ==
==संदर्भ==

Revision as of 22:26, 30 July 2023

कम्प्यूटिंग में, खासकर डिजिटल सिग्नल प्रोसेसिंग में, मल्टिप्लाई-एक्यूम्युलेट (MAC) या मल्टिप्लाई-एड (MAD) ऑपरेशन एक सामान्य कदम है जो दो नंबरों का गुणन-योग (प्रोडक्ट) करता है और उस प्रोडक्ट को एक एक्यूम्युलेटर में जोड़ता है। ऑपरेशन को करने वाली हार्डवेयर यूनिट को मल्टीप्लाई-एक्यूम्युलेटर (MAC यूनिट) के रूप में जाना जाता है; स्वयं ऑपरेशन को अक्सर एक MAC या MAD ऑपरेशन भी कहा जाता है। MAC ऑपरेशन एक एक्यूम्युलेटर एक a को संशोधित करता है:

फ्लोटिंग पॉइंट नंबरों के साथ काम करने पर, इसे दो गोलाईयों (बहुत से DSP में सामान्य) के साथ किया जा सकता है, या एक गोलाईयों के साथ किया जा सकता है। एकल गोलाईयों के साथ किया जाने पर, इसे फ्यूज्ड मल्टिप्लाई-एड (FMA) या फ्यूज्ड मल्टिप्लाई-एक्यूम्युलेट (FMAC) कहा जाता है।

आधुनिक कंप्यूटर में एक विशेषित MAC (मल्टिप्लाई-एक्यूम्युलेटर) हो सकता है, जिसमें एक कम्बिनेशनल लॉजिक में लागू मल्टिप्लायर, एक एडर और रिजिस्टर होता है जो परिणाम को संग्रहीत करता है। रिजिस्टर का आउटपुट एडर के एक इनपुट में पुनर्वितरण किया जाता है, इस प्रकार प्रत्येक घड़ी के साइकिल पर, मल्टिप्लायर का आउटपुट रजिस्टर में जोड़ा जाता है। कम्बिनेशनल मल्टिप्लायर बड़े मात्रा में लॉजिक की आवश्यकता होती है, लेकिन पहले के कंप्यूटरों के उनके शिफ्टिंग और जोड़ने के तरीके की तुलना में वे उत्पाद को बहुत तेजी से निर्धारित कर सकते हैं। 1909 में पर्सी लज्गेट ने अपनी एनालिटिकल मशीन में पहले MAC की विचारधारा को अभिज्ञात किया था,[1] और विभाजन के लिए पहले MAC का उपयोग किया (जो रूपांतरित श्रृंगांतक्रम (1+x)−1 के माध्यम से प्रारंभिक गुणना उपयुक्त करती थी)। पहले आधुनिक प्रोसेसर जो MAC यूनिट के साथ संपन्न हुए थे, वे डिजिटल सिग्नल प्रोसेसर थे, लेकिन यह तकनीक अब सामान्य उद्देश्य प्रोसेसरों में भी आम हो गई है।[2][3][4][5]

फ़्लोटिंग-पॉइंट अंकगणित में

जब इंटीजर्स के साथ किया जाता है, तो यह ऑपरेशन सामान्य रूप से बिल्कुल सही होता है (किसी दो के घात के साथ की गणना मॉड्यूलो)। हालांकि, फ़्लोटिंग-पॉइंट नंबर्स के पास केवल निश्चित मात्रा में गणितीय सटीकता होती है। अर्थात्, डिजिटल फ्लोटिंग-पॉइंट अंकगणित आम तौर पर गठनशील नहीं होता है और ना ही समानुपाती या वितरक। (फ्लोटिंग पॉइंट§सटीकता समस्याएँ § Notes देखें)। इसलिए, यह फर्क पड़ता है कि परिणाम में क्या अंतर होता है कि क्या दो गोलाईयों के साथ मल्टिप्लाई-एड किया जाता है, या एक ऑपरेशन में एकल गोलाईयों के साथ (फ्यूज्ड मल्टिप्लाई-एड)। आईईईई 754-2008 ने निर्धारित किया है कि इसे एक गोलाईयों के साथ किया जाना चाहिए, जिससे अधिक सटीक परिणाम प्राप्त होता है।[6]

फ़्यूज्ड गुणा-जोड़ें

फ्यूज्ड मल्टिप्लाई-एड (FMA या fmadd)[7] एक फ्लोटिंग-पॉइंट मल्टिप्लाई-एड ऑपरेशन है जो एक ही कदम में किया जाता है और एकल गोलाईयों के साथ होता है। अर्थात्, जहां एक अफ्यूज्ड मल्टिप्लाई-एड गणना b × c का उत्पाद करेगा, उसे N महत्वपूर्ण बिटों में गोलाईयों के साथ देखेगा, फिर इसे a के साथ जोड़ेगा और फिर आखिरी परिणाम को फिर से N महत्वपूर्ण बिटों में गोलाईयों के साथ देखेगा, वहीं एक फ्यूज्ड मल्टिप्लाई-एड भागफलस्वरूप व्यक्ति ने पूरे प्रकार से अभिव्यक्ति a + (b × c) की गणना करेगा और अंतिम परिणाम को N महत्वपूर्ण बिटों में गोलाईयों के साथ देखेगा।

एक तेज़ एफएमए उत्पादों के संचय को शामिल करने वाली कई संगणनाओं की सटीकता को तेज़ और बेहतर कर सकता है:

फ्यूज्ड मल्टिप्लाई-एड आम तौर पर अधिक सटीक परिणाम देने के लिए भरोसे के लायक होता है। हालांकि, विलियम कहान ने इसका संकेत किया है कि यदि यह बिना सोचे-समझे उपयोग किया जाए तो इससे समस्याएँ हो सकती हैं।[8] यदि x2y2 को ((x × x) − y × y) (जिसमें कहान द्वारा सुझाया गया नोटेशन अनुसरण किया जाता है जिसमें अतिरिक्त ब्रैकेट द्वारा कम्पाइलर को दिशा दी जाती है कि पहले (x × x) शब्द को गोलाईयों में देखा जाए) के रूप में फ्यूज्ड मल्टिप्लाई-एड का उपयोग किया जाए, तो परिणाम नकारात्मक हो सकता है, भले ही x = y हो। इसका मतलब है कि पहली गुणना निम्न महत्वपूर्णता बिटों को छोड़ देगी। यदि इसके बाद परिणाम का वर्गमूल निकाला जाए तो यह त्रुटि के लिए कारण बन सकता है।

जब एक माइक्रोप्रोसेसर के अंदर लागू किया जाता है, तो एफएमए एक ऐड के बाद होने वाले मल्टीपल ऑपरेशन से तेज हो सकता है। हालाँकि, मूल IBM RS/6000 डिज़ाइन पर आधारित मानक औद्योगिक कार्यान्वयन के लिए योग की ठीक से गणना करने के लिए 2N-बिट योजक की आवश्यकता होती है।[9]

इस निर्देश को शामिल करने का एक अन्य लाभ यह है कि यह विभाजन (विभाजन एल्गोरिथ्म देखें) और वर्गमूल (वर्गमूल की गणना के तरीके देखें) संचालन के एक कुशल सॉफ्टवेयर कार्यान्वयन की अनुमति देता है, इस प्रकार उन कार्यों के लिए समर्पित हार्डवेयर की आवश्यकता समाप्त हो जाती है।[10]

डॉट उत्पाद अनुदेश

विभिन्न मशीनों में कुछ मशीनें कई फ्यूज्ड मल्टिप्लाई-एड ऑपरेशनों को एक स्टेप में संयुक्त करती हैं, उदाहरण के लिए एक 128-बिट SIMD रजिस्टर में a0×b0 + a1×b1 + a2×b2 + a3×b3 के दो चार-घटक डॉट-प्रोडक्ट का एकल साइकिल द्वारा प्रवाहशीलता से प्रदर्शन करती हैं।

समर्थन

एफएमए ऑपरेशन IEEE 754-2008 में शामिल है।

डिजिटल इक्विपमेंट कॉर्पोरेशन (DEC) VAX के POLY निर्देश का उपयोग गुणा और जोड़ चरणों के क्रम का उपयोग करके हॉर्नर नियम के साथ बहुपदों का मूल्यांकन करने के लिए किया जाता है। निर्देश विवरण यह निर्दिष्ट नहीं करते हैं कि गुणा और जोड़ एक ही एफएमए चरण का उपयोग करके किया जाता है या नहीं।[11] यह निर्देश 1977 में अपने मूल 11/780 कार्यान्वयन के बाद से VAX अनुदेश सेट का एक हिस्सा रहा है।

C प्रोग्रामिंग भाषा की 1999 की मानक एक FMA (फ्यूज्ड मल्टिप्लाई-एड) ऑपरेशन का समर्थन fma() मानक गणितीय पुस्तकालय फ़ंक्शन के माध्यम से करती है और एक गुणन एवं एक जोड़ के पश्चात आपूर्ति की स्वचालित परिवर्तन (फ्लोटिंग-पॉइंट अभिव्यक्तियों का संकुचन), जो मानक प्रग्माओं (#pragma STDC FP_CONTRACT) के माध्यम से स्पष्ट रूप से सक्षम या अक्षम किया जा सकता है। GCC और Clang C कंपाइलर ऐसे रूपांतरण को उन प्रोसेसर शास्त्रविद्याओं के लिए डिफ़ॉल्ट रूप से करते हैं जो FMA निर्देशिकाएं समर्थन करती हैं। GCC, जिसमें उक्त प्रग्मा का समर्थन नहीं है, [12] इसे -ffp-contract कमांड लाइन विकल्प से वैश्विक रूप से नियंत्रित किया जा सकता है।[13]

फ्यूज्ड मल्टिप्लाई-एड ऑपरेशन को "मल्टिप्लाई-एड फ्यूज्ड" के रूप में IBM POWER1 (1990) प्रोसेसर में प्रस्तुत किया गया था,[14] लेकिन तब से यह बहुत से अन्य प्रोसेसरों में जोड़ा गया है:

संदर्भ

  1. "लुडगेट की विश्लेषणात्मक मशीन की व्यवहार्यता". Archived from the original on 2019-08-07. Retrieved 2020-08-30.
  2. Lyakhov, Pavel; Valueva, Maria; Valuev, Georgii; Nagornov, Nikolai (January 2020). "काटे गए बहु-संचित इकाइयों के आधार पर डिजिटल फ़िल्टर प्रदर्शन को बढ़ाने की एक विधि". Applied Sciences (in English). 10 (24): 9052. doi:10.3390/app10249052.
  3. Tung Thanh Hoang; Sjalander, M.; Larsson-Edefors, P. (May 2009). "Double Throughput Multiply-Accumulate unit for FlexCore processor enhancements". 2009 IEEE International Symposium on Parallel & Distributed Processing. pp. 1–7. doi:10.1109/IPDPS.2009.5161212. ISBN 978-1-4244-3751-1. S2CID 14535090.
  4. Kang, Jongsung; Kim, Taewhan (2020-03-01). "PV-MAC: Multiply-and-accumulate unit structure exploiting precision variability in on-device convolutional neural networks". Integration (in English). 71: 76–85. doi:10.1016/j.vlsi.2019.11.003. ISSN 0167-9260. S2CID 211264132.
  5. "पागल - पी.एस". Retrieved 2021-08-14.
  6. Whitehead, Nathan; Fit-Florea, Alex (2011). "Precision & Performance: Floating Point and IEEE 754 Compliance for NVIDIA GPUs" (PDF). nvidia. Retrieved 2013-08-31.
  7. "fmadd instrs". IBM.
  8. Kahan, William (1996-05-31). "IEEE Standard 754 for Binary Floating-Point Arithmetic".
  9. Quinnell, Eric (May 2007). Floating-Point Fused Multiply–Add Architectures (PDF) (PhD thesis). Retrieved 2011-03-28.
  10. Markstein, Peter (November 2004). गोल्डस्मिड्ट के एल्गोरिदम का उपयोग करते हुए सॉफ्टवेयर डिवीजन और स्क्वायर रूट (PDF). 6th Conference on Real Numbers and Computers. CiteSeerX 10.1.1.85.9648.
  11. "VAX instruction of the week: POLY". Archived from the original on 2020-02-13.
  12. "Bug 20785 - Pragma STDC * (C99 FP) unimplemented". gcc.gnu.org. Retrieved 2022-02-02.
  13. "अनुकूलन विकल्प (जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करके)". gcc.gnu.org. Retrieved 2022-02-02.
  14. Montoye, R. K.; Hokenek, E.; Runyon, S. L. (January 1990). "Design of the IBM RISC System/6000 floating-point execution unit". IBM Journal of Research and Development. 34 (1): 59–70. doi:10.1147/rd.341.0059.closed access
  15. "Godson-3 Emulates x86: New MIPS-Compatible Chinese Processor Has Extensions for x86 Translation".
  16. Hollingsworth, Brent (October 2012). "नए "बुलडोजर" और "पाइलड्राइवर" निर्देश". AMD Developer Central.
  17. "Intel adds 22nm octo-core 'Haswell' to CPU design roadmap". The Register. Archived from the original on 2012-02-17. Retrieved 2008-08-19.