| 3DNow! | |
| Típus | utasításkészlet-architektúra |
| Fejlesztő | Advanced Micro Devices |
| Forgalomban | 1998–2010 augusztusa |
A 3DNow! az x86 utasításkészlet egy elavult kiterjesztése, amit az Advanced Micro Devices (AMD) fejlesztett. Egy utasítás, több adat (SIMD) típusú utasításokat ad az alapvető x86 utasításkészlethez, lehetővé téve az utasításkészlet szintjén a lebegőpontos vektorműveletekvektoros végrehajtását, vektorregiszterek használatával, tehát hardveres gyorsítást nyújt a grafikában gyakran használt vektoros és skalár műveletekhez. Ez a fejlesztés sok grafikaigényes alkalmazás teljesítményét javította. Az első mikroprocesszor, ami megvalósította a 3DNow! kiterjesztést, az 1998-ban bemutatott AMD K6-2 volt. Megfelelő alkalmazások esetén ez a fejlesztés körülbelül 2–4-szeresére növelte a sebességet.
Az utasításkészlet azonban nem vált túl népszerűvé, és az AMD 2010 augusztusában bejelentette, hogy megszünteti a 3DNow! támogatását, és nem építi be azt a jövőbeli AMD processzorokba, két utasítás: a PREFETCH és PREFETCHW kivételével. Ez a két utasítás az Intel Bay Trail processzoraiban is elérhető.
A 3DNow!-t abban az időszakban fejlesztették ki, mikor a 3D-s grafika széles körben elterjedt a PC-s multimédiában és a játékokban. A 3D-s grafika valós idejű megjelenítése nagymértékben függött a gazda CPU lebegőpontos egységétől (FPU) a lebegőpontos számítások végrehajtásában, és ezen a téren az AMD K6 processzorát könnyedén felülmúlta versenytársa, az Intel Pentium II.
Az MMX utasításkészlet továbbfejlesztéseként, a 3DNow! utasításkészlet kiterjesztette az MMX SIMD-regisztereket a szokásos aritmetikai műveletek támogatásával (összeadás, kivonás, szorzás) egyszeres pontosságú (32 bites) lebegőpontos adatokon. Az AMD 3DNow! utasításait alkalmazó szoftver akár négyszer gyorsabban is futhat, mint a lassabb x87 FPU műveletekkel fordított program, az utasítások összetételétől függően.
A 3DNow! technológia első megvalósítása 21 új utasítást tartalmaz, melyek támogatják SIMD lebegőpontos műveleteket. A 3DNow! adatformátuma csomagolt (tömörített, pakolt) egyszeres pontosságú lebegőpontos. A 3DNow! utasításkészlet SIMD fixpontos műveleteket, adat-előbetöltést, gyorsabb MMX és lebegőpontos mód közötti váltás műveleteket is tartalmaz. Később az Intel hasonló (de inkompatibilis) utasításokat adott hozzá a Pentium III-hoz, ez a kiterjesztés SSE (Streaming SIMD Extensions) néven ismert.
PI2FD – csomagolt 32 bites egész szám konvertálása lebegőpontosraPF2ID – csomagolt lebegőpontos konvertálása 32 bites egészrePFCMPGE – csomagolt lebegőpontos összehasonlítás, nagyobb vagy egyenlőPFCMPGT – csomagolt lebegőpontos összehasonlítás, nagyobbPFCMPEQ – csomagolt lebegőpontos összehasonlítás, egyenlőPFACC – csomagolt lebegőpontos akkumulálásPFADD – csomagolt lebegőpontos összeadásPFSUB – csomagolt lebegőpontos kivonásPFSUBR – csomagolt lebegőpontos fordított kivonásPFMIN – csomagolt lebegőpontos minimumPFMAX – csomagolt lebegőpontos maximumPFMUL – csomagolt lebegőpontos szorzásPFRCP – csomagolt lebegőpontos reciprok közelítés/approximációPFRSQRT – csomagolt lebegőpontos reciprok négyzetgyök közelítés/approximációPFRCPIT1 – csomagolt lebegőpontos reciprok, első iterációs lépésPFRSQIT1 – csomagolt lebegőpontos reciprok négyzetgyök, első iterációs lépésPFRCPIT2 – csomagolt lebegőpontos reciprok/reciprok négyzetgyök, második iterációs lépésPAVGUSB – csomagolt 8 bites előjel nélküli egész átlagolásPMULHRW – csomagolt 16 bites egész/fixpontos szorzás kerekítésselA 3DNow! teljesítménynövelő utasításai:
FEMMS – gyorsabb váltás (be- és kilépés) az MMX és lebegőpontos állapotok közöttPREFETCH/PREFETCHW – legalább egy 32 bájtos sor előbetöltése az L1 adatgyorsítótárba (ez az egyetlen nem elavult utasítás)
Szinte semmi bizonyíték nincs arra, hogy a 3DNow! második verziója valaha is hivatalosan saját márkanevet kapott volna. Ez némi zavart okozott az új utasításkészletre hivatkozó dokumentációkban. A leggyakrabban használt kifejezések az „Extended 3DNow!”, „Enhanced 3DNow!” és a „3DNow!+”. Az „Enhanced 3DNow!” kifejezés néhány helyen megtalálható az AMD weboldalán, de a nagy kezdőbetűs „Enhanced” nem biztos, hogy márkanevet jelöl, lehet egyszerűen nyelvtani oka van, vagy olyan processzorok kiemelésére szolgál, melyek rendelkezhetnek (vagy nem) ezekkel a kiterjesztésekkel (a hivatkozások közül a legérdekesebb egy K6-III-P benchmark oldala, amely éppen nem rendelkezik ezekkel a kiterjesztésekkel).
A 3DNow! utasításkészlet ezen kiterjesztése az első generációs Athlon processzorokban jelent meg. Az Athlon öt új 3DNow! utasítást és 19 új MMX utasítást vezetett be. Később, a K6-2+ és K6-III+ (mindkettő a mobil piacra irányult) tartalmazta az öt új 3DNow! utasítást, kihagyva a 19 új MMX utasítást. Az új 3DNow! utasításokat a digitális jelfeldolgozás (DSP) teljesítményének növelése céljából adták hozzá a készlethez. Az új MMX utasítások a streaming media teljesítményének növelését célozták.
A 19 új MMX utasítás az Intel SSE utasításkészletének egy részhalmaza. Az AMD a műszaki kézikönyveiben elkülöníti ezeket az utasításokat a 3DNow! kiterjesztésektől. Az AMD fogyasztói termékismertetőiben azonban ez az elkülönítés kevésbé egyértelmű, ahol a 24 új utasítás előnyeit a továbbfejlesztett 3DNow! technológia számlájára írják. Ez arra késztette a programozókat, hogy saját nevet találjanak ki a 19 új MMX utasításra. A leggyakoribb az „Integer SSE” („ISSE”). Az „SSEMMX” és „MMX2” megtalálhatók még a közkincs szektor videofilter-dokumentációiban. Az ISSE utalhat az Internet SSE-re is, amely az SSE korai elnevezése volt.
PF2IW – csomagolt lebegőpontos egész szóba konvertálás előjelkiterjesztésselPI2FW – csomagolt egész szóból lebegőpontosra konvertálásPFNACC – csomagolt lebegőpontos negatív akkumuláció (összegzés)PFPNACC – csomagolt lebegőpontos vegyes pozitív-negatív összegzésPSWAPD – csomagolt duplaszó csereMASKMOVQ – streaming tárolás (gyorsítótár-elkerülés) bájtmaszk használatávalMOVNTQ – streaming tárolás (gyorsítótár-elkerülés)PAVGB – csomagolt előjel nélküli bájtok átlagaPAVGW – csomagolt előjel nélküli szavak átlagaPMAXSW – csomagolt maximum előjeles szavakbólPMAXUB – csomagolt maximum előjel nélküli bájtPMINSW – csomagolt minimum előjeles szavakbólPMINUB – csomagolt minimum előjel nélküli bájtPMULHUW – csomagolt előjel nélküli szó magas helyiértékű szorzásPSADBW – csomagolt abszolút bájtkülönbségek összegePSHUFW – csomagolt szavak keverésePEXTRW – szó kinyerése egész regiszterbePINSRW – szó beillesztése egész regiszterbőlPMOVMSKB – mozgatás bájtmaszk szerint egész regiszterbePREFETCHNTA – előbetöltés NTA-referencia használatávalPREFETCHT0 – előbetöltés T0-referencia használatávalPREFETCHT1 – előbetöltés T1-referencia használatávalPREFETCHT2 – előbetöltés T2-referencia használatávalSFENCE – tárolási memóriakorlát (fence)A 3DNow! Professional egy márkanév, amely olyan processzorokat jelöl, melyek a 3DNow! technológiát egy teljes SSE utasításkészlettel kombinálják (például SSE, SSE2 vagy SSE3 változatokkal). Az Athlon XP volt az első processzor, mely a 3DNow! Professional márkanevet viselte, és az Athlon család első olyan terméke volt, mely támogatta a teljes SSE utasításkészletet (összesen: 21 eredeti 3DNow! utasítás; öt 3DNow! kiterjesztés DSP utasítás; 19 utasítás az MMX kiterjesztéshez; és 52 további SSE utasítás a teljes SSE-kompatibilitásnak megfelelően).
A Geode GX és Geode LX két új 3DNow! utasítást vezetett be, melyek hiányoznak az összes többi processzorból.
A Geode GX/LX processzorok egyedi 3DNow! „Professional” utasításai a következők:
PFRSQRTV – reciprok négyzetgyök approximáció két 32 bites lebegőpontos számraPFRCPV – reciprok approximáció két 32 bites lebegőpontos számraA 3DNow! egyik előnye, hogy lehetőséget ad ugyanabban a regiszterben tárolt két szám összeadására vagy szorzására. Az SSE esetében minden számot csak egy másik regiszterben lévő, azonos pozíción elhelyezkedő számmal lehet kombinálni. Ez a képesség, melyet „horizontálisnak” neveznek az Intel terminológiájában, volt a legnagyobb kiegészítés az SSE3 utasításkészletben.
A 3DNow! egyik hátránya az, hogy a 3DNow! és az MMX utasítások ugyanazt a regiszterfájlt használják, míg az SSE 8 új független regisztert (XMM0–XMM7) ad hozzá a készlethez.
Mivel az MMX/3DNow! regisztereket a szabványos x87 FPU is használja, a 3DNow! utasítások és a x87 utasítások nem használhatók egyszerre. Ugyanakkor, mivel a MMX és a 3DNow! regiszterei az x87 FPU átnevezett regiszterei, így a 3DNow! és az MMX regiszterállapotok elmenthetők és visszaállíthatók a hagyományos x87 F(N)SAVE és F(N)RSTOR mentő és visszatöltő utasításokkal. Ez a megoldás lehetővé tette, hogy az operációs rendszerek explicit módosítások nélkül támogassák a 3DNow! technológiát, miközben az SSE regiszterekhez kifejezett operációsrendszer-támogatásra volt szükség az új XMM regiszterek megfelelő mentéséhez és visszaállításához (a hozzáadott FXSAVE és FXRSTOR utasítások segítségével.)
Az SSE FX* utasításai a régebbi x87 mentési és visszaállítási utasítások funkcionális kiterjesztését nyújtják. Képesek elmenteni nemcsak az SSE regiszterek állapotát, hanem az x87 regiszterek állapotát is (ezért támogatott esetben az MMX- és 3DNow!-műveletekre egyaránt alkalmazhatók).
Az AMD Athlon XP és a K8 alapú magok (azaz Athlon 64) esetén az assembly-programozók észrevették, hogy a 3DNow! és az SSE utasítások kombinálásával lehetséges a regiszter-terheltség (avagy regiszterigény) csökkentése; a gyakorlatban azonban nehéz javítani a teljesítményen, mivel az utasítások megosztott funkcionális egységeken futnak.
{{cite web}}: CS1 karbantartás: numerikus név: szerzőfelsorolás (link){{cite web}}: |archive-date= / |archive-url= timestamp mismatch; 2013. november 9. suggested (súgó){{cite web}}: Check date values in: |date= (súgó)Az oldalon hiba van a címben: Mobile AMD-K6-III+ and Mobile AMD-K6-2+ Processors with Enchanced(sic!) 3DNow! Technology
Ez a szócikk részben vagy egészben a(z) 3DNow! című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.