jan nekvapil jan.nekvapil@tiscali -...
TRANSCRIPT
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 packedtypy
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 packeddouble
◦ 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?
Použitá literatura
◦ softpixel.com
◦ www.wikipedia.org
◦ www.cpuid.com
◦ www.hayestechnologies.com
23