असामान्य संख्या: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
[[File:Denormalized_numbers_on_a_line.svg|thumb|400px|right|एक असंवर्धित फ़्लोटिंग-पॉइंट सिस्टम में केवल सामान्यीकृत संख्याएँ होंगी (लाल रंग में संकेतित)। असामान्य संख्या (नीला) की अनुमति देने से सिस्टम की सीमा बढ़ जाती है।]][[कंप्यूटर विज्ञान]] में, उप-सामान्य संख्या असामान्य संख्याओं (कभी-कभी denormals कहा जाता है) का सबसेट है जो फ्लोटिंग-पॉइंट अंकगणितीय में शून्य के आसपास [[अंकगणितीय अंतर्प्रवाह]] अंतर को भरती है। सबसे छोटी [[सामान्य संख्या (कंप्यूटिंग)|सामान्य संख्या]] से छोटे परिमाण वाली कोई भी गैर-शून्य संख्या असामान्य है। '''सबसे छोटी [[सामान्य संख्या (कंप्यूटिंग)]] से कम परिमाण वाली कोई भी गैर-शून्य संख्या ''असामान्य'' है।'''
[[File:Denormalized_numbers_on_a_line.svg|thumb|400px|right|एक असंवर्धित फ़्लोटिंग-पॉइंट सिस्टम में केवल सामान्यीकृत संख्याएँ होंगी (लाल रंग में संकेतित)। असामान्य संख्या (नीला) की अनुमति देने से सिस्टम की सीमा बढ़ जाती है।]][[कंप्यूटर विज्ञान]] में, उप-सामान्य संख्या असामान्य संख्याओं (कभी-कभी denormals कहा जाता है) का सबसेट है जो फ्लोटिंग-पॉइंट अंकगणितीय में शून्य के आसपास [[अंकगणितीय अंतर्प्रवाह]] अंतर को भरती है। सबसे छोटी [[सामान्य संख्या (कंप्यूटिंग)|सामान्य संख्या]] से छोटे परिमाण वाली कोई भी गैर-शून्य संख्या असामान्य है।


:: ''उपयोग नोट: कुछ पुराने दस्तावेज़ों में (विशेष रूप से [[IEEE 754-1985|आईईईई 754-1985]] और C भाषा के प्रारंभिक रिलीज़ जैसे मानक दस्तावेज़ों में), विशेष रूप से असामान्य संख्याओं को संदर्भित करने के लिए डीनॉर्मल का उपयोग किया जाता है। यह उपयोग विभिन्न मानकों के दस्तावेजों में बना रहता है, विशेष रूप से हार्डवेयर पर चर्चा करते समय जो किसी भी अन्य असामान्य संख्या का प्रतिनिधित्व करने में असमर्थ है, लेकिन यहां चर्चा [[आईईईई 754-2008]] के 2008 के संशोधन के अनुरूप असामान्य शब्द का उपयोग करती है।''
:: ''उपयोग नोट: कुछ पुराने दस्तावेज़ों में (विशेष रूप से [[IEEE 754-1985|आईईईई 754-1985]] और C भाषा के प्रारंभिक रिलीज़ जैसे मानक दस्तावेज़ों में), विशेष रूप से असामान्य संख्याओं को संदर्भित करने के लिए डीनॉर्मल का उपयोग किया जाता है। यह उपयोग विभिन्न मानकों के दस्तावेजों में बना रहता है, विशेष रूप से हार्डवेयर पर चर्चा करते समय जो किसी भी अन्य असामान्य संख्या का प्रतिनिधित्व करने में असमर्थ है, लेकिन यहां चर्चा [[आईईईई 754-2008]] के 2008 के संशोधन के अनुरूप असामान्य शब्द का उपयोग करती है।''


'''सामान्य [[फ़्लोटिंग-पॉइंट अंकगणित]] में,एक''' सामान्य [[फ़्लोटिंग-पॉइंट अंकगणित|फ़्लोटिंग-पॉइंट]] मान में, महत्व (मंटिसा) में कोई अग्रणी शून्य नहीं है; किंतु, घातांक को समायोजित करके अग्रणी शून्य हटा दिए जाते हैं (उदाहरण के लिए, संख्या 0.0123 को 1.23 × 10−2 के रूप में लिखा जाएगा)। इसके विपरीत, एक असामान्य फ़्लोटिंग पॉइंट मान का शून्य के अग्रणी अंक के साथ महत्व होता है। इनमें से, असामान्य संख्याएं उन मूल्यों का प्रतिनिधित्व करती हैं जो सामान्यीकृत होने पर सबसे छोटे प्रतिनिधित्व योग्य प्रतिपादक (सीमित सीमा वाले प्रतिपादक) के नीचे प्रतिपादक होंगे।
सामान्य [[फ़्लोटिंग-पॉइंट अंकगणित|फ़्लोटिंग-पॉइंट]] मान में, महत्व (मंटिसा) में कोई अग्रणी शून्य नहीं है; किंतु, घातांक को समायोजित करके अग्रणी शून्य हटा दिए जाते हैं (उदाहरण के लिए, संख्या 0.0123 को 1.23 × 10−2 के रूप में लिखा जाएगा)। इसके विपरीत, एक असामान्य फ़्लोटिंग पॉइंट मान का शून्य के अग्रणी अंक के साथ महत्व होता है। इनमें से, असामान्य संख्याएं उन मूल्यों का प्रतिनिधित्व करती हैं जो सामान्यीकृत होने पर सबसे छोटे प्रतिनिधित्व योग्य प्रतिपादक (सीमित सीमा वाले प्रतिपादक) के नीचे प्रतिपादक होंगे।


[[आईईईई फ़्लोटिंग-पॉइंट]] संख्या का महत्व (या मंटिसा) फ़्लोटिंग-पॉइंट संख्या का हिस्सा है जो महत्वपूर्ण आंकड़ों का प्रतिनिधित्व करता है। सकारात्मक सामान्यीकृत संख्या के लिए इसे गैर-शून्य ''m''<sub>0</sub> के साथ  ''m''<sub>0</sub>.''m''<sub>1</sub>''m''<sub>2</sub>''m''<sub>3</sub>...''m<sub>p</sub>''<sub>−2</sub>''m<sub>p</sub>''<sub>−1</sub> (जहां ''m'' एक महत्वपूर्ण अंक का प्रतिनिधित्व करता है, और ''p'' स्पष्ट है) के रूप में प्रदर्शित किया जा सकता है। ध्यान दें कि एक बाइनरी [[मूलांक]] के लिए, अग्रणी बाइनरी अंक सदैव 1 होता है। '''[[मूलांक]] के लिए, अग्रणी बाइनरी अंक सदैव 1 होता है।''' एक असामान्य संख्या में, चूंकि घातांक सबसे कम है जो यह हो सकता है, शून्य प्रमुख महत्वपूर्ण अंक (0.''m''<sub>1</sub>''m''<sub>2</sub>''m''<sub>3</sub>...''m<sub>p</sub>''<sub>−2</sub>''m<sub>p</sub>''<sub>−1</sub>) है, जो सबसे छोटी सामान्य संख्या की तुलना में शून्य के निकट संख्याओं का प्रतिनिधित्व करने की अनुमति देता है। फ्लोटिंग-पॉइंट नंबर को असामान्य के रूप में पहचाना जा सकता है जब भी इसका प्रतिपादक कम से कम संभव हो।
[[आईईईई फ़्लोटिंग-पॉइंट]] संख्या का महत्व (या मंटिसा) फ़्लोटिंग-पॉइंट संख्या का हिस्सा है जो महत्वपूर्ण आंकड़ों का प्रतिनिधित्व करता है। सकारात्मक सामान्यीकृत संख्या के लिए इसे गैर-शून्य ''m''<sub>0</sub> के साथ  ''m''<sub>0</sub>.''m''<sub>1</sub>''m''<sub>2</sub>''m''<sub>3</sub>...''m<sub>p</sub>''<sub>−2</sub>''m<sub>p</sub>''<sub>−1</sub> (जहां ''m'' एक महत्वपूर्ण अंक का प्रतिनिधित्व करता है, और ''p'' स्पष्ट है) के रूप में प्रदर्शित किया जा सकता है। ध्यान दें कि एक बाइनरी [[मूलांक]] के लिए, अग्रणी बाइनरी अंक सदैव 1 होता है। एक असामान्य संख्या में, चूंकि घातांक सबसे कम है जो यह हो सकता है, शून्य प्रमुख महत्वपूर्ण अंक (0.''m''<sub>1</sub>''m''<sub>2</sub>''m''<sub>3</sub>...''m<sub>p</sub>''<sub>−2</sub>''m<sub>p</sub>''<sub>−1</sub>) है, जो सबसे छोटी सामान्य संख्या की तुलना में शून्य के निकट संख्याओं का प्रतिनिधित्व करने की अनुमति देता है। फ्लोटिंग-पॉइंट नंबर को असामान्य के रूप में पहचाना जा सकता है जब भी इसका प्रतिपादक कम से कम संभव हो।


इस तरह से अंडरफ्लो गैप को भरने से, महत्वपूर्ण अंक खो जाते हैं, लेकिन अचानक नहीं जैसे अंडरफ्लो एप्रोच पर फ्लश टू जीरो का उपयोग करते समय (अंडरफ्लो तक पहुंचने पर सभी महत्वपूर्ण अंकों को छोड़ देना) खो जाते हैं। इसलिए एक असामान्य संख्या के उत्पादन को कभी-कभी क्रमिक अंतर्प्रवाह कहा जाता है क्योंकि यह गणना को परिणाम छोटा होने पर धीरे-धीरे स्पष्टता खोने की अनुमति देता है।
इस तरह से अंडरफ्लो गैप को भरने से, महत्वपूर्ण अंक खो जाते हैं, लेकिन अचानक नहीं जैसे अंडरफ्लो एप्रोच पर फ्लश टू जीरो का उपयोग करते समय (अंडरफ्लो तक पहुंचने पर सभी महत्वपूर्ण अंकों को छोड़ देना) खो जाते हैं। इसलिए एक असामान्य संख्या के उत्पादन को कभी-कभी क्रमिक अंतर्प्रवाह कहा जाता है क्योंकि यह गणना को परिणाम छोटा होने पर धीरे-धीरे स्पष्टता खोने की अनुमति देता है।
Line 12: Line 12:


गणितीय रूप से बोलते हुए, किसी दिए गए चिह्न के सामान्यीकृत फ़्लोटिंग-पॉइंट संख्याओं को मोटे तौर पर लॉगरिदमिक रूप से स्थान दिया जाता है, और इस तरह के किसी भी परिमित आकार के सामान्य फ़्लोट में शून्य सम्मिलित नहीं हो सकता है। असामान्य फ़्लोट्स मूल्यों का एक रैखिक रूप से फैला हुआ सेट है, जो नकारात्मक और सकारात्मक सामान्य फ़्लोट्स के बीच के अंतर को फैलाता है।
गणितीय रूप से बोलते हुए, किसी दिए गए चिह्न के सामान्यीकृत फ़्लोटिंग-पॉइंट संख्याओं को मोटे तौर पर लॉगरिदमिक रूप से स्थान दिया जाता है, और इस तरह के किसी भी परिमित आकार के सामान्य फ़्लोट में शून्य सम्मिलित नहीं हो सकता है। असामान्य फ़्लोट्स मूल्यों का एक रैखिक रूप से फैला हुआ सेट है, जो नकारात्मक और सकारात्मक सामान्य फ़्लोट्स के बीच के अंतर को फैलाता है।
'''गणितीय रूप से बोलते हुए, किसी दिए गए चिह्न (गणित) के सामान्यीकृत फ़्लोटिंग-पॉइंट संख्याओं को मोटे तौर पर लॉगरिदमिक रूप से स्थान दिया जाता है, और इस तरह के किसी भी परिमित आकार के सामान्य फ्लोट [[asymptotic]] असामान्य फ़्लोट्स मूल्यों का एक रैखिक रूप से फैला हुआ सेट है, जो नकारात्मक और सकारात्मक सामान्य फ़्लोट्स के बीच के अंतर को फैलाता है।'''


{{floating-point}}
{{floating-point}}
Line 21: Line 19:
असामान्य संख्याएं गारंटी प्रदान करती हैं कि फ़्लोटिंग-पॉइंट संख्याओं का जोड़ और घटाव कभी भी कम नहीं होता है; पास के दो फ़्लोटिंग-पॉइंट संख्याओं में सदैव एक प्रतिनिधित्व योग्य गैर-शून्य अंतर होता है। क्रमिक अंतर्प्रवाह के बिना, घटाव ''a'' − ''b'' अंतर्प्रवाहित हो सकता है और शून्य उत्पन्न कर सकता है, तथापि मान समान न हों। बदले में, यह शून्य त्रुटियों से विभाजन की ओर ले जा सकता है जो तब नहीं हो सकता जब क्रमिक अंतर्प्रवाह का उपयोग किया जाता है।
असामान्य संख्याएं गारंटी प्रदान करती हैं कि फ़्लोटिंग-पॉइंट संख्याओं का जोड़ और घटाव कभी भी कम नहीं होता है; पास के दो फ़्लोटिंग-पॉइंट संख्याओं में सदैव एक प्रतिनिधित्व योग्य गैर-शून्य अंतर होता है। क्रमिक अंतर्प्रवाह के बिना, घटाव ''a'' − ''b'' अंतर्प्रवाहित हो सकता है और शून्य उत्पन्न कर सकता है, तथापि मान समान न हों। बदले में, यह शून्य त्रुटियों से विभाजन की ओर ले जा सकता है जो तब नहीं हो सकता जब क्रमिक अंतर्प्रवाह का उपयोग किया जाता है।


[[Intel 8087|इंटेल 8087]] में असामान्य संख्या लागू किए गए थे जबकि आईईईई 754 स्टैंडर्ड लिखा जा रहा था। वे के-सी-एस प्रारूप प्रस्ताव में अब तक की सबसे विवादास्पद विशेषता थी जिसे अंततः अपनाया गया था,<ref>{{cite web |url=http://www.eecs.berkeley.edu/~wkahan/ieee754status/754story.html |title=An Interview with the Old Man of Floating-Point |publisher=University of California, Berkeley}}</ref> लेकिन इस कार्यान्वयन ने प्रदर्शित किया कि व्यावहारिक कार्यान्वयन में असामान्य संख्याओं का समर्थन किया जा सकता है। [[फ्लोटिंग-पॉइंट यूनिट|फ्लोटिंग-पॉइंट इकाइयों]] के कुछ कार्यान्वयन सीधे हार्डवेयर में असामान्य संख्या का समर्थन नहीं करते हैं, किंतु किसी प्रकार के सॉफ़्टवेयर समर्थन के लिए फंस जाते हैं। चूंकि यह उपयोगकर्ता के लिए पारदर्शी हो सकता है, लेकिन इसका परिणाम उन गणनाओं में हो सकता है जो असामान्य संख्याओं का उत्पादन या उपभोग करती हैं जो सामान्य संख्याओं पर समान गणनाओं की तुलना में बहुत धीमी होती हैं।
[[Intel 8087|इंटेल 8087]] में असामान्य संख्या प्रयुक्त किए गए थे जबकि आईईईई 754 स्टैंडर्ड लिखा जा रहा था। वे के-सी-एस प्रारूप प्रस्ताव में अब तक की सबसे विवादास्पद विशेषता थी जिसे अंततः अपनाया गया था,<ref>{{cite web |url=http://www.eecs.berkeley.edu/~wkahan/ieee754status/754story.html |title=An Interview with the Old Man of Floating-Point |publisher=University of California, Berkeley}}</ref> लेकिन इस कार्यान्वयन ने प्रदर्शित किया कि व्यावहारिक कार्यान्वयन में असामान्य संख्याओं का समर्थन किया जा सकता है। [[फ्लोटिंग-पॉइंट यूनिट|फ्लोटिंग-पॉइंट इकाइयों]] के कुछ कार्यान्वयन सीधे हार्डवेयर में असामान्य संख्या का समर्थन नहीं करते हैं, किंतु किसी प्रकार के सॉफ़्टवेयर समर्थन के लिए फंस जाते हैं। चूंकि यह उपयोगकर्ता के लिए पारदर्शी हो सकता है, लेकिन इसका परिणाम उन गणनाओं में हो सकता है जो असामान्य संख्याओं का उत्पादन या उपभोग करती हैं जो सामान्य संख्याओं पर समान गणनाओं की तुलना में बहुत धीमी होती हैं।
 
== प्रदर्शन के उद्देश्य ==
कुछ प्रणालियाँ हार्डवेयर में असामान्य मानों को सामान्य मानों की तरह संभालती हैं। अन्य लोग प्रणाली सॉफ़्टवेयर ("सहायता") के लिए असामान्य मानों को संभालने के लिए छोड़ देते हैं, केवल सामान्य मान और हार्डवेयर में शून्य संभालते हैं। सॉफ्टवेयर में असामान्य मूल्यों को संभालने से सदैव प्रदर्शन में महत्वपूर्ण कमी आती है। जब हार्डवेयर में उपसामान्य मूल्यों की पूरी तरह से गणना की जाती है, तो सामान्य संख्याओं की तुलना में गति पर उनके प्रसंस्करण की अनुमति देने के लिए कार्यान्वयन विधियाँ उपस्थित होती हैं।<ref name=":0" /> चूँकि, कई आधुनिक x86 प्रोसेसर पर गणना की गति काफी कम रहती है; अत्यधिक स्थितियों में, असामान्य ऑपरेंड से जुड़े निर्देशों में 100 से अधिक अतिरिक्त घड़ी चक्र लग सकते हैं, जिससे सबसे तेज़ निर्देश छह गुना धीमी गति से चलने लगते हैं।<ref name=":1" /><ref name=":2" />
 
'''जब हार्डवेयर में असामान्य मूल्यों की पूरी तरह से गणना की जाती है, तो सामान्य संख्याओं की तुलना में गति पर उनके प्रसंस्करण की अनुमति देने के लिए कार्यान्वयन तकनीकें मौजूद होती हैं।<ref name=":0">{{cite journal|last1=Schwarz|first1=E.M.|last2=Schmookler|first2=M.|last3=Son Dao Trong|title=FPU Implementations with Denormalized Numbers|journal=IEEE Transactions on Computers|date=July 2005|volume=54|issue=7|pages=825–836|doi=10.1109/TC.2005.118|s2cid=26470540|url=http://www.acsel-lab.com/arithmetic/arith16/papers/ARITH16_Schwarz.pdf}}</ref> चूँकि, कई आधुनिक x86 प्रोसेसर पर गणना की गति काफी कम रहती है; अत्यधिक मामलों में, [[निर्देश (कंप्यूटर विज्ञान)]] जिसमें असामान्य ऑपरेंड सम्मिलित हैं, 100 से अधिक अतिरिक्त घड़ी चक्र ले सकते हैं, जिससे सबसे तेज़ निर्देश छह गुना धीमी गति से चलते हैं।<ref name=":1">{{cite web|url=http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf|author2=Kale, Laxmikant|first1=Isaac|last1=Dooley|date=2006-09-12|access-date=2010-11-30|title=Quantifying the Interference Caused by Subnormal Floating-Point Values}}</ref><ref name=":2">{{cite web|url=http://www.agner.org/optimize/instruction_tables.pdf|first=Agner|last=Fog|access-date=2011-01-25|title=Instruction tables: Lists of instruction latencies, throughputs and microoperation breakdowns for Intel, AMD and VIA CPUs}}</ref>'''


== प्रदर्शन के मुद्दे ==
यह गति अंतर एक सुरक्षा संकट हो सकता है। शोधकर्ताओं ने दिखाया कि यह एक टाइमिंग साइड चैनल प्रदान करता है जो एक दुर्भावनापूर्ण वेब साइट को एक वेब ब्राउज़र के अंदर दूसरी साइट से पृष्ठ सामग्री निकालने की अनुमति देता है।<ref>{{cite web|url=https://cseweb.ucsd.edu/~dkohlbre/papers/subnormal.pdf|title=On Subnormal Floating Point and Abnormal Timing|first1=Marc|last1=Andrysco|first2=David|last2=Kohlbrenner|first3=Keaton|last3=Mowery|first4=Ranjit|last4=Jhala|first5=Sorin|last5=Lerner|first6=Hovav|last6=Shacham|access-date=2015-10-05}}</ref>
कुछ प्रणालियाँ हार्डवेयर में असामान्य मानों को सामान्य मानों की तरह संभालती हैं। अन्य लोग सिस्टम सॉफ़्टवेयर (सहायता) के लिए असामान्य मूल्यों को संभालने के लिए छोड़ देते हैं, केवल सामान्य मूल्यों और हार्डवेयर में शून्य को संभालते हैं। सॉफ्टवेयर में असामान्य मूल्यों को संभालने से सदैव प्रदर्शन में महत्वपूर्ण कमी आती है। जब हार्डवेयर में असामान्य मूल्यों की पूरी तरह से गणना की जाती है, तो सामान्य संख्याओं की तुलना में गति पर उनके प्रसंस्करण की अनुमति देने के लिए कार्यान्वयन तकनीकें मौजूद होती हैं।<ref>{{cite journal|last1=Schwarz|first1=E.M.|last2=Schmookler|first2=M.|last3=Son Dao Trong|title=FPU Implementations with Denormalized Numbers|journal=IEEE Transactions on Computers|date=July 2005|volume=54|issue=7|pages=825–836|doi=10.1109/TC.2005.118|s2cid=26470540|url=http://www.acsel-lab.com/arithmetic/arith16/papers/ARITH16_Schwarz.pdf}}</ref> हालाँकि, कई आधुनिक x86 प्रोसेसर पर गणना की गति काफी कम रहती है; अत्यधिक मामलों में, [[निर्देश (कंप्यूटर विज्ञान)]] जिसमें असामान्य ऑपरेंड सम्मिलित हैं, 100 से अधिक अतिरिक्त घड़ी चक्र ले सकते हैं, जिससे सबसे तेज़ निर्देश छह गुना धीमी गति से चलते हैं।<ref>{{cite web|url=http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf|author2=Kale, Laxmikant|first1=Isaac|last1=Dooley|date=2006-09-12|access-date=2010-11-30|title=Quantifying the Interference Caused by Subnormal Floating-Point Values}}</ref><ref>{{cite web|url=http://www.agner.org/optimize/instruction_tables.pdf|first=Agner|last=Fog|access-date=2011-01-25|title=Instruction tables: Lists of instruction latencies, throughputs and microoperation breakdowns for Intel, AMD and VIA CPUs}}</ref>
यह गति अंतर एक सुरक्षा जोखिम हो सकता है। शोधकर्ताओं ने दिखाया कि यह एक टाइमिंग_अटैक प्रदान करता है जो एक दुर्भावनापूर्ण वेब साइट को वेब ब्राउज़र के अंदर किसी अन्य साइट से पृष्ठ सामग्री निकालने की अनुमति देता है।<ref>{{cite web|url=https://cseweb.ucsd.edu/~dkohlbre/papers/subnormal.pdf|title=On Subnormal Floating Point and Abnormal Timing|first1=Marc|last1=Andrysco|first2=David|last2=Kohlbrenner|first3=Keaton|last3=Mowery|first4=Ranjit|last4=Jhala|first5=Sorin|last5=Lerner|first6=Hovav|last6=Shacham|access-date=2015-10-05}}</ref>


कुछ अनुप्रयोगों में असामान्य संख्या से बचने के लिए, या तो स्पष्टता बनाए रखने के लिए, या कुछ प्रोसेसर में प्रदर्शन दंड से बचने के लिए कोड सम्मिलित करने की आवश्यकता होती है। उदाहरण के लिए, ऑडियो प्रसंस्करण अनुप्रयोगों में, असामान्य मान आमतौर पर एक संकेत का इतना शांत प्रतिनिधित्व करते हैं कि यह मानव श्रवण सीमा से बाहर है। इस वजह से, प्रोसेसर पर असामान्य से बचने के लिए एक सामान्य उपाय जहां एक प्रदर्शन जुर्माना होगा, एक बार जब यह असामान्य स्तर पर पहुंच जाता है या एक अत्यंत शांत शोर सिग्नल में मिश्रण होता है, तो सिग्नल को शून्य पर काट दिया जाता है।<ref>{{cite web|url=http://phonophunk.com/articles/pentium4-denormalization.php |title=Pentium 4 denormalization: CPU spikes in audio applications |last=Serris |first=John |date=2002-04-16 |access-date=2015-04-29 |url-status=dead |archive-url=https://web.archive.org/web/20120225091101/http://phonophunk.com/articles/pentium4-denormalization.php |archive-date=February 25, 2012 }}</ref> असामान्य संख्याओं को रोकने के अन्य तरीकों में DC ऑफ़सेट जोड़ना, संख्याओं को परिमाणित करना, Nyquist सिग्नल जोड़ना आदि सम्मिलित हैं।<ref>{{cite web|url=http://ldesoras.free.fr/doc/articles/denormal-en.pdf|last=de Soras| first=Laurent| date=2005-04-19| title=Denormal numbers in floating point signal processing applications}}</ref> [[स्ट्रीमिंग SIMD एक्सटेंशन]] प्रोसेसर एक्सटेंशन के बाद से, [[Intel|इंटेल]] ने CPU हार्डवेयर में ऐसी कार्यक्षमता प्रदान की है, जो असामान्य संख्याओं को शून्य तक ले जाती है।<ref>{{cite web|url=http://software.intel.com/en-us/articles/x87-and-sse-floating-point-assists-in-ia-32-flush-to-zero-ftz-and-denormals-are-zero-daz/|last=Casey|first=Shawn|date=2008-10-16|access-date=2010-09-03|title=x87 and SSE Floating Point Assists in IA-32: Flush-To-Zero (FTZ) and Denormals-Are-Zero (DAZ)}}</ref>
कुछ अनुप्रयोगों में असामान्य संख्या से बचने के लिए, या तो स्पष्टता बनाए रखने के लिए, या कुछ प्रोसेसर में प्रदर्शन दंड से बचने के लिए कोड सम्मिलित करने की आवश्यकता होती है। उदाहरण के लिए, ऑडियो प्रसंस्करण अनुप्रयोगों में, असामान्य मान सामान्यतः एक संकेत का इतना शांत प्रतिनिधित्व करते हैं कि यह मानव श्रवण सीमा से बाहर है। इस कारण से, प्रोसेसर पर असामान्य से बचने के लिए एक सामान्य उपाय जहां एक प्रदर्शन जुर्माना होगा, एक बार जब यह असामान्य स्तर पर पहुंच जाता है या एक अत्यंत शांत शोर संकेत में मिश्रण होता है, तो संकेत को शून्य पर काट दिया जाता है।<ref>{{cite web|url=http://phonophunk.com/articles/pentium4-denormalization.php |title=Pentium 4 denormalization: CPU spikes in audio applications |last=Serris |first=John |date=2002-04-16 |access-date=2015-04-29 |url-status=dead |archive-url=https://web.archive.org/web/20120225091101/http://phonophunk.com/articles/pentium4-denormalization.php |archive-date=February 25, 2012 }}</ref> असामान्य संख्याओं को रोकने के अन्य विधियों में डीसी ऑफ़सेट जोड़ना, संख्याओं को परिमाणित करना, निक्विस्ट संकेत जोड़ना आदि सम्मिलित हैं।<ref>{{cite web|url=http://ldesoras.free.fr/doc/articles/denormal-en.pdf|last=de Soras| first=Laurent| date=2005-04-19| title=Denormal numbers in floating point signal processing applications}}</ref> [[स्ट्रीमिंग SIMD एक्सटेंशन|एसएसई2]] प्रोसेसर एक्सटेंशन के बाद से, [[Intel|इंटेल]] ने सीपीयू हार्डवेयर में ऐसी कार्यक्षमता प्रदान की है, जो उपसामान्य संख्याओं को शून्य तक ले जाती है।<ref>{{cite web|url=http://software.intel.com/en-us/articles/x87-and-sse-floating-point-assists-in-ia-32-flush-to-zero-ftz-and-denormals-are-zero-daz/|last=Casey|first=Shawn|date=2008-10-16|access-date=2010-09-03|title=x87 and SSE Floating Point Assists in IA-32: Flush-To-Zero (FTZ) and Denormals-Are-Zero (DAZ)}}</ref>






== कोड स्तर पर असामान्य फ़्लोट्स को अक्षम करना {{anchor|Disabling_denormal_floats_at_the_code_level}} ==
 
== कोड स्तर पर असामान्य फ़्लोट्स को अक्षम करना ==


=== इंटेल एसएसई ===
=== इंटेल एसएसई ===
इंटेल के सी और फोरट्रान कंपाइलर सक्षम करते हैं {{code|DAZ}} (डीनॉर्मल्स-शून्य-शून्य) और {{code|FTZ}} (फ्लश-टू-जीरो) Streaming_SIMD_Extensions के लिए डिफ़ॉल्ट रूप से ऊपर के अनुकूलन स्तरों के लिए फ़्लैग करता है {{code|-O0}}.<ref>{{cite web |url=http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/2011Update/fortran/win/fpops/common/fpops_reduce_denorm.htm |title=Intel® MPI Library – Documentation |publisher=Intel}}</ref> का असर {{code|DAZ}} फ्लोटिंग-पॉइंट ऑपरेशंस को शून्य के रूप में असामान्य इनपुट तर्कों का इलाज करना है, और इसका प्रभाव {{code|FTZ}} संचालन के लिए एक असामान्य फ्लोट के बजाय शून्य वापस करना है, जिसके परिणामस्वरूप एक असामान्य फ्लोट होगा, तथापि इनपुट तर्क स्वयं असामान्य न हों। [[बजना]] और जीएनयू कंपाइलर संग्रह में प्लेटफ़ॉर्म और अनुकूलन स्तर के आधार पर अलग-अलग डिफ़ॉल्ट अवस्थाएँ होती हैं।
इंटेल के C और फोरट्रान कंपाइलर -{{code|-O0}} से अधिक अनुकूलन स्तर के लिए डिफ़ॉल्ट रूप से एसएसई के लिए {{code|DAZ}} (डीनॉर्मल्स-एरे-ज़ीरो) और {{code|FTZ}} (फ्लश-टू-ज़ीरो) फ़्लैग को सक्षम करते हैं।'''<ref>{{cite web |url=http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/2011Update/fortran/win/fpops/common/fpops_reduce_denorm.htm |title=Intel® MPI Library – Documentation |publisher=Intel}}</ref>''' {{code|DAZ}} का प्रभाव फ्लोटिंग-पॉइंट ऑपरेशंस के लिए असामान्य इनपुट तर्कों को शून्य के रूप में मानना है, और {{code|FTZ}} का प्रभाव ऑपरेशंस के लिए एक असामान्य फ्लोट के बजाय शून्य वापस करना है, जिसके परिणामस्वरूप एक असामान्य फ्लोट होगा, तथापि इनपुट तर्क स्वयं न हों। [[बजना|क्लैंग]] और जीसीसी में प्लेटफ़ॉर्म और अनुकूलन स्तर के आधार पर अलग-अलग डिफ़ॉल्ट अवस्थाएँ होती हैं।


सक्षम करने का एक गैर-[[C99]]-अनुपालन तरीका {{code|DAZ}} और {{code|FTZ}} एसएसई का समर्थन करने वाले लक्ष्यों पर झंडे नीचे दिए गए हैं, लेकिन व्यापक रूप से समर्थित नहीं हैं। यह [[Mac OS X]] पर कम से कम 2006 से काम करने के लिए जाना जाता है।<ref>{{cite web |url=https://lists.apple.com/archives/perfoptimization-dev/2006/May/msg00013.html |archive-url=https://web.archive.org/web/20160826010613/https://lists.apple.com/archives/perfoptimization-dev/2006/May/msg00013.html |url-status=dead |archive-date=2016-08-26 |title=Re: Macbook pro performance issue |publisher=Apple Inc.}}</ref>
'''इंटेल के सी और फोरट्रान कंपाइलर सक्षम करते हैं  (डीनॉर्मल्स-शून्य-शून्य) और  (फ्लश-टू-जीरो) Streaming_SIMD_Extensions के लिए डिफ़ॉल्ट रूप से ऊपर के अनुकूलन स्तरों के लिए फ़्लैग करता है . का असर {{code|DAZ}} फ्लोटिंग-पॉइंट ऑपरेशंस को शून्य के रूप में असामान्य इनपुट तर्कों का इलाज करना है, और इसका प्रभाव {{code|FTZ}} संचालन के लिए एक असामान्य फ्लोट के बजाय शून्य वापस करना है, जिसके परिणामस्वरूप एक असामान्य फ्लोट होगा, तथापि इनपुट तर्क स्वयं असामान्य न हों। [[बजना]] और जीएनयू कंपाइलर संग्रह में प्लेटफ़ॉर्म और अनुकूलन स्तर के आधार पर अलग-अलग डिफ़ॉल्ट अवस्थाएँ होती हैं।'''


एसएसई का समर्थन करने वाले लक्ष्यों पर {{code|DAZ}} और {{code|FTZ}} झंडे को सक्षम करने की एक गैर-[[C99]]-अनुपालन विधि नीचे दी गई है, लेकिन व्यापक रूप से समर्थित नहीं है। यह कम से कम 2006 से [[Mac OS X|मैक ओएस एक्स]] पर काम करने के लिए जाना जाता है।<ref name=":3" />


<वाक्यविन्यास प्रकाश लैंग = सी>
'''सक्षम करने का एक गैर-[[C99]]-अनुपालन विधि {{code|DAZ}} और  एसएसई का समर्थन करने वाले लक्ष्यों पर झंडे नीचे दिए गए हैं, लेकिन व्यापक रूप से समर्थित नहीं हैं। यह  पर कम से कम 2006 से काम करने के लिए जाना जाता है।<ref name=":3">{{cite web |url=https://lists.apple.com/archives/perfoptimization-dev/2006/May/msg00013.html |archive-url=https://web.archive.org/web/20160826010613/https://lists.apple.com/archives/perfoptimization-dev/2006/May/msg00013.html |url-status=dead |archive-date=2016-08-26 |title=Re: Macbook pro performance issue |publisher=Apple Inc.}}</ref>'''
#सम्मिलित <fenv.h>
#pragma STDC FENV_ACCESS ON
// डीएजेड और एफटीजेड सेट करता है, अन्य सीएसआर सेटिंग्स को तोड़ता है।


// https://opensource.apple.com/source/Libm/Libm-287.1/Source/Intel/, fenv.c और fenv.h देखें।
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
// Sets DAZ and FTZ, clobbering other CSR settings.
// See https://opensource.apple.com/source/Libm/Libm-287.1/Source/Intel/, fenv.c and fenv.h.
fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV); 
// fesetenv(FE_DFL_ENV) // Disable both, clobbering other CSR settings.


fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV);
अन्य x86-SSE प्लेटफ़ॉर्म के लिए जहाँ C लाइब्रेरी ने अभी तक इस फ़्लैग को प्रयुक्त नहीं किया है, निम्नलिखित कार्य कर सकते हैं:<ref>{{cite web |url=http://lists.apple.com/archives/perfoptimization-dev/2007/Jun/msg00025.html |title=Re: Changing floating point state (Was: double vs float performance) |publisher=Apple Inc. |access-date=2013-01-24 |archive-url=https://web.archive.org/web/20140115124313/http://lists.apple.com/archives/perfoptimization-dev/2007/Jun/msg00025.html |archive-date=2014-01-15 |url-status=dead }}</ref>


// fesetenv(FE_DFL_ENV) // दोनों को अक्षम करें, अन्य सीएसआर सेटिंग्स को क्लॉबरिंग करें।
<nowiki>#</nowiki>include <xmmintrin.h>


</वाक्यविन्यास हाइलाइट>
_mm_setcsr(_mm_getcsr() | 0x0040);  // DAZ


अन्य x86-SSE प्लेटफ़ॉर्म के लिए जहाँ C लाइब्रेरी ने अभी तक इस ध्वज को लागू नहीं किया है, निम्नलिखित कार्य कर सकते हैं:<ref>{{cite web |url=http://lists.apple.com/archives/perfoptimization-dev/2007/Jun/msg00025.html |title=Re: Changing floating point state (Was: double vs float performance) |publisher=Apple Inc. |access-date=2013-01-24 |archive-url=https://web.archive.org/web/20140115124313/http://lists.apple.com/archives/perfoptimization-dev/2007/Jun/msg00025.html |archive-date=2014-01-15 |url-status=dead }}</ref>
_mm_setcsr(_mm_getcsr() | 0x8000);  // FTZ


<वाक्यविन्यास प्रकाश लैंग = सी>
_mm_setcsr(_mm_getcsr() | 0x8040); // Both
#सम्मिलित <xmmintrin.h>
_mm_setcsr(_mm_getcsr() | 0x0040); // डीएजेड
_mm_setcsr(_mm_getcsr() | 0x8000); // एफटीजेड


_mm_setcsr(_mm_getcsr() | 0x8040); // दोनों
_mm_setcsr(_mm_getcsr() & ~0x8040); // Disable both


_mm_setcsr(_mm_getcsr() & ~0x8040); // दोनों को अक्षम करें
</वाक्यविन्यास हाइलाइट> {{code|_MM_SET_DENORMALS_ZERO_MODE}}<nowiki> }} और </nowiki>{{code|_MM_SET_FLUSH_ZERO_MODE}} उपरोक्त कोड के लिए मैक्रोज़ एक अधिक पठनीय इंटरफ़ेस लपेटते हैं।<ref>{{cite web |url=https://software.intel.com/sites/default/files/ae/4f/6320 |title=C++ Compiler for Linux* Systems User's Guide |publisher=Intel}}</ref>


<वाक्यविन्यास प्रकाश लैंग = सी>
{{code|_MM_SET_DENORMALS_ZERO_MODE}}  और {{code|_MM_SET_FLUSH_ZERO_MODE}} उपरोक्त कोड के लिए मैक्रोज़ एक अधिक पठनीय इंटरफ़ेस लपेटते हैं।<ref>{{cite web |url=https://software.intel.com/sites/default/files/ae/4f/6320 |title=C++ Compiler for Linux* Systems User's Guide |publisher=Intel}}</ref>
 
// To enable DAZ
 
<nowiki>#</nowiki>include <pmmintrin.h>


// DAZ को सक्षम करने के लिए
#सम्मिलित <pmmintrin.h>
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);


// एफटीजेड को सक्षम करने के लिए
// To enable FTZ
#सम्मिलित <xmmintrin.h>
<nowiki>#</nowiki>include <xmmintrin.h>
 
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);


</वाक्यविन्यास हाइलाइट>
'''<वाक्यविन्यास प्रकाश लैंग = सी>'''
 
'''// DAZ को सक्षम करने के लिए'''
#'''सम्मिलित <pmmintrin.h>'''
'''_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);'''
 
'''// एफटीजेड को सक्षम करने के लिए'''
#'''सम्मिलित <xmmintrin.h>'''
'''_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);'''
 
'''</वाक्यविन्यास हाइलाइट>'''


अधिकांश कंपाइलर पहले से ही डिफ़ॉल्ट रूप से पिछला मैक्रो प्रदान करेंगे, अन्यथा निम्न कोड स्निपेट का उपयोग किया जा सकता है (FTZ की परिभाषा समान है):
अधिकांश कंपाइलर पहले से ही डिफ़ॉल्ट रूप से पिछला मैक्रो प्रदान करेंगे, अन्यथा निम्न कोड स्निपेट का उपयोग किया जा सकता है (FTZ की परिभाषा समान है):


<वाक्यविन्यास प्रकाश लैंग = सी>
<nowiki>#</nowiki>define _MM_DENORMALS_ZERO_MASK   0x0040
# परिभाषित करें _MM_DENORMALS_ZERO_MASK 0x0040
 
# परिभाषित करें _MM_DENORMALS_ZERO_ON 0x0040
<nowiki>#</nowiki>define _MM_DENORMALS_ZERO_ON     0x0040
# परिभाषित करें _MM_DENORMALS_ZERO_OFF 0x0000
 
<nowiki>#</nowiki>define _MM_DENORMALS_ZERO_OFF   0x0000
 
<nowiki>#</nowiki>define _MM_SET_DENORMALS_ZERO_MODE(mode) _mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (mode))


#define _MM_SET_DENORMALS_ZERO_MODE(मोड) _mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (मोड))
<nowiki>#</nowiki>define _MM_GET_DENORMALS_ZERO_MODE()               (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK)
#define _MM_GET_DENORMALS_ZERO_MODE() (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK)
</वाक्यविन्यास हाइलाइट>


एप्लिकेशन_बाइनरी_इंटरफेस द्वारा डिफॉल्ट डीनॉर्मलाइजेशन व्यवहार अनिवार्य है, और इसलिए अच्छी तरह से व्यवहार किए गए सॉफ़्टवेयर को कॉल करने वाले या अन्य पुस्तकालयों में कोड को वापस करने से पहले डीनॉर्मलाइज़ेशन मोड को सहेजना और पुनर्स्थापित करना चाहिए।
एप्लिकेशन_बाइनरी_इंटरफेस द्वारा डिफॉल्ट डीनॉर्मलाइजेशन व्यवहार अनिवार्य है, और इसलिए अच्छी तरह से व्यवहार किए गए सॉफ़्टवेयर को कॉल करने वाले या अन्य पुस्तकालयों में कोड को वापस करने से पहले डीनॉर्मलाइज़ेशन मोड को सहेजना और पुनर्स्थापित करना चाहिए।


=== एआरएम ===
=== एआरएम ===
AArch32 नियॉन (SIMD) FPU सदैव एक फ्लश-टू-जीरो मोड का उपयोग करता है, जो समान है {{code|FTZ + DAZ}}. स्केलर FPU और AArch64 SIMD में, फ्लश-टू-ज़ीरो व्यवहार वैकल्पिक है और इसके द्वारा नियंत्रित किया जाता है {{code|FZ}} कंट्रोल रजिस्टर का बिट - आर्म32 में FPSCR और AArch64 में FPCR।
आर्च32 नियॉन (एसआईएमडी) एफपीयू सदैव एक फ्लश-टू-जीरो मोड का उपयोग करता है, जो {{code|FTZ + DAZ}} के समान है। स्केलर एफपीयू और आर्च64 एसआईएमडी के लिए, फ्लश-टू-ज़ीरो व्यवहार वैकल्पिक है और आर्च64 में एफपीएससीआर और आर्च64 में एफपीएससीआर के नियंत्रण रजिस्टर के {{code|FZ}} बिट द्वारा नियंत्रित किया जाता है। '''स्केलर FPU और आर्च64 SIMD में, फ्लश-टू-ज़ीरो व्यवहार वैकल्पिक है और इसके द्वारा नियंत्रित किया जाता है कंट्रोल रजिस्टर का बिट - आर्म32 में FPSCR और आर्च64 में FPCR।'''


कुछ ARM प्रोसेसर में असामान्य्स की हार्डवेयर हैंडलिंग होती है।
कुछ एआरएम प्रोसेसर में असामान्य्स की हार्डवेयर हैंडलिंग होती है।


== यह भी देखें ==
== यह भी देखें ==

Revision as of 21:47, 22 February 2023

एक असंवर्धित फ़्लोटिंग-पॉइंट सिस्टम में केवल सामान्यीकृत संख्याएँ होंगी (लाल रंग में संकेतित)। असामान्य संख्या (नीला) की अनुमति देने से सिस्टम की सीमा बढ़ जाती है।

कंप्यूटर विज्ञान में, उप-सामान्य संख्या असामान्य संख्याओं (कभी-कभी denormals कहा जाता है) का सबसेट है जो फ्लोटिंग-पॉइंट अंकगणितीय में शून्य के आसपास अंकगणितीय अंतर्प्रवाह अंतर को भरती है। सबसे छोटी सामान्य संख्या से छोटे परिमाण वाली कोई भी गैर-शून्य संख्या असामान्य है।

उपयोग नोट: कुछ पुराने दस्तावेज़ों में (विशेष रूप से आईईईई 754-1985 और C भाषा के प्रारंभिक रिलीज़ जैसे मानक दस्तावेज़ों में), विशेष रूप से असामान्य संख्याओं को संदर्भित करने के लिए डीनॉर्मल का उपयोग किया जाता है। यह उपयोग विभिन्न मानकों के दस्तावेजों में बना रहता है, विशेष रूप से हार्डवेयर पर चर्चा करते समय जो किसी भी अन्य असामान्य संख्या का प्रतिनिधित्व करने में असमर्थ है, लेकिन यहां चर्चा आईईईई 754-2008 के 2008 के संशोधन के अनुरूप असामान्य शब्द का उपयोग करती है।

सामान्य फ़्लोटिंग-पॉइंट मान में, महत्व (मंटिसा) में कोई अग्रणी शून्य नहीं है; किंतु, घातांक को समायोजित करके अग्रणी शून्य हटा दिए जाते हैं (उदाहरण के लिए, संख्या 0.0123 को 1.23 × 10−2 के रूप में लिखा जाएगा)। इसके विपरीत, एक असामान्य फ़्लोटिंग पॉइंट मान का शून्य के अग्रणी अंक के साथ महत्व होता है। इनमें से, असामान्य संख्याएं उन मूल्यों का प्रतिनिधित्व करती हैं जो सामान्यीकृत होने पर सबसे छोटे प्रतिनिधित्व योग्य प्रतिपादक (सीमित सीमा वाले प्रतिपादक) के नीचे प्रतिपादक होंगे।

आईईईई फ़्लोटिंग-पॉइंट संख्या का महत्व (या मंटिसा) फ़्लोटिंग-पॉइंट संख्या का हिस्सा है जो महत्वपूर्ण आंकड़ों का प्रतिनिधित्व करता है। सकारात्मक सामान्यीकृत संख्या के लिए इसे गैर-शून्य m0 के साथ m0.m1m2m3...mp−2mp−1 (जहां m एक महत्वपूर्ण अंक का प्रतिनिधित्व करता है, और p स्पष्ट है) के रूप में प्रदर्शित किया जा सकता है। ध्यान दें कि एक बाइनरी मूलांक के लिए, अग्रणी बाइनरी अंक सदैव 1 होता है। एक असामान्य संख्या में, चूंकि घातांक सबसे कम है जो यह हो सकता है, शून्य प्रमुख महत्वपूर्ण अंक (0.m1m2m3...mp−2mp−1) है, जो सबसे छोटी सामान्य संख्या की तुलना में शून्य के निकट संख्याओं का प्रतिनिधित्व करने की अनुमति देता है। फ्लोटिंग-पॉइंट नंबर को असामान्य के रूप में पहचाना जा सकता है जब भी इसका प्रतिपादक कम से कम संभव हो।

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

आईईईई 754-2008 में, असामान्य संख्याओं का नाम बदल कर असामान्य संख्याएँ कर दी जाती हैं और इन्हें बाइनरी और दशमलव दोनों स्वरूपों में समर्थित किया जाता है। बाइनरी आदान-प्रदान प्रारूपों में, असामान्य संख्याएं 0 के पक्षपाती प्रतिपादक पूर्वाग्रह के साथ एन्कोड की जाती हैं, लेकिन सबसे छोटे अनुमत प्रतिपादक के मान के साथ व्याख्या की जाती है, जो कि एक बड़ा (अर्थात, जैसे कि इसे 1 के रूप में एन्कोड किया गया था) है। दशमलव आदान-प्रदान प्रारूपों में उन्हें किसी विशेष एन्कोडिंग की आवश्यकता नहीं होती है क्योंकि प्रारूप सीधे असामान्य संख्याओं का समर्थन करता है।

गणितीय रूप से बोलते हुए, किसी दिए गए चिह्न के सामान्यीकृत फ़्लोटिंग-पॉइंट संख्याओं को मोटे तौर पर लॉगरिदमिक रूप से स्थान दिया जाता है, और इस तरह के किसी भी परिमित आकार के सामान्य फ़्लोट में शून्य सम्मिलित नहीं हो सकता है। असामान्य फ़्लोट्स मूल्यों का एक रैखिक रूप से फैला हुआ सेट है, जो नकारात्मक और सकारात्मक सामान्य फ़्लोट्स के बीच के अंतर को फैलाता है।


पृष्ठभूमि

असामान्य संख्याएं गारंटी प्रदान करती हैं कि फ़्लोटिंग-पॉइंट संख्याओं का जोड़ और घटाव कभी भी कम नहीं होता है; पास के दो फ़्लोटिंग-पॉइंट संख्याओं में सदैव एक प्रतिनिधित्व योग्य गैर-शून्य अंतर होता है। क्रमिक अंतर्प्रवाह के बिना, घटाव ab अंतर्प्रवाहित हो सकता है और शून्य उत्पन्न कर सकता है, तथापि मान समान न हों। बदले में, यह शून्य त्रुटियों से विभाजन की ओर ले जा सकता है जो तब नहीं हो सकता जब क्रमिक अंतर्प्रवाह का उपयोग किया जाता है।

इंटेल 8087 में असामान्य संख्या प्रयुक्त किए गए थे जबकि आईईईई 754 स्टैंडर्ड लिखा जा रहा था। वे के-सी-एस प्रारूप प्रस्ताव में अब तक की सबसे विवादास्पद विशेषता थी जिसे अंततः अपनाया गया था,[1] लेकिन इस कार्यान्वयन ने प्रदर्शित किया कि व्यावहारिक कार्यान्वयन में असामान्य संख्याओं का समर्थन किया जा सकता है। फ्लोटिंग-पॉइंट इकाइयों के कुछ कार्यान्वयन सीधे हार्डवेयर में असामान्य संख्या का समर्थन नहीं करते हैं, किंतु किसी प्रकार के सॉफ़्टवेयर समर्थन के लिए फंस जाते हैं। चूंकि यह उपयोगकर्ता के लिए पारदर्शी हो सकता है, लेकिन इसका परिणाम उन गणनाओं में हो सकता है जो असामान्य संख्याओं का उत्पादन या उपभोग करती हैं जो सामान्य संख्याओं पर समान गणनाओं की तुलना में बहुत धीमी होती हैं।

प्रदर्शन के उद्देश्य

कुछ प्रणालियाँ हार्डवेयर में असामान्य मानों को सामान्य मानों की तरह संभालती हैं। अन्य लोग प्रणाली सॉफ़्टवेयर ("सहायता") के लिए असामान्य मानों को संभालने के लिए छोड़ देते हैं, केवल सामान्य मान और हार्डवेयर में शून्य संभालते हैं। सॉफ्टवेयर में असामान्य मूल्यों को संभालने से सदैव प्रदर्शन में महत्वपूर्ण कमी आती है। जब हार्डवेयर में उपसामान्य मूल्यों की पूरी तरह से गणना की जाती है, तो सामान्य संख्याओं की तुलना में गति पर उनके प्रसंस्करण की अनुमति देने के लिए कार्यान्वयन विधियाँ उपस्थित होती हैं।[2] चूँकि, कई आधुनिक x86 प्रोसेसर पर गणना की गति काफी कम रहती है; अत्यधिक स्थितियों में, असामान्य ऑपरेंड से जुड़े निर्देशों में 100 से अधिक अतिरिक्त घड़ी चक्र लग सकते हैं, जिससे सबसे तेज़ निर्देश छह गुना धीमी गति से चलने लगते हैं।[3][4]

जब हार्डवेयर में असामान्य मूल्यों की पूरी तरह से गणना की जाती है, तो सामान्य संख्याओं की तुलना में गति पर उनके प्रसंस्करण की अनुमति देने के लिए कार्यान्वयन तकनीकें मौजूद होती हैं।[2] चूँकि, कई आधुनिक x86 प्रोसेसर पर गणना की गति काफी कम रहती है; अत्यधिक मामलों में, निर्देश (कंप्यूटर विज्ञान) जिसमें असामान्य ऑपरेंड सम्मिलित हैं, 100 से अधिक अतिरिक्त घड़ी चक्र ले सकते हैं, जिससे सबसे तेज़ निर्देश छह गुना धीमी गति से चलते हैं।[3][4]

यह गति अंतर एक सुरक्षा संकट हो सकता है। शोधकर्ताओं ने दिखाया कि यह एक टाइमिंग साइड चैनल प्रदान करता है जो एक दुर्भावनापूर्ण वेब साइट को एक वेब ब्राउज़र के अंदर दूसरी साइट से पृष्ठ सामग्री निकालने की अनुमति देता है।[5]

कुछ अनुप्रयोगों में असामान्य संख्या से बचने के लिए, या तो स्पष्टता बनाए रखने के लिए, या कुछ प्रोसेसर में प्रदर्शन दंड से बचने के लिए कोड सम्मिलित करने की आवश्यकता होती है। उदाहरण के लिए, ऑडियो प्रसंस्करण अनुप्रयोगों में, असामान्य मान सामान्यतः एक संकेत का इतना शांत प्रतिनिधित्व करते हैं कि यह मानव श्रवण सीमा से बाहर है। इस कारण से, प्रोसेसर पर असामान्य से बचने के लिए एक सामान्य उपाय जहां एक प्रदर्शन जुर्माना होगा, एक बार जब यह असामान्य स्तर पर पहुंच जाता है या एक अत्यंत शांत शोर संकेत में मिश्रण होता है, तो संकेत को शून्य पर काट दिया जाता है।[6] असामान्य संख्याओं को रोकने के अन्य विधियों में डीसी ऑफ़सेट जोड़ना, संख्याओं को परिमाणित करना, निक्विस्ट संकेत जोड़ना आदि सम्मिलित हैं।[7] एसएसई2 प्रोसेसर एक्सटेंशन के बाद से, इंटेल ने सीपीयू हार्डवेयर में ऐसी कार्यक्षमता प्रदान की है, जो उपसामान्य संख्याओं को शून्य तक ले जाती है।[8]



कोड स्तर पर असामान्य फ़्लोट्स को अक्षम करना

इंटेल एसएसई

इंटेल के C और फोरट्रान कंपाइलर --O0 से अधिक अनुकूलन स्तर के लिए डिफ़ॉल्ट रूप से एसएसई के लिए DAZ (डीनॉर्मल्स-एरे-ज़ीरो) और FTZ (फ्लश-टू-ज़ीरो) फ़्लैग को सक्षम करते हैं।[9] DAZ का प्रभाव फ्लोटिंग-पॉइंट ऑपरेशंस के लिए असामान्य इनपुट तर्कों को शून्य के रूप में मानना है, और FTZ का प्रभाव ऑपरेशंस के लिए एक असामान्य फ्लोट के बजाय शून्य वापस करना है, जिसके परिणामस्वरूप एक असामान्य फ्लोट होगा, तथापि इनपुट तर्क स्वयं न हों। क्लैंग और जीसीसी में प्लेटफ़ॉर्म और अनुकूलन स्तर के आधार पर अलग-अलग डिफ़ॉल्ट अवस्थाएँ होती हैं।

इंटेल के सी और फोरट्रान कंपाइलर सक्षम करते हैं (डीनॉर्मल्स-शून्य-शून्य) और (फ्लश-टू-जीरो) Streaming_SIMD_Extensions के लिए डिफ़ॉल्ट रूप से ऊपर के अनुकूलन स्तरों के लिए फ़्लैग करता है . का असर DAZ फ्लोटिंग-पॉइंट ऑपरेशंस को शून्य के रूप में असामान्य इनपुट तर्कों का इलाज करना है, और इसका प्रभाव FTZ संचालन के लिए एक असामान्य फ्लोट के बजाय शून्य वापस करना है, जिसके परिणामस्वरूप एक असामान्य फ्लोट होगा, तथापि इनपुट तर्क स्वयं असामान्य न हों। बजना और जीएनयू कंपाइलर संग्रह में प्लेटफ़ॉर्म और अनुकूलन स्तर के आधार पर अलग-अलग डिफ़ॉल्ट अवस्थाएँ होती हैं।

एसएसई का समर्थन करने वाले लक्ष्यों पर DAZ और FTZ झंडे को सक्षम करने की एक गैर-C99-अनुपालन विधि नीचे दी गई है, लेकिन व्यापक रूप से समर्थित नहीं है। यह कम से कम 2006 से मैक ओएस एक्स पर काम करने के लिए जाना जाता है।[10]

सक्षम करने का एक गैर-C99-अनुपालन विधि DAZ और एसएसई का समर्थन करने वाले लक्ष्यों पर झंडे नीचे दिए गए हैं, लेकिन व्यापक रूप से समर्थित नहीं हैं। यह पर कम से कम 2006 से काम करने के लिए जाना जाता है।[10]

#include <fenv.h>
#pragma STDC FENV_ACCESS ON
// Sets DAZ and FTZ, clobbering other CSR settings.
// See https://opensource.apple.com/source/Libm/Libm-287.1/Source/Intel/, fenv.c and fenv.h. 
fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV); 

// fesetenv(FE_DFL_ENV) // Disable both, clobbering other CSR settings.

अन्य x86-SSE प्लेटफ़ॉर्म के लिए जहाँ C लाइब्रेरी ने अभी तक इस फ़्लैग को प्रयुक्त नहीं किया है, निम्नलिखित कार्य कर सकते हैं:[11]

#include <xmmintrin.h>

_mm_setcsr(_mm_getcsr() | 0x0040); // DAZ

_mm_setcsr(_mm_getcsr() | 0x8000); // FTZ

_mm_setcsr(_mm_getcsr() | 0x8040); // Both

_mm_setcsr(_mm_getcsr() & ~0x8040); // Disable both


_MM_SET_DENORMALS_ZERO_MODE और _MM_SET_FLUSH_ZERO_MODE उपरोक्त कोड के लिए मैक्रोज़ एक अधिक पठनीय इंटरफ़ेस लपेटते हैं।[12]

// To enable DAZ

#include <pmmintrin.h>

_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);

// To enable FTZ #include <xmmintrin.h>

_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);

<वाक्यविन्यास प्रकाश लैंग = सी>

// DAZ को सक्षम करने के लिए

  1. सम्मिलित <pmmintrin.h>

_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);

// एफटीजेड को सक्षम करने के लिए

  1. सम्मिलित <xmmintrin.h>

_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);

</वाक्यविन्यास हाइलाइट>

अधिकांश कंपाइलर पहले से ही डिफ़ॉल्ट रूप से पिछला मैक्रो प्रदान करेंगे, अन्यथा निम्न कोड स्निपेट का उपयोग किया जा सकता है (FTZ की परिभाषा समान है):

#define _MM_DENORMALS_ZERO_MASK 0x0040

#define _MM_DENORMALS_ZERO_ON 0x0040

#define _MM_DENORMALS_ZERO_OFF 0x0000

#define _MM_SET_DENORMALS_ZERO_MODE(mode) _mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (mode))

#define _MM_GET_DENORMALS_ZERO_MODE() (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK)

एप्लिकेशन_बाइनरी_इंटरफेस द्वारा डिफॉल्ट डीनॉर्मलाइजेशन व्यवहार अनिवार्य है, और इसलिए अच्छी तरह से व्यवहार किए गए सॉफ़्टवेयर को कॉल करने वाले या अन्य पुस्तकालयों में कोड को वापस करने से पहले डीनॉर्मलाइज़ेशन मोड को सहेजना और पुनर्स्थापित करना चाहिए।

एआरएम

आर्च32 नियॉन (एसआईएमडी) एफपीयू सदैव एक फ्लश-टू-जीरो मोड का उपयोग करता है, जो FTZ + DAZ के समान है। स्केलर एफपीयू और आर्च64 एसआईएमडी के लिए, फ्लश-टू-ज़ीरो व्यवहार वैकल्पिक है और आर्च64 में एफपीएससीआर और आर्च64 में एफपीएससीआर के नियंत्रण रजिस्टर के FZ बिट द्वारा नियंत्रित किया जाता है। स्केलर FPU और आर्च64 SIMD में, फ्लश-टू-ज़ीरो व्यवहार वैकल्पिक है और इसके द्वारा नियंत्रित किया जाता है कंट्रोल रजिस्टर का बिट - आर्म32 में FPSCR और आर्च64 में FPCR।

कुछ एआरएम प्रोसेसर में असामान्य्स की हार्डवेयर हैंडलिंग होती है।

यह भी देखें

संदर्भ

  1. "An Interview with the Old Man of Floating-Point". University of California, Berkeley.
  2. 2.0 2.1 Schwarz, E.M.; Schmookler, M.; Son Dao Trong (July 2005). "FPU Implementations with Denormalized Numbers" (PDF). IEEE Transactions on Computers. 54 (7): 825–836. doi:10.1109/TC.2005.118. S2CID 26470540.
  3. 3.0 3.1 Dooley, Isaac; Kale, Laxmikant (2006-09-12). "Quantifying the Interference Caused by Subnormal Floating-Point Values" (PDF). Retrieved 2010-11-30.
  4. 4.0 4.1 Fog, Agner. "Instruction tables: Lists of instruction latencies, throughputs and microoperation breakdowns for Intel, AMD and VIA CPUs" (PDF). Retrieved 2011-01-25.
  5. Andrysco, Marc; Kohlbrenner, David; Mowery, Keaton; Jhala, Ranjit; Lerner, Sorin; Shacham, Hovav. "On Subnormal Floating Point and Abnormal Timing" (PDF). Retrieved 2015-10-05.
  6. Serris, John (2002-04-16). "Pentium 4 denormalization: CPU spikes in audio applications". Archived from the original on February 25, 2012. Retrieved 2015-04-29.
  7. de Soras, Laurent (2005-04-19). "Denormal numbers in floating point signal processing applications" (PDF).
  8. Casey, Shawn (2008-10-16). "x87 and SSE Floating Point Assists in IA-32: Flush-To-Zero (FTZ) and Denormals-Are-Zero (DAZ)". Retrieved 2010-09-03.
  9. "Intel® MPI Library – Documentation". Intel.
  10. 10.0 10.1 "Re: Macbook pro performance issue". Apple Inc. Archived from the original on 2016-08-26.
  11. "Re: Changing floating point state (Was: double vs float performance)". Apple Inc. Archived from the original on 2014-01-15. Retrieved 2013-01-24.
  12. "C++ Compiler for Linux* Systems User's Guide". Intel.


अग्रिम पठन

  • See also various papers on William Kahan's web site [1] for examples of where subnormal numbers help improve the results of calculations.