Jump to content

3DNow!: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Rescuing 1 sources and tagging 0 as dead. #IABot (v2.0beta9)
JonT (talk | contribs)
Processors supporting 3DNow!: Only National Semiconductor Geode GX2 has support
 
(40 intermediate revisions by 27 users not shown)
Line 1: Line 1:
{{short description|Extension to the x86 instruction set by AMD}}{{Infobox computer hardware
'''3DNow!''' is an extension to the [[x86]] [[instruction set]] developed by [[Advanced Micro Devices]] (AMD). It adds [[SIMD|single instruction multiple data]] <!-- astounding that the expansion redirects to the initialism page...meh --> (SIMD) instructions to the base x86 instruction set, enabling it to perform [[vector processing]], which improves the performance of many graphic-intensive applications. The first microprocessor to implement 3DNow was the [[AMD K6-2]], which was introduced in 1998. When the application was appropriate this raised the speed by about 2–4 times.<ref>{{cite web|url=http://www.linuxjournal.com/article/3685 |title=Effectively Utilizing 3DNow in Linux |publisher=Linux Journal |date=Dec 1, 1999|accessdate=2010-10-03}}</ref>
| name = 3DNow!
| logo = 3dnow-logo.svg
| image =
| caption =
| designfirm = [[Advanced Micro Devices]]
| introduced = 1998
| discontinued =
| type = [[instruction set architecture]]
}}
'''3DNow!''' is a deprecated extension to the [[x86]] [[instruction set]] developed by [[Advanced Micro Devices]] (AMD). It adds [[SIMD|single instruction multiple data]] <!-- astounding that the expansion redirects to the initialism page...meh --> (SIMD) instructions to the base x86 instruction set, enabling it to perform [[vector processing]] of [[Floating point number|floating-point]] vector operations using [[vector registers]]. This improvement enhances the performance of many graphics-intensive applications. The first microprocessor to implement 3DNow! was the [[AMD K6-2]], introduced in 1998. In appropriate applications, this enhancement raised the speed by about 2–4 times.<ref>{{cite web |url=http://www.linuxjournal.com/article/3685 |title=Effectively Utilizing 3DNow in Linux |publisher=Linux Journal |date=December 1, 1999 |access-date=2010-10-03 |archive-date=2011-06-07 |archive-url=https://web.archive.org/web/20110607184325/http://www.linuxjournal.com/article/3685 |url-status=live }}</ref>


However, the instruction set never gained much popularity, and AMD announced on August 2010 that support for 3DNow would be dropped in future AMD processors, except for two instructions (the <code>PREFETCH</code> and <code>PREFETCHW</code> instructions).<ref>{{cite web |url=http://developer.amd.com/2010/08/18/3dnow-deprecated/ |title=3DNow Instructions are Being Deprecated &#124; AMD Developer Central |publisher=Blogs.amd.com |date=2010-08-18 |accessdate=2010-10-03 |archiveurl=https://web.archive.org/web/20101024174505/http://developer.amd.com/2010/08/18/3dnow-deprecated/ |archivedate=2010-10-24 |deadurl=yes |df= }}</ref> The two instructions are also available in Bay-Trail Intel processors.<ref>{{cite web|url=http://wiki.minnowboard.org/IntelE38xx|title=IntelE38xx - MinnowBoard Wiki|publisher=|accessdate=13 February 2017}}</ref>
However, the instruction set never gained much popularity, and AMD announced in August 2010 that support for 3DNow! would be dropped in future AMD processors, except for two instructions, <code>PREFETCH</code> and <code>PREFETCHW</code>.<ref>{{cite web |url=http://developer.amd.com/2010/08/18/3dnow-deprecated/ |title=3DNow Instructions are Being Deprecated &#124; AMD Developer Central |publisher=Blogs.amd.com |date=2010-08-18 |access-date=2010-10-03 |archive-url=https://web.archive.org/web/20101024174505/http://developer.amd.com/2010/08/18/3dnow-deprecated/ |archive-date=2010-10-24 |url-status=dead }}</ref> These two instructions are also available in Bay-Trail Intel processors.<ref>{{cite web|url=http://wiki.minnowboard.org/IntelE38xx|title=IntelE38xx - MinnowBoard Wiki|access-date=13 February 2017|archive-url=https://web.archive.org/web/20170211075815/http://wiki.minnowboard.org/IntelE38xx|archive-date=11 February 2017|url-status=dead}}</ref>


==History==
==History==
3DNow was developed at a time when [[3D graphics]] were becoming mainstream in PC multimedia and gaming software. Realtime display of 3D graphics depended heavily on the host CPU's floating-point unit (FPU) to perform [[floating-point]] calculations, a task in which AMD's [[AMD K6|K6 processor]] was easily outperformed by its competitor, the Intel Pentium II.
3DNow! was developed at a time when [[3D graphics]] were becoming mainstream in PC multimedia and games. Realtime display of 3D graphics depended heavily on the host CPU's floating-point unit (FPU) to perform [[floating-point]] calculations, a task in which AMD's [[AMD K6|K6 processor]] was easily outperformed by its competitor, the Intel Pentium II.


As an enhancement to the [[MMX (instruction set)|MMX]] instruction set, the 3DNow instruction-set augmented the MMX SIMD registers to support common arithmetic operations (add/subtract/multiply) on single-precision (32-bit) floating-point data. Software written to use AMD's 3DNow instead of the slower [[x87|x87 FPU]] could execute up to 4x faster, depending on the instruction-mix.
As an enhancement to the [[MMX (instruction set)|MMX]] instruction set, the 3DNow! instruction-set augmented the MMX SIMD registers to support common arithmetic operations (add/subtract/multiply) on single-precision (32-bit) floating-point data. Software written to use AMD's 3DNow! instead of the slower [[x87|x87 FPU]] could execute up to four times faster, depending on the instruction mix.


==Versions==
==Versions==


===3DNow===
===3DNow!===
The first implementation of 3DNow technology contains 21 new instructions that support [[SIMD]] floating-point operations. The 3DNow data format is packed, [[single-precision]], floating-point. The 3DNow instruction set also includes operations for SIMD integer operations, data prefetch, and faster MMX-to-floating-point switching. Later, [[Intel]] would add similar (but incompatible) instructions to the [[Pentium III]], known as [[Streaming SIMD Extensions|SSE]] (Streaming SIMD Extensions).
The first implementation of 3DNow! technology contains 21 new instructions that support [[SIMD]] floating-point operations. The 3DNow! data format is packed, [[single-precision]], floating-point. The 3DNow! instruction set also includes operations for SIMD integer operations, data prefetch, and faster MMX-to-floating-point switching. Later, [[Intel]] would add similar (but incompatible) instructions to the [[Pentium III]], known as [[Streaming SIMD Extensions|SSE]] (Streaming SIMD Extensions).


3DNow floating-point instructions are the following:
3DNow! floating-point instructions are the following:
{{Div col|colwidth=30em}}
{{Div col|colwidth=30em}}
* <code>PI2FD</code>{{snd}} Packed 32-bit integer to floating-point conversion
* <code>PI2FD</code>{{snd}} Packed 32-bit integer to floating-point conversion
Line 34: Line 44:
{{div col end}}
{{div col end}}


3DNow integer instructions are the following:
3DNow! integer instructions are the following:
* <code>PAVGUSB</code>{{snd}} Packed 8-bit unsigned integer averaging
* <code>PAVGUSB</code>{{snd}} Packed 8-bit unsigned integer averaging
* <code>PMULHRW</code>{{snd}} Packed 16-bit integer multiply with rounding
* <code>PMULHRW</code>{{snd}} Packed 16-bit integer multiply with rounding


3DNow performance-enhancement instructions are the following:
3DNow! performance-enhancement instructions are the following:
* <code>FEMMS</code>{{snd}} Faster entry/exit of the MMX or floating-point state
* <code>FEMMS</code>{{snd}} Faster entry/exit of the MMX or floating-point state
* <code>PREFETCH/PREFETCHW</code>{{snd}} Prefetch at least a 32-byte line into L1 data cache (this is the non-deprecated instruction)
* <code>PREFETCH/PREFETCHW</code>{{snd}} Prefetch at least a 32-byte line into L1 data cache (this is the only non-deprecated instruction)


===3DNow extensions===
===3DNow! extensions===
There is little or no evidence that the second version of 3DNow was ever officially given its own trade name. This has led to some confusion in documentation that refers to this new instruction set. The most common terms are ''Extended 3DNow'', ''Enhanced 3DNow'' and ''3DNow+''. The phrase "Enhanced 3DNow" can be found in a few locations on the AMD website but the capitalization of "Enhanced" appears to be either purely grammatical or used for emphasis on processors that may or may not have these extensions (the most notable of which references a benchmark page for the K6-III-P that does not have these extensions).<ref name="extman">
There is little or no evidence that the second version of 3DNow! was ever officially given its own trade name. This has led to some confusion in documentation that refers to this new instruction set. The most common terms are ''Extended 3DNow!'', ''Enhanced 3DNow!'' and ''3DNow!+''. The phrase "Enhanced 3DNow!" can be found in a few locations on the AMD website but the capitalization of "Enhanced" appears to be either purely grammatical or used for emphasis on processors that may or may not have these extensions (the most notable of which references a benchmark page for the K6-III-P that does not have these extensions).<ref name="extman">{{cite web
{{cite web
|url=https://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22466.pdf
|url=https://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22466.pdf
|title=AMD Extensions to the 3DNow and MMX Instruction Sets Manual
|title=AMD Extensions to the 3DNow and MMX Instruction Sets Manual
|format=PDF
|publisher=[[Advanced Micro Devices, Inc.]]
|publisher=[[Advanced Micro Devices, Inc.]]
|date=March 2000
|date=March 2000
|accessdate=2008-06-07}}
|access-date=2008-06-07
|archive-date=2008-05-17
</ref><ref>
|archive-url=https://web.archive.org/web/20080517014932/http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22466.pdf
{{cite web
|url-status=live
}}</ref><ref>{{cite web
|url=https://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_1260_1300%5E960,00.html
|url=https://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_1260_1300%5E960,00.html
|title=Mobile AMD-K6-III-P Processor-Based Notebook: Ziff-Davis CPUmark 99
|title=Mobile AMD-K6-III-P Processor-Based Notebook: Ziff-Davis CPUmark 99
|quote=Incorrect title on page: Mobile AMD-K6-III+ and Mobile AMD-K6-2+ Processors with Enchanced {{sic}} 3DNow! Technology
|quote=Incorrect title on page: Mobile AMD-K6-III+ and Mobile AMD-K6-2+ Processors with Enchanced {{sic}} 3DNow! Technology
|accessdate=2008-06-07}}
|access-date=2008-06-07
|archive-date=2008-07-24
</ref>
|archive-url=https://web.archive.org/web/20080724223037/http://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_1260_1300%5E960,00.html
|url-status=live
}}</ref>


This extension to the 3DNow instruction set was introduced with the first-generation [[Athlon]] processors. The Athlon added 5 new 3DNow instructions and 19 new MMX instructions. Later, the [[AMD K6-2|K6-2+]] and [[AMD K6-III|K6-III+]] (both targeted at the mobile market) included the 5 new 3DNow instructions, leaving out the 19 new MMX instructions. The new 3DNow instructions were added to boost [[Digital signal processing|DSP]]. The new MMX instructions were added to boost [[streaming media]].
This extension to the 3DNow! instruction set was introduced with the first-generation [[Athlon]] processors. The Athlon added five new 3DNow! instructions and 19 new MMX instructions. Later, the [[AMD K6-2|K6-2+]] and [[AMD K6-III|K6-III+]] (both targeted at the mobile market) included the five new 3DNow! instructions, leaving out the 19 new MMX instructions. The new 3DNow! instructions were added to boost [[Digital signal processing|DSP]]. The new MMX instructions were added to boost [[streaming media]].


The 19 new MMX instructions are a subset of Intel's SSE1 instruction set. In AMD technical manuals, AMD segregates these instructions apart from the 3DNow extensions.<ref name="extman"/> In AMD customer product literature, however, this segregation is less clear where the benefits of all 24 new instructions are credited to enhanced 3DNow technology.<ref>
The 19 new MMX instructions are a subset of Intel's SSE instruction set. In AMD technical manuals, AMD segregates these instructions apart from the 3DNow! extensions.<ref name="extman"/> In AMD customer product literature, however, this segregation is less clear where the benefits of all 24 new instructions are credited to enhanced 3DNow! technology.<ref>{{cite web
{{cite web
|url=https://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_1260_759%5E1151,00.html
|url=https://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_1260_759%5E1151,00.html
|title=AMD Athlon Processor Product Brief
|title=AMD Athlon Processor Product Brief
|publisher=[[Advanced Micro Devices, Inc.]]
|publisher=[[Advanced Micro Devices, Inc.]]
|accessdate=2008-06-08}}
|access-date=2008-06-08
|archive-date=2008-02-25
</ref> This has led programmers to come up with their own name for the 19 new MMX instructions. The most common appears to be ''Integer SSE'' (''ISSE'').<ref>
|archive-url=https://web.archive.org/web/20080225111905/http://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_1260_759%5E1151,00.html
{{cite web
|url-status=live
}}</ref> This has led programmers to come up with their own name for the 19 new MMX instructions. The most common appears to be ''Integer SSE'' (''ISSE'').<ref>{{cite web
|url=http://avisynth.nl/index.php/ISSE
|url=http://avisynth.nl/index.php/ISSE
|title=ISSE
|title=ISSE
|website=[[AviSynth]]
|website=[[AviSynth]]
|accessdate=2017-07-19}}
|access-date=2017-07-19
|archive-date=2017-07-02
</ref> ''SSEMMX'' and ''MMX2'' are also found in video filter documentation from the public domain sector. [It should also be noted that ISSE could also refer to Internet SSE, an early name for SSE.]
|archive-url=https://web.archive.org/web/20170702204448/http://avisynth.nl/index.php/ISSE
|url-status=live
}}</ref> ''SSEMMX'' and ''MMX2'' are also found in video filter documentation from the public domain sector. ISSE could also refer to Internet SSE, an early name for SSE.


3DNow extension DSP instructions are the following:
3DNow! extension DSP instructions are the following:
* <code>PF2IW</code>{{snd}} Packed floating-point to integer word conversion with sign extend
* <code>PF2IW</code>{{snd}} Packed floating-point to integer word conversion with sign extend
* <code>PI2FW</code>{{snd}} Packed integer word to floating-point conversion
* <code>PI2FW</code>{{snd}} Packed integer word to floating-point conversion
Line 105: Line 122:
{{div col end}}
{{div col end}}


===3DNow Professional===
===3DNow! Professional===
''3DNow Professional'' is a trade name used to indicate processors that combine 3DNow technology with a complete SSE instructions set (such as SSE1, SSE2 or SSE3).<ref>{{cite web
''3DNow! Professional'' is a trade name used to indicate processors that combine 3DNow! technology with a complete SSE instructions set (such as SSE, SSE2 or SSE3).<ref>{{cite web
|url=https://www.amd.com/us-en/Processors/SellAMDProducts/0,,30_177_4458_4513%5E1413%5E2137,00.html
|url=https://www.amd.com/us-en/Processors/SellAMDProducts/0,,30_177_4458_4513%5E1413%5E2137,00.html
|title=Explaining the new 3DNow Professional Technology
|title=Explaining the new 3DNow! Professional Technology
|publisher=[[Advanced Micro Devices, Inc.]]
|publisher=[[Advanced Micro Devices, Inc.]]
|accessdate=2008-06-08
|access-date=2008-06-08
|deadurl=yes
|url-status=dead
|archiveurl=https://web.archive.org/web/20090121005440/http://www.amd.com/us-en/Processors/SellAMDProducts/0%2C%2C30_177_4458_4513%5E1413%5E2137%2C00.html
|archive-url=https://web.archive.org/web/20090121005440/http://www.amd.com/us-en/Processors/SellAMDProducts/0%2C%2C30_177_4458_4513%5E1413%5E2137%2C00.html
|archivedate=2009-01-21
|archive-date=2009-01-21
}}</ref> The [[Athlon XP]] was the first processor to carry the 3DNow! Professional trade name, and was the first product in the Athlon family to support the complete SSE instruction set (for the total of: 21 original 3DNow! instructions; five 3DNow! extension DSP instructions; 19 MMX extension instructions; and 52 additional SSE instructions for complete SSE compatibility).<ref>{{cite web
|df=
}}</ref> The [[Athlon XP]] was the first processor to carry the 3DNow Professional trade name, and was the first product in the Athlon family to support the complete SSE1 instruction set (for the total of: 21 original 3DNow instructions; five 3DNow extension DSP instructions; 19 MMX extension instructions; and 52 additional SSE instructions for complete SSE1 compatibility).<ref>{{cite web
|url=https://www.amd.com/us-en/Processors/SellAMDProducts/0,,30_177_4458_3505%5E3785%5E3738,00.html
|url=https://www.amd.com/us-en/Processors/SellAMDProducts/0,,30_177_4458_3505%5E3785%5E3738,00.html
|title=AMD Athlon XP Architectural Features
|title=AMD Athlon XP Architectural Features
|publisher=[[Advanced Micro Devices, Inc.]]
|publisher=[[Advanced Micro Devices, Inc.]]
|accessdate=2008-06-08}}</ref>
|access-date=2008-06-08
|archive-date=2008-02-25
|archive-url=https://web.archive.org/web/20080225112033/http://www.amd.com/us-en/Processors/SellAMDProducts/0,,30_177_4458_3505%5E3785%5E3738,00.html
|url-status=live
}}</ref>


===3DNow and the Geode GX/LX===
===3DNow! and the Geode GX/LX===
The [[Geode (processor)|Geode GX and Geode LX]] added two new 3DNow instructions which are currently absent in all the other processors.
The [[Geode (processor)|Geode GX and Geode LX]] added two new 3DNow! instructions which is absent in all other processors.


3DNow "professional" instructions unique to the Geode GX/LX are the following:
3DNow! "professional" instructions unique to the Geode GX/LX are the following:
* <code>PFRSQRTV</code>{{snd}} Reciprocal square root approximation for a pair of 32-bit floats
* <code>PFRSQRTV</code>{{snd}} Reciprocal square root approximation for a pair of 32-bit floats
* <code>PFRCPV</code>{{snd}} Reciprocal approximation for a pair of 32-bit floats
* <code>PFRCPV</code>{{snd}} Reciprocal approximation for a pair of 32-bit floats


==Advantages and disadvantages==
==Advantages and disadvantages==
One advantage of 3DNow is that it is possible to add or multiply the two numbers that are stored in the same [[Processor register|register]]. With SSE, each number can only be combined with a number in the same position in another register. This capability, known as ''horizontal'' in Intel terminology, was the major addition to the [[SSE3]] instruction set.
One advantage of 3DNow! is that it is possible to add or multiply the two numbers that are stored in the same [[Processor register|register]]. With SSE, each number can only be combined with a number in the same position in another register. This capability, known as ''horizontal'' in Intel terminology, was the major addition to the [[SSE3]] instruction set.


A disadvantage with 3DNow is that 3DNow instructions and MMX instructions share the same register-file, whereas SSE adds 8 new independent registers (<code>XMM0</code>&ndash;<code>XMM7</code>).
A disadvantage with 3DNow! is that 3DNow! instructions and MMX instructions share the same register-file, whereas SSE adds 8 new independent registers (<code>XMM0</code>&ndash;<code>XMM7</code>).


Because MMX/3DNow registers are shared by the standard [[x87]] FPU, 3DNow instructions and x87 instructions cannot be executed simultaneously. However, because it is aliased to the x87 FPU, the 3DNow and MMX register states can be saved and restored by the traditional x87 <code>F(N)SAVE</code> and <code>F(N)RSTOR</code> instructions. This arrangement allowed [[operating system]]s to support 3DNow with no explicit modifications, whereas SSE registers required explicit operating system support to properly save and restore the new XMM registers (via the added <code>FXSAVE</code> and <code>FXRSTOR</code> instructions.)
Because MMX/3DNow! registers are shared by the standard [[x87]] FPU, 3DNow! instructions and x87 instructions cannot be executed simultaneously. However, because it is aliased to the x87 FPU, the 3DNow! and MMX register states can be saved and restored by the traditional x87 <code>F(N)SAVE</code> and <code>F(N)RSTOR</code> instructions. This arrangement allowed [[operating system]]s to support 3DNow! with no explicit modifications, whereas SSE registers required explicit operating system support to properly save and restore the new XMM registers (via the added <code>FXSAVE</code> and <code>FXRSTOR</code> instructions.)


The FX* instructions are an upgrade to the older x87 save and restore instructions because these could save not only SSE register states but also those x87 register states (hence which meant that it could save MMX and 3DNow registers too).
The FX* instructions from SSE provide a functional superset of the older x87 save and restore instructions. They can save not only SSE register states but also the x87 register states (hence are applicable also for MMX and 3DNow! operations where supported).


On AMD [[Athlon XP]] and K8-based cores (i.e. [[Athlon 64]]), assembly programmers have noted that it is possible to combine 3DNow and SSE instructions to reduce [[register pressure]], but in practice it is difficult to improve performance due to the instructions executing on shared functional units.<ref>{{cite web|url=https://groups.google.com/group/comp.sys.ibm.pc.hardware.chips/browse_thread/thread/9da2d940c5b69745 |title=3DNow+ vs SSE on Athlon XP - comp.sys.ibm.pc.hardware.chips &#124; Google Groups |publisher=Groups.google.com |date= |accessdate=2010-10-03}}</ref>
On AMD [[Athlon XP]] and K8-based cores (i.e. [[Athlon 64]]), assembly programmers have noted that it is possible to combine 3DNow! and SSE instructions to reduce [[register pressure]], but in practice it is difficult to improve performance due to the instructions executing on shared functional units.<ref>{{cite newsgroup
| title =3DNow+ vs SSE on Athlon XP
| author =Larry Lewis
| date =9 July 2003
| newsgroup =comp.sys.ibm.pc.hardware.chips
| message-id =ad82cd69.0307090931.25391323@posting.google.com
| url =https://groups.google.com/group/comp.sys.ibm.pc.hardware.chips/browse_thread/thread/9da2d940c5b69745
| url-access=subscription
| access-date = 4 January 2023
| archive-url=https://web.archive.org/web/20121003002542/https://groups.google.com/group/comp.sys.ibm.pc.hardware.chips/browse_thread/thread/9da2d940c5b69745
| archive-date=2012-10-03
| via=Google Groups}}</ref>


==Processors supporting 3DNow==
==Processors supporting 3DNow!==
* All [[AMD]] processors after [[K6-2]] (based on K6), Athlon, Athlon 64 and Phenom architecture families.
[[Image:Optimizedfor3DNowlogo.png|right|Optimized for 3DNow]]
* All [[AMD]] processors after [[K6-2]] based on K6, Athlon, Athlon 64 and Phenom architecture families. Not supported in Bulldozer, Bobcat and Zen architecture processors and their derivates.
** Not supported in Bulldozer, Bobcat and Zen architecture processors and their derivates.
* The last [[AMD]] APU processor supporting 3DNow is the A8-3870K
** The last [[AMD]] [[AMD APU|APU]] processor supporting 3DNow! is the A8-3870K, which is based on the [[AMD_APU#K10 architecture (2011): Llano|Llano]] architecture. It is also the only APU with 3DNow! instructions, as the Bobcat and up exclude support for it.
* National Semiconductor [[Geode (processor)|Geode]], later AMD Geode.
* National Semiconductor [[Geode (processor)#Geode_GX2|Geode GX2]], later [[Geode_(processor)#AMD_Geode|AMD Geode]].
* [[VIA C3]] (also known as Cyrix III) "Samuel", "Samuel 2" "Ezra", and "Eden ESP" cores.
* [[VIA C3]] (also known as [[Cyrix III]]) "Samuel", "Samuel 2", "Ezra", and "Eden ESP" cores.
* [[Winchip|IDT Winchip]] 2
* [[WinChip|IDT WinChip]] 2, 3


==References==
==References==
Line 152: Line 183:
==Further reading==
==Further reading==
* Case, Brian (1 June 1998). "3DNow Boosts Non-Intel 3D Performance". ''[[Microprocessor Report]]''.
* Case, Brian (1 June 1998). "3DNow Boosts Non-Intel 3D Performance". ''[[Microprocessor Report]]''.
* Oberman, S.; Favor, G.; Weber, F. (March 1999). [http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=755466 "AMD 3DNow technology: architecture and implementations"]. ''[[IEEE Micro]]''.
* Oberman, S.; Favor, G.; Weber, F. (March 1999). [https://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=755466 "AMD 3DNow technology: architecture and implementations"]. ''[[IEEE Micro]]''.


== External links ==
== External links ==
Line 160: Line 191:
* [https://support.amd.com/TechDocs/22466.pdf AMD Extensions to the 3DNow and MMX Instruction Sets Manual]
* [https://support.amd.com/TechDocs/22466.pdf AMD Extensions to the 3DNow and MMX Instruction Sets Manual]
* [https://support.amd.com/TechDocs/33234H_LX_databook.pdf AMD Geode LX Processors Data Book]
* [https://support.amd.com/TechDocs/33234H_LX_databook.pdf AMD Geode LX Processors Data Book]
* [https://web.archive.org/web/20090121005440/http://www.amd.com/us-en/Processors/SellAMDProducts/0%2C%2C30_177_4458_4513%5E1413%5E2137%2C00.html Explaining the new 3DNow Professional Technology] (archived)


{{AMD technology}}
{{AMD technology}}
{{Multimedia extensions}}
{{Multimedia extensions}}


[[Category:Advanced Micro Devices technologies]]
[[Category:AMD technologies]]
[[Category:SIMD computing]]
[[Category:SIMD computing]]
[[Category:X86 architecture]]
[[Category:X86 architecture]]

Latest revision as of 23:50, 4 September 2024

3DNow!
Design firmAdvanced Micro Devices
Introduced1998
Typeinstruction set architecture

3DNow! is a deprecated extension to the x86 instruction set developed by Advanced Micro Devices (AMD). It adds single instruction multiple data (SIMD) instructions to the base x86 instruction set, enabling it to perform vector processing of floating-point vector operations using vector registers. This improvement enhances the performance of many graphics-intensive applications. The first microprocessor to implement 3DNow! was the AMD K6-2, introduced in 1998. In appropriate applications, this enhancement raised the speed by about 2–4 times.[1]

However, the instruction set never gained much popularity, and AMD announced in August 2010 that support for 3DNow! would be dropped in future AMD processors, except for two instructions, PREFETCH and PREFETCHW.[2] These two instructions are also available in Bay-Trail Intel processors.[3]

History

[edit]

3DNow! was developed at a time when 3D graphics were becoming mainstream in PC multimedia and games. Realtime display of 3D graphics depended heavily on the host CPU's floating-point unit (FPU) to perform floating-point calculations, a task in which AMD's K6 processor was easily outperformed by its competitor, the Intel Pentium II.

As an enhancement to the MMX instruction set, the 3DNow! instruction-set augmented the MMX SIMD registers to support common arithmetic operations (add/subtract/multiply) on single-precision (32-bit) floating-point data. Software written to use AMD's 3DNow! instead of the slower x87 FPU could execute up to four times faster, depending on the instruction mix.

Versions

[edit]

3DNow!

[edit]

The first implementation of 3DNow! technology contains 21 new instructions that support SIMD floating-point operations. The 3DNow! data format is packed, single-precision, floating-point. The 3DNow! instruction set also includes operations for SIMD integer operations, data prefetch, and faster MMX-to-floating-point switching. Later, Intel would add similar (but incompatible) instructions to the Pentium III, known as SSE (Streaming SIMD Extensions).

3DNow! floating-point instructions are the following:

  • PI2FD – Packed 32-bit integer to floating-point conversion
  • PF2ID – Packed floating-point to 32-bit integer conversion
  • PFCMPGE – Packed floating-point comparison, greater or equal
  • PFCMPGT – Packed floating-point comparison, greater
  • PFCMPEQ – Packed floating-point comparison, equal
  • PFACC – Packed floating-point accumulate
  • PFADD – Packed floating-point addition
  • PFSUB – Packed floating-point subtraction
  • PFSUBR – Packed floating-point reverse subtraction
  • PFMIN – Packed floating-point minimum
  • PFMAX – Packed floating-point maximum
  • PFMUL – Packed floating-point multiplication
  • PFRCP – Packed floating-point reciprocal approximation
  • PFRSQRT – Packed floating-point reciprocal square root approximation
  • PFRCPIT1 – Packed floating-point reciprocal, first iteration step
  • PFRSQIT1 – Packed floating-point reciprocal square root, first iteration step
  • PFRCPIT2 – Packed floating-point reciprocal/reciprocal square root, second iteration step

3DNow! integer instructions are the following:

  • PAVGUSB – Packed 8-bit unsigned integer averaging
  • PMULHRW – Packed 16-bit integer multiply with rounding

3DNow! performance-enhancement instructions are the following:

  • FEMMS – Faster entry/exit of the MMX or floating-point state
  • PREFETCH/PREFETCHW – Prefetch at least a 32-byte line into L1 data cache (this is the only non-deprecated instruction)

3DNow! extensions

[edit]

There is little or no evidence that the second version of 3DNow! was ever officially given its own trade name. This has led to some confusion in documentation that refers to this new instruction set. The most common terms are Extended 3DNow!, Enhanced 3DNow! and 3DNow!+. The phrase "Enhanced 3DNow!" can be found in a few locations on the AMD website but the capitalization of "Enhanced" appears to be either purely grammatical or used for emphasis on processors that may or may not have these extensions (the most notable of which references a benchmark page for the K6-III-P that does not have these extensions).[4][5]

This extension to the 3DNow! instruction set was introduced with the first-generation Athlon processors. The Athlon added five new 3DNow! instructions and 19 new MMX instructions. Later, the K6-2+ and K6-III+ (both targeted at the mobile market) included the five new 3DNow! instructions, leaving out the 19 new MMX instructions. The new 3DNow! instructions were added to boost DSP. The new MMX instructions were added to boost streaming media.

The 19 new MMX instructions are a subset of Intel's SSE instruction set. In AMD technical manuals, AMD segregates these instructions apart from the 3DNow! extensions.[4] In AMD customer product literature, however, this segregation is less clear where the benefits of all 24 new instructions are credited to enhanced 3DNow! technology.[6] This has led programmers to come up with their own name for the 19 new MMX instructions. The most common appears to be Integer SSE (ISSE).[7] SSEMMX and MMX2 are also found in video filter documentation from the public domain sector. ISSE could also refer to Internet SSE, an early name for SSE.

3DNow! extension DSP instructions are the following:

  • PF2IW – Packed floating-point to integer word conversion with sign extend
  • PI2FW – Packed integer word to floating-point conversion
  • PFNACC – Packed floating-point negative accumulate
  • PFPNACC – Packed floating-point mixed positive-negative accumulate
  • PSWAPD – Packed swap doubleword

MMX extension instructions (Integer SSE) are the following:

  • MASKMOVQ – Streaming (cache bypass) store using byte mask
  • MOVNTQ – Streaming (cache bypass) store
  • PAVGB – Packed average of unsigned byte
  • PAVGW – Packed average of unsigned word
  • PMAXSW – Packed maximum signed word
  • PMAXUB – Packed maximum unsigned byte
  • PMINSW – Packed minimum signed word
  • PMINUB – Packed minimum unsigned byte
  • PMULHUW – Packed multiply high unsigned word
  • PSADBW – Packed sum of absolute byte differences
  • PSHUFW – Packed shuffle word
  • PEXTRW – Extract word into integer register
  • PINSRW – Insert word from integer register
  • PMOVMSKB – Move byte mask to integer register
  • PREFETCHNTA – Prefetch using the NTA reference
  • PREFETCHT0 – Prefetch using the T0 reference
  • PREFETCHT1 – Prefetch using the T1 reference
  • PREFETCHT2 – Prefetch using the T2 reference
  • SFENCE – Store fence

3DNow! Professional

[edit]

3DNow! Professional is a trade name used to indicate processors that combine 3DNow! technology with a complete SSE instructions set (such as SSE, SSE2 or SSE3).[8] The Athlon XP was the first processor to carry the 3DNow! Professional trade name, and was the first product in the Athlon family to support the complete SSE instruction set (for the total of: 21 original 3DNow! instructions; five 3DNow! extension DSP instructions; 19 MMX extension instructions; and 52 additional SSE instructions for complete SSE compatibility).[9]

3DNow! and the Geode GX/LX

[edit]

The Geode GX and Geode LX added two new 3DNow! instructions which is absent in all other processors.

3DNow! "professional" instructions unique to the Geode GX/LX are the following:

  • PFRSQRTV – Reciprocal square root approximation for a pair of 32-bit floats
  • PFRCPV – Reciprocal approximation for a pair of 32-bit floats

Advantages and disadvantages

[edit]

One advantage of 3DNow! is that it is possible to add or multiply the two numbers that are stored in the same register. With SSE, each number can only be combined with a number in the same position in another register. This capability, known as horizontal in Intel terminology, was the major addition to the SSE3 instruction set.

A disadvantage with 3DNow! is that 3DNow! instructions and MMX instructions share the same register-file, whereas SSE adds 8 new independent registers (XMM0XMM7).

Because MMX/3DNow! registers are shared by the standard x87 FPU, 3DNow! instructions and x87 instructions cannot be executed simultaneously. However, because it is aliased to the x87 FPU, the 3DNow! and MMX register states can be saved and restored by the traditional x87 F(N)SAVE and F(N)RSTOR instructions. This arrangement allowed operating systems to support 3DNow! with no explicit modifications, whereas SSE registers required explicit operating system support to properly save and restore the new XMM registers (via the added FXSAVE and FXRSTOR instructions.)

The FX* instructions from SSE provide a functional superset of the older x87 save and restore instructions. They can save not only SSE register states but also the x87 register states (hence are applicable also for MMX and 3DNow! operations where supported).

On AMD Athlon XP and K8-based cores (i.e. Athlon 64), assembly programmers have noted that it is possible to combine 3DNow! and SSE instructions to reduce register pressure, but in practice it is difficult to improve performance due to the instructions executing on shared functional units.[10]

Processors supporting 3DNow!

[edit]
  • All AMD processors after K6-2 (based on K6), Athlon, Athlon 64 and Phenom architecture families.
    • Not supported in Bulldozer, Bobcat and Zen architecture processors and their derivates.
    • The last AMD APU processor supporting 3DNow! is the A8-3870K, which is based on the Llano architecture. It is also the only APU with 3DNow! instructions, as the Bobcat and up exclude support for it.
  • National Semiconductor Geode GX2, later AMD Geode.
  • VIA C3 (also known as Cyrix III) "Samuel", "Samuel 2", "Ezra", and "Eden ESP" cores.
  • IDT WinChip 2, 3

References

[edit]
  1. ^ "Effectively Utilizing 3DNow in Linux". Linux Journal. December 1, 1999. Archived from the original on 2011-06-07. Retrieved 2010-10-03.
  2. ^ "3DNow Instructions are Being Deprecated | AMD Developer Central". Blogs.amd.com. 2010-08-18. Archived from the original on 2010-10-24. Retrieved 2010-10-03.
  3. ^ "IntelE38xx - MinnowBoard Wiki". Archived from the original on 11 February 2017. Retrieved 13 February 2017.
  4. ^ a b "AMD Extensions to the 3DNow and MMX Instruction Sets Manual" (PDF). Advanced Micro Devices, Inc. March 2000. Archived (PDF) from the original on 2008-05-17. Retrieved 2008-06-07.
  5. ^ "Mobile AMD-K6-III-P Processor-Based Notebook: Ziff-Davis CPUmark 99". Archived from the original on 2008-07-24. Retrieved 2008-06-07. Incorrect title on page: Mobile AMD-K6-III+ and Mobile AMD-K6-2+ Processors with Enchanced [sic] 3DNow! Technology
  6. ^ "AMD Athlon Processor Product Brief". Advanced Micro Devices, Inc. Archived from the original on 2008-02-25. Retrieved 2008-06-08.
  7. ^ "ISSE". AviSynth. Archived from the original on 2017-07-02. Retrieved 2017-07-19.
  8. ^ "Explaining the new 3DNow! Professional Technology". Advanced Micro Devices, Inc. Archived from the original on 2009-01-21. Retrieved 2008-06-08.
  9. ^ "AMD Athlon XP Architectural Features". Advanced Micro Devices, Inc. Archived from the original on 2008-02-25. Retrieved 2008-06-08.
  10. ^ Larry Lewis (9 July 2003). "3DNow+ vs SSE on Athlon XP". Newsgroupcomp.sys.ibm.pc.hardware.chips. Usenet: ad82cd69.0307090931.25391323@posting.google.com. Archived from the original on 2012-10-03. Retrieved 4 January 2023 – via Google Groups.

Further reading

[edit]
[edit]