programov n v asembleru fpu a spol n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Programování v asembleru – FPU a spol. PowerPoint Presentation
Download Presentation
Programování v asembleru – FPU a spol.

Loading in 2 Seconds...

play fullscreen
1 / 67

Programování v asembleru – FPU a spol. - PowerPoint PPT Presentation


  • 90 Views
  • Uploaded on

Programování v asembleru – FPU a spol. Jakub Yaghob. Ještě jednou historie – FPU. FPU F loating P oint U nit Formát dat i výpočet odpovídá IEEE 754 Koprocesor Nejprve samostatný čip 8086+8087, 80186+80187, 80286+80287, 80386+80387 Integrovaný na čipu s hlavním procesorem

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Programování v asembleru – FPU a spol.' - gunnar


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
je t jednou historie fpu
Ještě jednou historie – FPU
  • FPU
    • Floating Point Unit
      • Formát dat i výpočet odpovídá IEEE 754
    • Koprocesor
      • Nejprve samostatný čip
        • 8086+8087, 80186+80187, 80286+80287, 80386+80387
      • 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
je t jednou historie mmx
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
je t jednou historie sse
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
je t jednou historie sse2
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í
je t jednou historie sse3
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
je t jednou historie sse 4
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
je t jednou historie aesni
Ještě jednou historie –AESNI
  • AESNI
    • AES New Instructions
    • 6 instrukcí pro kódování/dekódování AES
    • PCLMULQDQ – carrylessmultiplicationoftwo 64-bit numbers
je t jednou historie avx
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
je t jednou historie avx2
Ještě jednou historie – AVX2
  • AVX2
    • Přidání velké většiny celočíselných vektorových instrukcí do AVX
    • Haswell
v po etn prost ed fpu ii
Výpočetní prostředí FPU II.
  • Datové registry
    • Zásobník
    • Výpočet v obrácené polské notaci
v po etn prost ed fpu iii
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)
v po etn prost ed fpu iv
Výpočetní prostředí FPU IV.
  • Řídící registr
    • Maska výjimek
    • Řízení přesnosti
      • Ovlivňuje pouze operace +,-,*,/, sqrt
    • Řízení zaokrouhlování
v po etn prost ed fpu v
Výpočetní prostředí FPU V.
  • Značkovací registr
    • Vázáno na fyzické registry
datov typy fpu i
Datové typy FPU I.
  • Numerické typy
    • Odpovídají IEEE 754
    • 32- a 64-bitová čísla mají implicitní celou část mantisy = 1
    • Hodnota = -1Sign* Mantisa * 2Exponent-Posun exponentu
datov typy fpu ii
Datové typy FPU II.
  • Celočíselné typy
datov typy fpu iii
Datové typy FPU III.
  • Nekonečno
    • Numerické
    • Celočíselné = 10...0
  • Další typy hodnot
    • NaN (Not aNumber)
      • Quiet
      • Signaling
    • Nenormalizované číslo
instrukce fpu p esuny
Float

FLD mem

FLD ST(i)

FST, FSTP mem

FST, FSTP ST(i)

FXCH ST(i)

FCMOVcc ST(0),ST(i)

Integer

FILD mem

FIST, FISTP mem

BCD

FBLD mem

FBSTP mem

Instrukce FPU – přesuny
instrukce fpu konstanty
Load +0.0

FLDZ

Load +1.0

FLD1

Load π

FLDPI

Load log2 10

FLDL2T

Load log2 e

FLDL2E

log10 2

FLDLG2

loge 2

FLDLN2

Instrukce FPU – konstanty
instrukce fpu aritmetika
Sčítání

FADD mem

FADD ST(0),ST(i)

FADD ST(i),ST(0)

FADDP ST(i),ST(0)

FIADD mem

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

Instrukce FPU – aritmetika
instrukce fpu porovn n
Float

FCOM/FCOMP mem

FCOM/FCOMP ST(i)

FCOMPP

Float neuspořádané

FUCOM/FUCOMP

FUCOMPP

Integer

FICOM/FICOMP mem

Přímé float

FCOMI/FCOMIP

Přímé float neuspořádané

FUCOMI/FUCOMIP

Ostatní

FTST

FXAM

Instrukce FPU – porovnání
instrukce fpu trigonometrick
sin

FSIN

cos

FCOS

sin a cos

FSINCOS

tg

FPTAN

arctg

FPATAN

Instrukce FPU – trigonometrické
instrukce fpu logaritmick a exponenci ln
Logaritmus y * log2 x

FYL2X

Logaritmus y * log2 x+1

FYL2XP1

Exponent 2x-1

F2XM1

Násobení mocninou 2

FSCALE

Instrukce FPU – logaritmické a exponenciální
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

Instrukce FPU – řídící
porovn n ve fpu i
Porovnání ve FPU – I
  • Tradiční metoda
porovn n ve fpu ii
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)

porovn n ve fpu iii
Porovnání ve FPU – III
  • Unordered porovnání
    • Aspoň jeden NaN
  • Nastavení příznaků
hl en v jimek fpu
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
v po etn prost ed mmx
Výpočetní prostředí MMX
  • Registry jsou sdíleny s FPU
    • Mantisová část registrů
modely aritmetiky mmx
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
instrukce mmx datov p esuny
32-bitů

MOVD mem,mmxr

MOVD mmxr,mem

MOVD r,mmxr

MOVD mmxr,r

64-bitů

MOVQ mem,mmxr

MOVQ mmxr,mem

MOVQ mmxr,mmxr

Instrukce MMX – datové přesuny
instrukce mmx aritmetika
Sčítání

PADDB mmxr,mmxr

PADDB mmxr,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

Instrukce MMX – aritmetika
instrukce mmx porovn n a konverze
Stažení

PACKSSWB, PACKSSDW

PACKUSWB

Rozbalení

PUNPCKHBW

PUNPCKHWD

PUNPCKHDQ

PUNPCKLBW

PUNPCKLWD

PUNPCKLDQ

Porovnání na rovnost

PCMPEQB

PCMPEQW

PCMPEQD

Porovnání na >

PCMPGTB

PCMPGTW

PCMPGTD

Instrukce MMX – porovnání a konverze
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

Instrukce MMX – logické a posuvy, EMMS
p echody mmx a fpu
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
v po etn prost ed sse
Výpočetní prostředí SSE
  • 128-bitové datové registry
  • Intel 64 má navíc 8 registrů XMM8-XMM15
datov typy sse
Datové typy SSE
  • Čtyři „floaty“
instrukce sse i
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í
instrukce sse ii
Instrukce SSE – II
  • Pakované a skalární float operace
    • Přesuny dat
    • Aritmetické instrukce
    • Logické instrukce
    • Porovnání
    • Míchání
    • Konverze
instrukce sse p esuny
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

instrukce sse aritmetick a logick
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

instrukce sse m ch n
Instrukce SSE – míchání
  • Zamíchání podle masky

SHUFPS

  • Proložení

UNPCKHPS

UNPCKLPS

instrukce sse konverze
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
instrukce sse roz en mmx
Instrukce SSE – rozšíření MMX
  • Přesuny

PEXTRW, PINSRW

PMOVMSKB

PSHUFW

  • Aritmetické

PMULHUW

  • Agregační

PAVGB, PMAXUB, PMINUB, PMAXSW, PMINSW, PSADBW

instrukce sse netempor ln data
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
instrukce sse netempor ln p esuny zen cache
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

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

Instrukce SSE – stav
datov typy sse2
Datové typy SSE2
  • 128-bitové celočíselné typy
  • Dva „double“
instrukce sse2
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
instrukce sse2 p esuny
Instrukce SSE2 – přesuny
  • Obdoba instrukcí pro SSE, ale určené pro Packed Double-precision

MOVAPD, MOVUPD

MOVSD

MOVHPD, MOVLPD

MOVMSKPD

instrukce sse2 aritmetick a logick
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

instrukce sse2 m ch n
Instrukce SSE2 – míchání
  • Zamíchání podle masky

SHUFPD

  • Proložení

UNPCKHPD

UNPCKLPD

instrukce sse2 operace v cel ch slech
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

instrukce sse2 caching
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
instrukce sse3
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
instrukce sse3 dal m dy simd operac
Instrukce SSE3 – další módy SIMD operací
  • Asymetrické zpracování
  • Horizontální zpracování
instrukce sse3 i
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
instrukce sse3 ii
Instrukce SSE3 – II
  • Asymetrické operace
    • ADDSUBPS, ADDSUBPD
  • Horizontální operace
    • HADDPS, HSUBPS, HADDPD, HSUBPD
instrukce sse3 synchronizace
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 MONITORem
    • V ECX jsou volitelná rozšíření, v EAX volitelné nápovědy (např. požadovaný stav CPU)
      • Aktuálně není nic definováno
instrukce sse4 1
Instrukce SSE4.1
  • Výpočetní prostředí a stavy procesoru se proti SSE3 nezměnily
  • 2 instrukce pro násobení packeddword
  • 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 dwordpacking
instrukce sse4 2
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
intel aes instruk n sada
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