Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v asembleru – FPU a spol. Jakub Yaghob.

Podobné prezentace


Prezentace na téma: "Programování v asembleru – FPU a spol. Jakub Yaghob."— Transkript prezentace:

1 Programování v asembleru – FPU a spol. Jakub Yaghob

2 Ještě jednou historie – FPU FPU Floating Point Unit Formát dat i výpočet odpovídá IEEE 754 Koprocesor Nejprve samostatný čip  , , , Integrovaný na čipu s hlavním procesorem  i486, Pentium, Pentium Pro, Pentium II, Pentium III, Pentium IV Výpočet probíhá paralelně s výpočtem hlavního procesoru

3 Ještě jednou historie – MMX MMX První pokus o SIMD na IA-32 Prvně implementováno v procesorech Pentium MMX a Pentium II Pouze celočíselné operace Vzájemně se vylučuje s FPU Používá registry FPU AMD odpovědělo technologií 3DNow

4 Ještě jednou historie – SSE SSE Streaming SIMD extensions Implementováno poměrně pozdě Pentium III Vlastní nové registry XMM, MXCSR Operace SIMD ve „float“ přesnosti Instrukce pro řízení cache, prefetch

5 Ještě jednou historie – SSE2 SSE2 Pentium IV Používá registry z SSE Operace SIMD v „double“ přesnosti 128-bitové operace SIMD na celých číslech Instrukce pro řízení cache, pořadí paměťových operací

6 Ještě jednou historie – SSE3 SSE3 Nová generace procesoru Pentium IV (Prescott) a procesory Core Další rozšíření SSE2 Další SIMD operace „Horizontální“ SIMD operace Monitor

7 Ještě jednou historie – SSE4 SSE4 Rozděleno na dvě rozšíření SSE4.1 a SSE4.2 SSE4.1 45nm Core 2 47 nových instrukcí Zlepšení výkonu pro zpracování médií, 3D SSE4.2 Core i7 7 nových instrukcí Zpracování řetězců, aplikační instrukce

8 Ještě jednou historie – AVX AVX Advanced Vector eXtensions Rozšíření SSE registrů na 256 bitů 3-operandový zápis instrukcí ADDPS xmm1,xmm2/m128 VADDPS xmm1,xmm2,xmm3/m128 Většina instrukcí bez omezení na zarovnání Prefix instrukce VEX

9 Výpočetní prostředí FPU I.

10 Výpočetní prostředí FPU II. Datové registry Zásobník Výpočet v obrácené polské notaci

11 Výpočetní prostředí FPU III. Stavový registr Pouze pro čtení Podmínkové příznaky se chovají u různých instrukcí různě ES nastaveno, kdykoliv nějaké xE nastaveno Při SF rozhoduje C1=1 (overflow), C1=0 (underflow)

12 Výpočetní prostředí FPU IV. Řídící registr Maska výjimek Řízení přesnosti Ovlivňuje pouze operace +,-,*,/, sqrt Řízení zaokrouhlování 0024 bitů 01Vyhrazeno 1053 bitů 1164 bitů 00Nejbližší sudý 01K −∞ 10K +∞ 11K 0

13 Výpočetní prostředí FPU V. Značkovací registr Vázáno na fyzické registry

14 Datové typy FPU I. Numerické typy Odpovídají IEEE a 64-bitová čísla mají implicitní celou část mantisy = 1 Hodnota = -1 Sign * Mantisa * 2 Exponent-Posun exponentu

15 Datové typy FPU II. Celočíselné typy

16 Datové typy FPU III. Nekonečno Numerické Celočíselné = Další typy hodnot NaN (Not a Number) Quiet Signaling Nenormalizované číslo

17 Instrukce FPU – přesuny Float FLDmem FLDST(i) FST, FSTPmem FST, FSTPST(i) FXCHST(i) FCMOVccST(0),ST(i) Integer FILDmem FIST, FISTPmem BCD FBLDmem FBSTPmem

18 Instrukce FPU – konstanty Load +0.0 FLDZ Load +1.0 FLD1 Load π FLDPI Load log 2 10 FLDL2T Load log 2 e FLDL2E log 10 2 FLDLG2 log e 2 FLDLN2

19 Instrukce FPU – aritmetika Sčítání FADDmem FADDST(0),ST(i) FADDST(i),ST(0) FADDPST(i),ST(0) FIADDmem Odčítání FSUB/FSUBP FSUBR/FSUBRP FISUB/FISUBR Násobení FMUL/FMULP FIMUL Dělení FDIV/FDIVP FDIVR/FDIVRP FIDIV/FIDIVR Ostatní FABS FCHS FSQRT FPREM, FPREM1 FRNDINT FXTRACT

20 Instrukce FPU – porovnání Float FCOM/FCOMPmem FCOM/FCOMPST(i) FCOMPP Float neuspořádané FUCOM/FUCOMP FUCOMPP Integer FICOM/FICOMPmem Přímé float FCOMI/FCOMIP Přímé float neuspořádané FUCOMI/FUCOMIP Ostatní FTST FXAM

21 Instrukce FPU – trigonometrické sin FSIN cos FCOS sin a cos FSINCOS tg FPTAN arctg FPATAN

22 Instrukce FPU – logaritmické a exponenciální Logaritmus y * log 2 x FYL2X Logaritmus y * log 2 x+1 FYL2XP1 Exponent 2 x -1 F2XM1 Násobení mocninou 2 FSCALE

23 Instrukce FPU – řídící Inicializace FINIT/FNINIT Řídící slovo FLDCW FSTCW/FNSTCW Stavové slovo FSTSW/FNSTSW Výjimky FCLEX/FNCLEX Ukazatel zásobníku FINCSTP/FDECSTP Prostředí FLDENV FSTENV/FNSTENV Stav FRSTOR FSAVE/FNSAVE Ostatní FFREE FNOP WAIT/FWAIT

24 Porovnání ve FPU – I Tradiční metoda

25 Porovnání ve FPU – II Novější metoda Od Pentia Pro Porovnávací instrukce přímo nastavují odpovídající příznaky v EFLAGS jako bezznaménkové porovnání Instrukce pro porovnání: FCOMI, FCOMIP, FUCOMI, FUCOMIP Instrukce pro podmíněný přesun: FCMOVcc ST(0),ST(i)

26 Porovnání ve FPU – III Unordered porovnání Aspoň jeden NaN Nastavení příznaků

27 Hlášení výjimek FPU FPU pracuje paralelně s hlavním proudem instrukcí Kdy se má vyvolat výjímka pro FPU v hlavním proudu? Na další FPU instrukci WAIT/FWAIT Problém s ukládáním dat FPU: kdy je uvidím v hlavním proudu? Od i486 není třeba WAIT/FWAIT

28 Výpočetní prostředí MMX Registry jsou sdíleny s FPU Mantisová část registrů

29 Datové typy MMX

30 SIMD model

31 Modely aritmetiky MMX Wraparound „Normální“ aritmetika, která nekontroluje žádné přetečení Znaménková saturace Při přetečení/podtečení přes znaménkové maximum/minimum je výsledkem znaménkové maximum/minimum Bezznaménková saturace Při přetečení/podtečení přes bezznaménkové maximum/minimum je výsledkem bezznaménkové maximum/minimum

32 Instrukce MMX – datové přesuny 32-bitů MOVDmem,mmxr MOVDmmxr,mem MOVDr,mmxr MOVDmmxr,r 64-bitů MOVQmem,mmxr MOVQmmxr,mem MOVQmmxr,mmxr

33 Instrukce MMX – aritmetika Sčítání PADDBmmxr,mmxr PADDBmmxr,mem PADDW, PADDD PADDSB, PADDSW PADDUSB, PADDUSW Odčítání PSUBB, PSUBW, PSUBD PSUBSB, PSUBSW PSUBUSB, PSUBUSW Násobení PMULL, PMULH Násobení a sečtení PMADDWD

34 Stažení PACKSSWB, PACKSSDW PACKUSWB Rozbalení PUNPCKHBW PUNPCKHWD PUNPCKHDQ PUNPCKLBW PUNPCKLWD PUNPCKLDQ Instrukce MMX – porovnání a konverze Porovnání na rovnost PCMPEQB PCMPEQW PCMPEQD Porovnání na > PCMPGTB PCMPGTW PCMPGTD

35 Instrukce MMX – logické a posuvy, EMMS Logické PAND PANDN POR PXOR Posuvy PSLLW, PSLLD, PSLLQ PSRLW, PSRLD, PSRLQ PSRAW, PSRAD EMMS (Empty MMX state) EMMS

36 Přechody MMX a FPU Přechod FPU→MMX Libovolná instrukce MMX kromě EMMS FPU nastavení: TOP v SW je 0 Tag registr je celý 0 V exponentech registrů jsou 1 Přechod MMX→FPU Použít instrukci EMMS Míchaný kód (volací konvence!) Při použití MMX ve funkci je nutno uložit/obnovit stav FPU

37 Výpočetní prostředí SSE 128-bitové datové registry Intel 64 má navíc 8 registrů XMM8-XMM15

38 Výpočetní prostředí SSE – řídící/stavový registr Stavový i řídící registr MXCSR

39 Datové typy SSE Čtyři „floaty“

40 Instrukce SSE – I Pakované a skalární float operace 64-bitové SIMD celočíselné instrukce Instrukce na řízení stavu Řízení cache, prefetch, pořadí paměťových operací

41 Instrukce SSE – II Pakované a skalární float operace Přesuny dat Aritmetické instrukce Logické instrukce Porovnání Míchání Konverze

42 Instrukce SSE - přesuny Aligned 16B, unaligned MOVAPS, MOVUPS SP skalár MOVSS Low, high 2 SP MOVLPS, MOVHPS Low-high, high-low 2 SP MOVLHPS, MOVHLPS 4 nejvýznamnější bity SP do 4 bitů obecného registru MOVMSKPS

43 Instrukce SSE – aritmetické a logické SIMD aritmetické operace ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, RSQRTPS, MAXPS, MINPS Skalární aritmetické operace ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, RSQRTSS, MAXSS, MINSS Logické operace ANDPS, ANDNPS, ORPS, XORPS Porovnání CMPPS, CMPSS, COMISS, UCOMISS

44 Instrukce SSE – míchání Zamíchání podle masky SHUFPS Proložení UNPCKHPS UNPCKLPS

45 Instrukce SSE – konverze Konverze 2 DW INT↔ 2 PS CVTPI2PS, CVTPS2PI, CVTTPS2PI Viz obrázek později Konverze 1 DW INT↔ skalár PS CVTSI2SS, CVTSS2SI Viz obrázek později

46 Instrukce SSE – rozšíření MMX Přesuny PEXTRW, PINSRW PMOVMSKB PSHUFW Aritmetické PMULHUW Agregační PAVGB, PMAXUB, PMINUB, PMAXSW, PMINSW, PSADBW

47 Instrukce SSE – netemporální data Netemporální data Některé MM operace zapisují data, která nebudou v nejbližší budoucnosti zapotřebí Je třeba zabránit zanesení cache Data se neukládají do cache Pokud jsou v cache, cache-line označena jako oběť Zápis s WC sémantikou Není zaručeno pořadí zápisu, slučování ve WC bufferech

48 Instrukce SSE – netemporální přesuny, řízení cache Netemporální přesuny MOVNTQ, MOVNTPS, MASKMOVQ Řízení přednačítání PREFETCHh h je hint T0 – temporální data do všech úrovní Tx – temporální data do úrovně nejvýše x NTA – netemporální data co nejblíže k CPU bez zanesení cache Pořadí paměťových operací SFENCE

49 Instrukce SSE – stav Práce s MXCSR LDMXCSRmem STMXCSRmem Stav SSE FXSAVE FXRSTOR Zavedeny před SSE v Pentium II jako rychlé uložení/načtení stavu FPU Nejsou součástí SSE Nyní ukládají stav XMM, MXCSR, FPU, MMX

50 Datové typy SSE2 128-bitové celočíselné typy Dva „double“

51 Instrukce SSE2 Pakované a skalární double operace Přesuny dat Aritmetické instrukce Logické instrukce Porovnání Míchání Konverze 64-bitové a 128-bitové celočíselné operace 128-bitové rozšíření stávajících SIMD celočíselných operací MMX a SSE Řízení cache a pořadí paměťových instrukcí Flush-to-Zero flag in MXCSR

52 Instrukce SSE2 – přesuny Obdoba instrukcí pro SSE, ale určené pro Packed Double-precision MOVAPD, MOVUPD MOVSD MOVHPD, MOVLPD MOVMSKPD

53 Instrukce SSE2 – aritmetické a logické SIMD aritmetické operace ADDPD, SUBPD, MULPD, DIVPD, SQRTPD, MAXPD, MINPD Skalární aritmetické operace ADDSD, SUBSD, MULSD, DIVSD, SQRTSD, MAXSD, MINSD Logické operace ANDPD, ANDNPD, ORPD, XORPD Porovnání CMPPD, CMPSD, COMISD, UCOMISD

54 Instrukce SSE2 – míchání Zamíchání podle masky SHUFPD Proložení UNPCKHPD UNPCKLPD

55 Konverze SSE a SSE2

56 Instrukce SSE2 – operace v celých číslech Přesuny 128 bitů (Double Quadword) MOVDQA, MOVDQU Aritmetické operace Packed Quadword PADDQ, PSUBQ, PMULUDQ Míchání, rozbalení PSHUFLW, PSHUFHW, PSHUFD PUNPCKHQDQ, PUNPCKLQDQ Posuny PSSLDQ, PSQLDQ Přesuny MMX↔XMM MOVQ2DQ, MOVDQ2Q

57 Instrukce SSE2 – caching Vyhození řádky cache CLFLUSH Další instrukce pro netemporální uložení MOVNTDQ, MOVNTPD, MOVNTI, MASKMOVDQU Pořadí paměťových operací LFENCE, MFENCE Podpora hyperthreadingu u spin-locků PAUSE Hinty u skoků Statická předpověď úspěšnosti skoku

58 Instrukce SSE3 Výpočetní prostředí a stavy procesoru se proti SSE2 nezměnily Žádné nové datové typy Žádné nové registry 1 instrukce FPU Zrychlení převodu z plovoucí čárky na celé číslo 1 SIMD celočíselná instrukce 128-bitové nezarovnané čtení 9 SIMD instrukcí v plovoucí čárce Zrychlení LOAD/MOVE/DUPLICATE Pakované sčítání a odčítání Horizontální sčítání a odčítání 2 synchronizační instrukce

59 Instrukce SSE3 – další módy SIMD operací Asymetrické zpracování Horizontální zpracování

60 Instrukce SSE3 – I FPU konverze na celé číslo FISTTP Načtení nezarovnaného 128-bitového celého čísla LDDQU Pomnožení MOVSHDUP, MOVSLDUP, MOVDDUP

61 Instrukce SSE3 – II Asymetrické operace ADDSUBPS, ADDSUBPD Horizontální operace HADDPS, HSUBPS, HADDPD, HSUBPD

62 Instrukce SSE3 – synchronizace Instrukce MONITOR a MWAIT Dostupné na EPL=0 Podmíněně dostupné na vyšším EPL MONITOR Nastaví HW monitoring zápisu na adresu udanou v DS:EAX (lze použít segmentové prefixy) Rozsah adres určen implementací, lze zjistit pomocí CPUID V ECX jsou volitelná rozšíření, v EDX volitelná nápověda Aktuálně není nic definováno MWAIT Čeká na zápis na adresu nastavenou MONITOR em V ECX jsou volitelná rozšíření, v EAX volitelné nápovědy (např. požadovaný stav CPU) Aktuálně není nic definováno

63 Instrukce SSE4.1 Výpočetní prostředí a stavy procesoru se proti SSE3 nezměnily 2 instrukce pro násobení packed dword 2 instrukce pro skalární součin 1 instrukce pro čtení streamů 6 instrukcí pro míchání 8 instrukcí pro celočíselné MIN/MAX 4 instrukce s řiditelným zaokrouhlením 7 instrukcí pro přesuny mezi obecnými a XMM registry 12 instrukcí pro konverzi celočíselných typů 1 instrukce pro součet absolutních rozdílů 1 instrukce horizontálního vyhledávání 1 instrukce pro maskované porovnání 1 instrukce pro porovnání qwordů na rovnost 1 instrukce pro dword packing

64 Instrukce SSE4.2 4 instrukce pro zpracování textů PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM Vhodné pro zpracování XML dokumentů 1 instrukce pro porovnání qwordů na > 2 instrukce pro aplikační doménu CRC32, POPCNT

65 Intel AES instrukční sada AES instruction set Zvláštní rozšíření u CPU Intel od roku 2010, nutno identifikovat pomocí CPUID Pracuje s XMM registry Možnost volby AES-128, AES-192, AES-256 Instrukce pro kódování AESENC, AESENCLAST Instrukce pro dekódování AESDEC, AESDECLAST Instrukce pro generování klíčů AESKEYGENASSIST, AESIMC


Stáhnout ppt "Programování v asembleru – FPU a spol. Jakub Yaghob."

Podobné prezentace


Reklamy Google