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ő.
Története 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.
Változatai
3DNow! 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.
A 3DNow! lebegőpontos utasításai
PI2FD – csomagolt 32 bites egész szám konvertálása lebegőpontosra PF2ID – csomagolt lebegőpontos konvertálása 32 bites egészre PFCMPGE – csomagolt lebegőpontos összehasonlítás, nagyobb vagy egyenlő PFCMPGT – csomagolt lebegőpontos összehasonlítás, nagyobb PFCMPEQ – csomagolt lebegőpontos összehasonlítás, egyenlő PFACC – csomagolt lebegőpontos akkumulálás PFADD – csomagolt lebegőpontos összeadás PFSUB – csomagolt lebegőpontos kivonás PFSUBR – csomagolt lebegőpontos fordított kivonás PFMIN – csomagolt lebegőpontos minimum PFMAX – csomagolt lebegőpontos maximum PFMUL – csomagolt lebegőpontos szorzás PFRCP – 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és PFRSQIT1 – csomagolt lebegőpontos reciprok négyzetgyök, első iterációs lépés PFRCPIT2 – csomagolt lebegőpontos reciprok/reciprok négyzetgyök, második iterációs lépés
A 3DNow! fixpontos utasításai PAVGUSB – csomagolt 8 bites előjel nélküli egész átlagolás PMULHRW – csomagolt 16 bites egész/fixpontos szorzás kerekítéssel
A 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ött PREFETCH/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)
3DNow! kiterjesztések 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.
A 3DNow! kiterjesztés DSP utasításai PF2IW – csomagolt lebegőpontos egész szóba konvertálás előjelkiterjesztéssel PI2FW – csomagolt egész szóból lebegőpontosra konvertálás PFNACC – csomagolt lebegőpontos negatív akkumuláció (összegzés) PFPNACC – csomagolt lebegőpontos vegyes pozitív-negatív összegzés PSWAPD – csomagolt duplaszó csere
Az MMX kiterjesztés utasításai (Integer SSE)
MASKMOVQ – streaming tárolás (gyorsítótár-elkerülés) bájtmaszk használatával MOVNTQ – streaming tárolás (gyorsítótár-elkerülés) PAVGB – csomagolt előjel nélküli bájtok átlaga PAVGW – csomagolt előjel nélküli szavak átlaga PMAXSW – csomagolt maximum előjeles szavakból PMAXUB – csomagolt maximum előjel nélküli bájt PMINSW – csomagolt minimum előjeles szavakból PMINUB – csomagolt minimum előjel nélküli bájt PMULHUW – csomagolt előjel nélküli szó magas helyiértékű szorzás PSADBW – csomagolt abszolút bájtkülönbségek összege PSHUFW – csomagolt szavak keverése PEXTRW – szó kinyerése egész regiszterbe PINSRW – szó beillesztése egész regiszterből PMOVMSKB – mozgatás bájtmaszk szerint egész regiszterbe PREFETCHNTA – előbetöltés NTA-referencia használatával PREFETCHT0 – előbetöltés T0-referencia használatával PREFETCHT1 – előbetöltés T1-referencia használatával PREFETCHT2 – előbetöltés T2-referencia használatával SFENCE – tárolási memóriakorlát (fence)
3DNow! Professional 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).
3DNow! és a Geode GX/LX 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ámra PFRCPV – reciprok approximáció két 32 bites lebegőpontos számra
Előnyök és hátrányok A 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.
A 3DNow!-t támogató processzorok Minden AMD processzor az K6-2 után (K6 alapon), az Athlon, Athlon 64 és Phenom architektúracsaládok Nem támogatott a Bulldozer, Bobcat és Zen architektúrájú processzorokon és azok származékain. Az utolsó AMD APU processzor, amely támogatja a 3DNow!-t, az A8-3870K, amely a Llano architektúrán alapul. Ez egyben az egyetlen 3DNow! utasításokat támogató APU is, mivel a Bobcat és az azt követő generációk már nem támogatják ezt a kiterjesztést. National Semiconductor Geode GX2, később az AMD Geode VIA C3 (más néven Cyrix III) „Samuel”, „Samuel 2”, „Ezra”, és „Eden ESP” magok IDT WinChip 2, 3 Transmeta Corporation: Crusoe és Efficeon: MMX, 3DNow!, 3DNow! Enhanced
Jegyzetek
Fordítás
Források További információk Case, Brian (1 June 1998). "3DNow Boosts Non-Intel 3D Performance". Microprocessor Report. Oberman, S.; Favor, G.; Weber, F. (1999. március). "AMD 3DNow technology: architecture and implementations". IEEE Micro.
3DNow Technology Partners, archived from the original (2001 elején eltávolítva az AMD weboldaláról) AMD 3DNow Instruction Porting Guide (PDF), archived from the original (2014-ben eltávolítva az AMD weboldaláról) 3DNow Technology Manual AMD Extensions to the 3DNow and MMX Instruction Sets Manual AMD Geode LX Processors Data Book AMD 3DNow! SDK March 1999, archív
Kapcsolódó szócikkek
SIMD MMX, SSE
Kategória:AMD Kategória:Párhuzamos számítástechnika Kategória:Utasításkészlet-architektúrák Kategória:Mikroprocesszorok