Jan Nekvapil jan.nekvapil@tiscali.cz ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická
Motivace MMX, EMMX, MMX+ 3DNow!, 3DNow!+ SSE SSE2 SSE3 SSSE3 SSE4.2 Závěr 2
Efektivní práce s vektory a maticemi Vektorová grafika (Hry), DSP, vědecké aplikace SIMD Single Instruction Multiple Data Datový typ Packed Vektor proměnných jednoho typu v jediném registru 3
MMX = MultiMedia extension, (Matrix Math extension, atd ) Představeno Intelem v roce 1997 8 registrů Označení MMx (MM0 - MM7) Velikost 64bit Datové typy 1 x 64bit quad word 2 x 32bit signed/unsigned integer 4 x 16bit signed/unsigned short 8 x 8bit byte Mapované na datové registry FPU Používá stavový registr FPU Pracuje pouze s celočíselnými typy 4
57 nových instrukcí Rozlišení od instrukcí x86 prefixem p a postfixem q, d, w nebo b podle typu operandu Aritmetické instrukce Znaménková/neznaménková aritmetika, saturovaná aritmetika Logické instrukce XOR, OR, AND, NAND Posuny, rotace Doprava/doleva, Logické/aritmetické Porovnání =, > Data packing Přesuny a konverze dat Přesun dat Mezi registry, mezi pamětí a registry Správa stavového registru Instrukce EMMS - vyčistí stavy FPU registrů 5
EMMX = Extended MMX Rozšíření MMX od Cyrixu, rok 1997 12 nových instrukcí Instrukce s implicitním cílovým registrem Přesun dat Podmíněné přesuny dat Aritmetické operace Průměr Násobení se zaokrouhlením 6
Rozšíření MMX od AMD, rok 1999 18 nových instrukcí Správa cache Vynucení/obejití zápisu do L1 a L2 cache mikroprocesoru Přesun dat Podmíněné přesuny dat, PSHUFW Řízené vložení/vyjmutí dat Aritmetické operace Minimum, maximum, průměr, suma absolutních diferencí 7
Výhody Zrychlení programu Nevýhody Pouze celočíselná aritmetika => omezené použití Chybí horizontální aritmetické instrukce Chybí významné aritmetické instrukce (min, max, ) Chybí podpora práce s cache (originální MMX) Nepodporuje konstanty Sdílí datové registry a stavový registr s FPU Pouze 8 datových registrů Zastaralé Hardwarová podpora Téměř vše od Pentium MMX dále (Intel, AMD, Cyrix) 8
Rozšíření sady MMX od AMD Představeno v roce 1998 Používá registry MMX Nový datový typ 2 x 32bit float Obsahuje horizontální i vertikální aritmetické instrukce 9
21 nových instrukcí Prefixem p se většina instrukcí liší od FPU instrukcí Aritmetické instrukce v plovoucí řádové čárce PFADD, PFACC, PFSUB, PFSUBR, PFMUL, PFMIN, PFMAX PFRCP, PFRSQRT základní přesnost (14 15 bitů) PFRCPIT1, PFRCPIT2, PFRSQRTIT1 rozšířená přesnost (další kroky Newton-Raphstonovy iterace) Porovnání =, >=, > pro typ 2 x 32bit float Správa cache Celočíselná aritmetika Násobení se zaokrouhlením, zaokrouhlený průměr Konverze dat Převod mezi 32bit integer a 32bit float Správa stavového registru Instrukce FEMMS, rychlá varianta EMMS 10
Známé také jako: 3DNow!2 3DNow! Professional 3DNow!ext Rozšíření 3DNow! od AMD z roku 1999 5 nových instrukcí Konverze dat Převod mezi 16bit integer a 32bit float Uložení s výměnou floatů Horizontální aritmetické instrukce PFNACC, PFPNACC 11
Výhody Zrychlení hlavně v oblasti vektorové grafiky Nevýhody Sdílí datové registry a stavový registr s FPU Nízká přesnost (nevhodné pro vědecké aplikace) Nepodporuje konstanty Pouze 8 datových registrů Zastaralé Hardwarová podpora K6-2 a novější (3DNow!) K6-2+ a novější (3DNow!+) 12
SSE = Streaming SIMD Extension Představeno Intelem v roce 1999 8 nových registrů XMMx (XMM0 XMM7) Velikost 128bit Datové typy 1 x 128bit 4 x 32bit float Nový 32bit stavový registr MXCSR Využívá se jen spodních 16 bitů 70 nových instrukcí Nové operace v plovoucí řádové čárce (pouze s XMMx registry) Rozšíření MMX (celočíselné operace) Použití SSE musí podporovat operační systém Práce v Extended modu Podpora instrukcí FXSAVE a FXRSTOR 13
Postfix ss - Scalar Single Floating Point Postfix ps - Packed Single Floating Point Aritmetické v plovoucí řádové čárce +, -, *, /, min, max sqrt, 1/sqrt, rcp plná přesnost Aritmetické celočíselné min, max, průměr Porovnání =,!=, >, <, >=, <= Správa cache Logické Formátování dat, konverze, přenosy dat 14
Výhody Zrychlení hlavně v oblasti vektorové grafiky Může pracovat paralelně s FPU (kromě Pentium III) Nevýhody Efektivně načítá/ukládá jen data na adresách zarovnaných na 16 bytů Nepodporuje celočíselné typy, nepodporuje konstanty Pouze 8 registrů Chybí horizontální aritmetické instrukce (špatná implementace na Intel Pentium III) Hardwarová podpora Pentium III Athlon XP 15
Rozšíření sady SSE Intel, rok 2001 144 nových instrukcí Nové datové typy 2 x 64bit double 2 x 64bit signed/unsigned long long 4 x 32bit signed/unsigned int 8 x 16bit signed/unsigned 16 x 8bit byte Je standardně implementována na všech AMD a Intel x86-64 procesorech Rozšíření počtu XMMx registrů na 16 16
Implementuje MMX instrukce pro celočíselné SSE2 packed typy Implementuje SSE float instrukce pro SSE2 typ packed double Postfix sd - Scalar Double Floating Point Postfix pd - Packed Double Floating Point Formátování dat, konverze, přenosy dat Instrukce pro práci s cache CLFLUSH nemusí být podporována 17
Výhody Podporuje všechny standardně používané datové typy Nevýhody Chybí horizontální aritmetické instrukce Další viz. SSE Hardwarová podpora AMD architektura K8 (Athlon 64, Sempron, Turion 64, atd.) Intel architektura NetBurst (Pentium 4, Xeon, Celeron, atd.) Intel Pentium M, Celeron M Intel architektura Core (Core Duo, Core Solo, atd.) Intel architektura Core 2 (Core 2 Duo, Core 2 Quad, atd.) Transmeta Efficeon Via C7 18
Rozšíření SSE, SSE2 Intel, rok 2004 13 nových instrukcí Horizontální aritmetické instrukce pro typ packed float a packed double Instrukce pro komplexní aritmetiku FISTTP Rychlý převod 32bit float na 32bit int LDDQU Efektivní načtení dat z adresy nezarovnané na 16bytů Komprese videa Zrychlení na NetBurst architektuře MONITOR, NWAIT Podpora Hyper-Threading Neimplementováno na AMD procesorech 19
SSSE3 = Supplemental Streaming SIMD Extension 3 Rozšíření MMX a SSE2 2 x 16 nových instrukcí Horizontální aritmetické instrukce pro celočíselné packed typy Hardwarová podpora Intel Xeon 5100 Intel Core Duo 2 20
Intel, ( rok 2008, Intel Core 2 Duo? ) 54 instrukcí Podmíněné přesuny a vkládání Rozšíření znaménka Převod 32bit float na 32bit integer se zaokrouhlením Podle standardu jazyka C, Java nebo Fortran Porovnávání textových řetězců Výpočet CRC32 Zjištění počtu 1 bitů v registru Pokročilá TEST instrukce Výpočet sumy absolutních diferencí dvou 8 x byte vektorů HDTV kódování Pokročilé čtení z paměti a periferií Skalární součin 21
V současné době jsou perspektivní pouze instrukční sady SSE. Výhody Zrychlení programu 2-16x nebo i více Nevýhody Neefektivní načítáním dat z adresy nezarovnané na 16bytů Neefektivní načítání a zpracování jiného počtu prvků než je násobek prvků v daném packed typu Nedokonalá podpora ze strany kompilátorů Nepodporované staršími mikroprocesory 22
Dotazy? jan.nekvapil@tiscali.cz Použitá literatura softpixel.com www.wikipedia.org www.cpuid.com www.hayestechnologies.com 23