3DNow!

**3DNow!** er en IA-32 SIMD multimedia-utvidelse i AMDs prosessorer, som ble lansert sammen med AMD K6-2 i 1998. 3DNow! er en tilføyelse av SIMD-instruksjoner i den tradisjonelle x86-arkitekturen, som forbedrer prosessorens ytelse under utføring av vektorprosessering i grafikk-krevende programmer.

## Historie
3DNow! ble utviklet som en forbedring og konkurrent til MMX. Mens MMX bare arbeidet med heltalls-beregninger kunne 3DNow! også akselerere grafiske operasjoner basert på desimaltalls-beregninger.

Dette var strategisk viktig for AMD, ettersom Intel Pentium II var raskere enn AMD K6 til å utføre intensiv desimaltalls-matematikk. 3DNow! ble lansert på en tid da tredimensjonal grafikk eksploderte i popularitet innenfor videospill som i stor grad var avhengig av desimaltalls-beregninger.

## Oversikt
3DNow! består av 21 nye instruksjoner for SIMD desimaltall- og heltallsberegninger, *data prefetch* og raskere svitsjing mellom MMX og desimaltall. Sammen med Intel Pentium III, lanserte Intel i 1999 det lignende (men inkompatible) instruksjonssettet Streaming SIMD Extensions (SSE).

## Videreutvikling
AMD videreutviklet 3DNow! over tid. AMD K6-III, lansert i 1999, tilføyde fem nye DSP-instruksjoner, men ikke de 19 nye MMX-instruksjonene. Ved lanseringen av Athlon-prosessoren i 1999, ble det tilføyd 24 nye instruksjoner som delvis implementerte SSE og utførte *prefetch* av instruksjoner. AMD kalte denne forbedringen for henholdsvis **Enhanced 3DNow!**, **Extended 3DNow!** og **3DNow!+**.

AMD Athlon XP, lansert i 2001, hadde full støtte for både SSE og *Enhanced 3DNow!*. Denne forbedringen ble kalt **3DNow! Professional**.

På system on a chip-serien AMD Geode (2003) ble det tilføyd to nye instruksjoner – `PFRSQRTV` (innbyrdes kvadratrot-avrunding av to 32-bit desimaltall) og `PFRCPV` (innbyrdes avrunding av to 32-bit desimaltall), som ikke er blitt implementert i noen annen mikroprosessor.

## Fordeler og ulemper
En fordel med 3DNow! er at to tall kan adderes eller multipliseres i et og samme register, mens SSE bruker to registre til samme operasjon. Denne egenskapen ved 3DNow!, kalt «horisontal» av Intel, ble senere tilføyd SSE3.

En ulempe med 3DNow!, sammenlignet med SSE, er at 3DNow! bare kan lagre to tall i et register, mens SSE kan lagre fire tall i et register. Imidlertid har 3DNow!, på grunn av sin kortere latens, høyere båndbredde enn SSE.

På samme måte som MMX deler 3DNow! sine registre med desimaltallsenheten (x87), mens SSE har sine egne, uavhengige registre. Verken 3DNow! eller MMX kan derfor utføres samtidig med desimaltallsenheten, men benytter de tradisjonelle x87 instruksjonene `FNSAVE` og `FRSTR`, for å lagre og gjenopprette registrenes tilstand ved kontekst-skifte. Dette ble gjort for at det ikke skulle bli nødvendig å endre operativsystemene for å dra nytte av 3DNow!.

SSE bruker to nye x86-instruksjoner – `FXSAVE` og `FXRSTR`, til å lagre og gjenopprette registrenes tilstand uavhengig av og parallelt med desimaltalls-enheten. Disse to nye instruksjonene kan også lagre x87-registrenes tilstander, og kan dermed også lagre MMX- og 3DNow!-instruksjoner.

3DNow! og SSE kan kombineres på Athlon XP og AMD K8 i et og samme program, ved å skrive programmet i assembler.

## Avvikling av 3DNow!
I 2010 annonserte AMD at de ikke lenger ville inkludere 3DNow!-instruksjonssettet i fremtidige prosessorer og anbefalte programmerere å avslutte bruken av det.

## Se også
* MMX
* SSE
* SSE2
* SSE3

## Referanser


## Eksterne lenker
*  3DNow! Technology Manual (PDF) hos AMD
*