Jan Nekvapil
[email protected]
Č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 2 4 8
x x x x
64bit quad word 32bit signed/unsigned integer 16bit signed/unsigned short 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 2 x 64bit 4 x 32bit 8 x 16bit 16 x 8bit
double signed/unsigned long long signed/unsigned int signed/unsigned 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?
[email protected]
Použitá literatura ◦ ◦ ◦ ◦
softpixel.com www.wikipedia.org www.cpuid.com www.hayestechnologies.com
23