Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Subnormal number
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Performance issues == Some systems handle subnormal values in hardware, in the same way as normal values. Others leave the handling of subnormal values to system software ("assist"), only handling normal values and zero in hardware. Handling subnormal values in software always leads to a significant decrease in performance. When subnormal values are entirely computed in hardware, implementation techniques exist to allow their processing at speeds comparable to normal numbers.<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> However, the speed of computation remains significantly reduced on many modern x86 processors; in extreme cases, [[Instruction (computer science)|instructions]] involving subnormal operands may take as many as 100 additional clock cycles, causing the fastest instructions to run as much as six times slower.<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> This speed difference can be a security risk. Researchers showed that it provides a [[Timing_attack|timing side channel]] that allows a malicious web site to extract page content from another site inside a web browser.<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> Some applications need to contain code to avoid subnormal numbers, either to maintain accuracy, or in order to avoid the performance penalty in some processors. For instance, in audio processing applications, subnormal values usually represent a signal so quiet that it is out of the human hearing range. Because of this, a common measure to avoid subnormals on processors where there would be a performance penalty is to cut the signal to zero once it reaches subnormal levels or mix in an extremely quiet noise signal.<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=25 February 2012 }}</ref> Other methods of preventing subnormal numbers include adding a DC offset, quantizing numbers, adding a Nyquist signal, etc.<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> Since the [[Streaming SIMD Extensions|SSE2]] processor extension, [[Intel]] has provided such a functionality in CPU hardware, which rounds subnormal numbers to zero.<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>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)