Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar SSE assembly programozás előadás dr. Robu.

Slides:



Advertisements
Hasonló előadás

Advertisements

Kamarai prezentáció sablon
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
1 Számítógépek felépítése 9. előadás I/O rendszerek.
Weblap szerkesztés HTML oldal felépítése Nyitó tag Záró tag Nyitó tag Záró tag oldalfej tözs.
Erőállóképesség mérése Találjanak teszteket az irodalomban
MATEMATIKA Év eleji felmérés 3. évfolyam
Humánkineziológia szak
Algoritmus és programozás
Mellár János 5. óra Március 12. v
Műveletek logaritmussal
Számítógépek felépítése 3. előadás CPU, utasítás ciklus, címzés
Elektromos mennyiségek mérése
Koordináta transzformációk
Koordináta transzformációk
Analitikus (koordináta) geometriai gyorstalpaló
Utófeszített vasbeton lemez statikai számítása Részletes számítás
Turbo Pascal Változók.
A tételek eljuttatása az iskolákba
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
Elektronikai Áramkörök Tervezése és Megvalósítása
Mérés és adatgyűjtés laboratóriumi gyakorlat Karakterisztikák mérése 1 Makan Gergely, Mingesz Róbert, Nagy Tamás V
Elektronikai Áramkörök Tervezése és Megvalósítása
Csernoch Mária Adatábrázolás Csernoch Mária
Táblázatkezelés a MS Excel segítségével
Ember László XUBUNTU Linux (ami majdnem UBUNTU) Ötödik nekifutás 192 MB RAM és 3 GB HDD erőforrásokkal.
VÁLOGATÁS ISKOLÁNK ÉLETÉBŐL KÉPEKBEN.
Védőgázas hegesztések
1. IS2PRI2 02/96 B.Könyv SIKER A KÖNYVELÉSHEZ. 2. IS2PRI2 02/96 Mi a B.Könyv KönyvelésMérlegEredményAdóAnalitikaForintDevizaKönyvelésMérlegEredményAdóAnalitikaForintDeviza.
3. Szálszinten párhuzamos feldolgozás (TLP)
Mindennap egy ablakot kinyitni és a kellemes meglepetést élvezni.
Szerkezeti elemek teherbírásvizsgálata összetett terhelés esetén:
Sárgarépa piaca hasonlóságelemzéssel Gazdaság- és Társadalomtudományi kar Gazdasági és vidékfejlesztési agrármérnök I. évfolyam Fekete AlexanderKozma Richárd.
NOVÁK TAMÁS Nemzetközi Gazdaságtan
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
Fixpontos, lebegőpontos
Lineáris egyenletrendszerek (Az evolúciótól a megoldáshalmaz szerkezetéig) dr. Szalkai István Pannon Egyetem, Veszprém /' /
dr. Szalkai István Pannon Egyetem, Veszprém
Számítógép architektúra
Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Forráskód szintű optimizálások C-ben Assembly.
MMX assembly programozás
szakmérnök hallgatók számára
Logikai szita Pomothy Judit 9. B.
Logikai szita Izsó Tímea 9.B.
2007. május 22. Debrecen Digitalizálás és elektronikus hozzáférés 1 DEA: a Debreceni Egyetem elektronikus Archívuma Karácsony Gyöngyi DE Egyetemi és Nemzeti.
Tömbök és programozási tételek
Kétdimenziós tömbök Mátrixok
7. Házi feladat megoldása

Analitikus geometria gyorstalpaló
A pneumatika alapjai A pneumatikában alkalmazott építőelemek és működésük vezérlő elemek (szelepek)
Csurik Magda Országos Tisztifőorvosi Hivatal
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
2006. május 15P2P hálózatok 1 Fóliák a vizsgára: 1. előadás  Bevezető: 11-16, 21,  Usenet: előadás:  Bevezető: 3-8  Napster: 
2006. Peer-to-Peer (P2P) hálózatok Távközlési és Médiainformatikai Tanszék.
QualcoDuna interkalibráció Talaj- és levegövizsgálati körmérések évi értékelése (2007.) Dr. Biliczkiné Gaál Piroska VITUKI Kht. Minőségbiztosítási és Ellenőrzési.
Egy első generációs gép (az IAS) felépítése
Objektum orientált programozás
Fixpontos, lebegőpontos
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
A Visual Basic nyelvi elemei
Kvantitatív módszerek
> aspnet_regiis -i 8 9 TIPP: Az „Alap” telepítés gyors, nem kérdez, de később korlátozhat.
1 Szervetlen és Analitikai Kémia Tanszék, Kémiai Informatika Csoport Számítástechnika Kari rendszergazda: Rippel Endre (Ch C2)
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
Free pascal feladatok
előadások, konzultációk
Algoritmizálás, adatmodellezés
1 Az igazság ideát van? Montskó Éva, mtv. 2 Célcsoport Az alábbi célcsoportokra vonatkozóan mutatjuk be az adatokat: 4-12 évesek,1.
Mikroprocesszorok (Microprocessors, CPU-s)
Előadás másolata:

Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar SSE assembly programozás előadás dr. Robu Judit szeminárium drd. Lukács Sándor

BBTE, Alkalmazások és operációs rendszerek optimizálása 2 Referenciák AMD x86-64 Architecture Programmer’s Manual, Volume 4: 128-bit Media Instructions Revision 3.03, August 2002 kiváló képek, ábrák IA-32 Intel Architecture Software Developer’s Manual, Volume 2: Instruction Set Reference a 2000-es kiadásban voltak hibák, pl. PACKSSDW megtalálható benne a C/C++ compiler intrinsics-ek rövid leírása

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 3 SSE végrehajtási modell SIMD modell – Single Instruction Multiple Data a legtöbb mai PC és Workstation kategóriájú processzor ezt a modellt (is) támogatja SISD általános utasítások SIMD tipikus multimédia utasítások MISD gyakorlatban nem használt MIMD kísérleti formában használt

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 4 SIMD végrehajtás a műveletek párhuzamosan végződnek el több operanduson implementáció szerint, vagy ugyanabban az óraciklusban mind a négy (Intel Core 2), vagy kettessével (Intel NetBurst)

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 5 SIMD technológiák x86-os platformokon MMX – 1996, Intel Pentium MMX egész műveletek, az első x86-os SIMD szett 3DNow! – 1998, AMD K6-2 lebegőpontos műveletek 64 bites MMX regiszterken PREFETCH utasítás – adat-cache vonal explicit betöltése SSE – 1999, Intel Pentium III lebegőpontos műveletek új, 128 bites XMM regisztereken kibővített utasításszett MMX egész műveletek számára SSE2 – 2000, Intel Pentium 4 egész műveletek a 128 bites XMM regisztereken

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 6 SSE végrehajtási környezet

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 7 SSE regiszterszett 8 új, 128 bites regiszter 32 bites üzemmódban 16 új, 128 bites regiszter 64 bites üzemmódban MXCSR, 32 bites kontroll és státuszregiszter STMXCSR m32 LDMXCSR m32 alapérték 0x00001F80 a regiszterek függetlenek a FPU/MMX regiszterektől XMM0 XMM1 XMM7 XMM8 XMM15 … … MXCSR mindig elérhető 64 bit specifikus

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 8 SSE adattípusok 1 két új lebegőpontos adattípus 128 bites tömörített egyszeres pontosságú valós 128 bites tömörített, kétszeres pontosságú valós

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 9 SSE adattípusok 2 az SSE 128 bitre bővítette az MMX tömörített egész adatípusait

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 10 SSE egész ábrázolás

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 11 SSE lebegőpontos ábrázolás

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 12 SSE lebegőpontos értéktípusok normalizált értékek a szignifikáns [1,2) intervalumon belüli érték a szám nagyságrendjét kizárólag az exponens határozza meg denormalizált értékek (nagyon kis értékek) a szám nagyságrendje kisebb, mint az adattípus alsó határa (pl. < egyszeres pontosság esetén) a számot mégis ábrázoljuk, 0-ás egész résszel nulla van pozitív és negatív nulla végtelen van pozitív és negatív végtelen nem-szám (not-a-number, NaN) értékek QNaN (Quiet NaN) – a processzor nem generál kivételt SNaN (Signalling NaN) – a processzor kivételt generál

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 13 Túlcsordulás vezérlés egész adatípusok esetén azonos az MMX-ben is jelenlévő három típussal túlcsordulásos előjeles korlátozás (signed saturation) előjel nélküli korlátozás (unsigned saturation) lebegőpontos műveletek esetén nincs túlcsorduáls korlátozás – akárcsak FPU esetén vannak jelzőbittek és kivételek #19-es kivétel – SSE lebegőpontos kivétel

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 14 SSE kontroll regiszter 1

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 15 SSE kontroll regiszter 2 6 kivétel jelző bit IE, DE, ZE, OE, UE, PE 6 kivétel maszkbit IM, DM, ZM, OM, UM, PM ha 0, engedélyezett a kivétel ha 1, a kivétel tiltott négy lebegőpontos kerekítési módot támogat az SSE 00 – legközelebbi érékhez (round to nearest) 01 – lefele kerekítés (round down) 10 – felfele kerekítés (round up) 11 – nulla fele kerekítés (round toward zero)

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 16 SSE utasítások – Bevezető 1 előtagok / prefixek CVT – konverizó CVTT – konverizó kerekítéssel (truncation) P – tömörített / vektor művelet PACK – tömörítés (2x szélességből 1x szélességbe) PUNPCK – kitömörítés és felváltva helyezés UNPACK – kitömörítés és felváltva helyezés utótagok / suffixek, más jelölések B, W, D, Q, DQ – adatméret H – rangosabb fél (high) L – kevésbé rangos fél (low) vagy bal részoprandus (left)

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 17 SSE utasítások – Bevezető 2 utótagok / suffixek, más jelölések PS – vektoriális egyszeres pontosságú lebegőpontos PD – vektoriális kétszeres pontosságú lebegőpontos SS – skaláris egyszeres pontosságú lebegőpontos, VAGY SS – előjeles korlátozás (signed saturation) SD – skaláris kétszeres pontosságú lebegőpontos US – előjel nélküliu korlátozás (unsigned saturation) PI – tömörített egész SI – előjeles egész S – előjeles, korlátozás vagy shift U – előjel nélküli, unorderes, unaligned

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 18 SSE/Int – Adatátviteli utasítások 1

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 19 SSE/Int – Adatátviteli utasítások 2

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 20 SSE/Float – Adatátviteli utasítások 1

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 21 SSE/Float – Adatátviteli utasítások 2

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 22 SSE – További adatátviteli utasítások előjel bitmaszk generálás MASKMOVDQU, PMOVMSKB MOVMSKPS, MOVMSKPD non-temporális / streaming tárolás nem tárolja az adatot a processzor cachejeiben MOVNTI, MOVNTQ, MOVNTDQ MOVNTPS, MOVNTPD

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 23 SSE/Int – Aritmetikai utasítások 1 összeadás PADDB, PADDW, PADDD, PADDQ PADDSB, PADDSW PADDUSB, PADDUSW kivonás PSUBB, PSUBW, PSUBD, PSUBQ PSUBSB, PSUBSW PSUBUSB, PSUBUSW szorzás, szorzás-összeadás PMULHW, PMULLW, PMULHUW PMULUDQ – DWORD szorzás és QWORD eredmények tárolása PMADDWD – WORD szorzás, majd DWORD eredmények összegzése PSADBW – BYTE abszolút különbségek WORD összege átlag számítások PAVGB, PAVGW – előjel nélküli műveletek

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 24 SSE/Int – Aritmetikai utasítások 2 PMULUDQ PMADDWD

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 25 SSE/Float – Aritmetikai utasítások 3 összeadás, kivonás ADDPS, ADDPD – vektoriális / tömörített összeadás ADDSS, ADDSD – skaláris összeadás, a rangosabb regiszterrészek nem módosulnak SUBPS, SUBPD, SUBSS, SUBSD szorzás, osztás MULPS, MULPD, MULSS, MULSD DIVPS, DIVPD, DIVSS, DIVSD négyzetgyök és inverz (1/x) számítások SQRTPS, SQRTPD, SQRTSS, SQRTSD RSQRTPS, RSQRTSS RCPPS, RCPSS

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 26 SSE/Float – Aritmetikai utasítások 4

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 27 SSE példa – Vektor szorzás 1 var StartTime, StopTime: Int64; function RDTSC: Int64; assembler; asm rdtsc // TIME STAMP COUNTER end; procedure Start; begin StartTime := RDTSC; end; function Stop: Int64; begin StopTime := RDTSC; Result := StopTime - StartTime; end; const N = 100; // 100 szó elfér az L1 cache-ben K = ; // többszörös végrehajtás, egyetlen // végrehajtás idejét nem igazaán // lehet pontosan lemérni type TSingleVector = array[0..N-1] of Single; var a1, b1, c1: TSingleVector; a2, b2, c2: TSingleVector; i: Integer;...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 28 SSE példa – Vektor szorzás 2 function FpuMulVector( var a, b, c: TSingleVector; N: Integer): Int64; var i, j: Integer; begin Start; for j := 0 to K-1 do for i := 0 to N-1 do c[i] := a[i] * b[i]; Result := Stop; end; klasszikus, FPU-val történő lebegőpontos szorzások... for i := 0 to N-1 do begin a1[i] := Random; b1[i] := Random; a2[i] := a1[i]; b2[i] := b1[i]; end; fpu := FpuMulVector(a1, b1, c1, N); sse := SseMulVector(a2, b2, c2, N); writeln(‘fpu = ', fpu, ' ticks'); writeln(‘sse = ', sse, ' ticks'); writeln(' x = ', fpu/sse:5:3);...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 29 SSE példa – Vektor szorzás 3 function SseMulVector( var a, b, c: TSingleVector; N: Integer): Int64; assembler; asm mov esi, a mov edi, b mov edx, c... mov eax, pop edx pop edi pop esi push esi push edi push edx mov ecx, N shr ecx, movups xmm0, [edi] movups xmm0, [edi] movups xmm1, [esi] movups xmm1, [esi] mulps xmm0, xmm1 mulps xmm0, xmm1 movups [edx], xmm0 movups [edx], xmm0 add edi, 16 add esi, 16 add edx, 16 sub ecx, 1 sub eax, 1 // nem kell EMMS! end;

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 30 SSE példa – Vektor szorzás 4...DEMO...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 31 SSE példa – Sormátrix szorzása 1 oszlopmátrixok esetén más B i,j formula van

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 32 SSE példa – Sormátrix szorzása 2 type TQuad = array [0..3] of Single; TQuadVector = array [0..N-1] of TQuad; TMatrix = array [0..3] of TQuad;... for i := 0 to N-1 do begin b[i][0] := a[i][0]*t[0][0] + a[i][1]*t[1][0] + a[i][2]*t[2][0] + a[i][3]*t[3][0]; b[i][1] := a[i][0]*t[0][1] + a[i][1]*t[1][1] + a[i][2]*t[2][1] + a[i][3]*t[3][1]; b[i][2] := a[i][0]*t[0][2] + a[i][1]*t[1][2] + a[i][2]*t[2][2] + a[i][3]*t[3][2]; b[i][3] := a[i][0]*t[0][3] + a[i][1]*t[1][3] + a[i][2]*t[2][3] + a[i][3]*t[3][3]; end;... műveletelvégzési lehetőségek oszloponként soronként

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 33 SSE példa – Sormátrix szorzása 3 function SseMulMat(var a, b: TQuadVector; N: Integer; var t: TMatrix): Int64; assembler; asm mov esi, a mov edi, b mov edx, t mov ecx, N push esi push edi push ecx movups xmm4, [edx] movups xmm5, [edx+16] movups xmm5, [edx+16] movups xmm6, [edx+32] movups xmm6, [edx+32] movups xmm7, [edx+48] movups xmm7, [edx+48]... mov eax, pop ecx pop edi pop esi push esi push edi push xorps xmm3, xmm3 xorps xmm3, xmm3 movups xmm0, [esi] movups xmm0, [esi] movaps xmm2, xmm0 movaps xmm2, xmm0...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 34 SSE példa – Sormátrix szorzása 4 T 0,3 T 0,2 T 0,1 T 0,0 XMM4 T 1,3 T 1,2 T 1,1 T 1,0 XMM5 T 2,3 T 2,2 T 2,1 T 2,0 XMM6 T 3,3 T 3,2 T 3,1 T 3,0 XMM XMM3 A3A3 A2A2 A1A1 A0A0 XMM0 A3A3 A2A2 A1A1 A0A0 XMM2

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 35 SSE példa – Sormátrix szorzása 5... shufps xmm0, xmm0, $00 shufps xmm0, xmm0, $00 mulps xmm0, xmm4 mulps xmm0, xmm4 addps xmm3, xmm0 addps xmm3, xmm0 movaps xmm1, xmm2 movaps xmm1, xmm2 shufps xmm1, xmm1, $55 shufps xmm1, xmm1, $55 mulps xmm1, xmm5 mulps xmm1, xmm5 addps xmm3, xmm1 addps xmm3, xmm1 movaps xmm0, xmm2 movaps xmm0, xmm2 shufps xmm0, xmm0, $AA shufps xmm0, xmm0, $AA mulps xmm0, xmm6 mulps xmm0, xmm6 addps xmm3, xmm0 addps xmm3, xmm0... shufps xmm2, xmm2, $FF shufps xmm2, xmm2, $FF mulps xmm2, xmm7 mulps xmm2, xmm7 addps xmm3, xmm2 addps xmm3, xmm2 movups [edi], xmm3 add edi, 16 add esi, 16 sub eax, 1 end;

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 36 SSE példa – Sormátrix szorzása 6 A3A3 A2A2 A1A1 A0A0A0A0 XMM0 A 0 T 0,3 A 0 T 0,2 A 0 T 0,1 A 0 T 0,0 XMM0 A0A0A0A0 A0A0A0A0 A0A0A0A0 A0A0A0A0 A 0 T 0,3 A 0 T 0,2 A 0 T 0,1 A 0 T 0,0 XMM3 shufps xmm0,xmm0,$ mulps xmm0,xmm4 addps xmm3,xmm0 T 0,3 T 0,2 T 0,1 T 0,0 XMM4

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 37 SSE példa – Sormátrix szorzása 7 A3A3 A2A2 A1A1A1A1 A0A0 XMM1 A 1 T 1,3 A 1 T 1,2 A 1 T 1,1 A 1 T 1,0 XMM1 A1A1A1A1 A1A1A1A1 A1A1A1A1 A1A1A1A1 A 1 T 1,3 +A 0 T 0,3 A 1 T 1,2 +A 0 T 0,2 A 1 T 1,1 +A 0 T 0,1 A 1 T 1,0 +A 0 T 0,0 XMM3 shufps xmm1,xmm1,$ mulps xmm1,xmm5 addps xmm3,xmm1 T 1,3 T 1,2 T 1,1 T 1,0 XMM5

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 38 SSE példa – Sormátrix szorzása 8 A3A3A3A3 A2A2 A1A1 A0A0 XMM2 A 3 T 3,3 A 3 T 3,2 A 3 T 3,1 A 3 T 3,0 XMM2 A3A3A3A3 A3A3A3A3 A3A3A3A3 A3A3A3A3 A 3 T 3,3 +...A 3 T 3,2 +...A 3 T 3,1 +...A 3 T 3, XMM3 shufps xmm2,xmm2,$FF mulps xmm2,xmm7 addps xmm3,xmm2 T 3,3 T 3,2 T 3,1 T 3,0 XMM7

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 39 SSE példa – Sormátrix szorzása 9...DEMO...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 40 SSE – Shift utasítások bal-shift PSLLW, PSLLD, PSLLQ, PSLLDQ jobb-shift PSRLW, PSRLD, PSRLQ, PSRLDQ aritmetikai shift PSRAW, PSRAD

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 41 SSE – Logikai utasítások egész értékek esetén PAND, PANDN, POR, PXOR lebegőpontos értékek esetén ANDPS, ANDPD, ANDNPS, ANDNPD ORPS, ORPD, XORPS, XORPD NINCS különbség az egész és lebegőpontos változatok végrehajtása között

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 42 SSE/Int – Összehasonlító utasítások összehasonlítás és maszk generálása PCMPEQB, PCMPEQW, PCMPEQD PCMPGTB, PCMPGTW, PCMPGTD minimum-maximum kiválasztás PMINUB, PMAXUB PMINSW, PMAXSW

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 43 SSE/Float – Összehasonlító utasítások 1 összehasonlítás és maszk generálása CMPPS, CMPPD, CMPSS, CMPSD skaláris összehasonlítás és EFLAGS jelzőbittek beállítása (ZF, PF, CF) COMISS, COMISD UCOMISS, UCOMISD csak SNaN-ok esetén generálnak kivételt, QNaN esetén nem minimum-maximum kiválasztása MINPS, MAXPS, MINPD, MAXPD MINSS, MAXSS, MINSD, MAXSD

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 44 SSE/Float – Összehasonlító utasítások 2 COMISD CMPPD

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 45 SSE példa – Összehasonlítás r0 = a0>b0 ? a0:b0 r1 = a1>b1 ? a1:b1 r2 = a2>b2 ? a2:b2 r3 = a3>b3 ? a3:b3 r4 = a4>b4 ? a4:b4 r5 = a5>b5 ? a5:b5 r6 = a6>b6 ? a6:b6 r7 = a7>b7 ? a7:b7 MOVQ xmm3, xmm0 ; a > b ? 0xffff : 0 PCMPGTW xmm3, xmm2 ; a > b ? a : 0 PAND xmm0, xmm3 ; a > b ? 0 : b PANDN xmm3, xmm1 ; r = a > b ? a: b POR xmm0, xmm3

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 46 SSE/Int – Kitömörítő, betömörítő és adatátrendező utasítások 1 kitömörítés és felváltva elhelyezés PUNPCKHBW, PUNPCKLBW PUNPCKHWD, PUNPCKLWD PUNPCKHDQ, PUNPCKLDQ PUNPCKHQDQ, PUNPCKLQDQ betömörítés és korlátozás PACKSSDW, PACKSSWB PACKUSWB adatok keverése (shuffle) PSHUFHW, PSHUFLW, PSHUFD adatok beszúrása / kimásolása PINSRW, PEXTRW

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 47 SSE/Int – Kitömörítő, betömörítő és adatátrendező utasítások 2 PINSRW PSHUFD PSHUFHW

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 48 SSE/Float – Kitömörítő és adatátrendező utasítások 1 kitömörítés és felváltva elhelyezés UNPCKHPS, UNPCKHPD UNPCKLPS, UNPCKLPD adatok keverése SHUFPS – 2-2 tetszőleges operandust helyez el a két forrás regiszterből a cél regiszterbe SHUFPD – 1-1 tetszőleges operandust helyez el a két forrás regiszterből a cél regiszterbe

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 49 SSE/Float – Kitömörítő és adatátrendező utasítások 2 UNPCKLPS SHUFPS

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 50 SSE példa – Kitömörítés-betömörítés 1 __m128 a, b, c, d; a.m128_u64[1] = 0x ; a.m128_u64[0] = 0x ; __asm { pxor xmm0, xmm0 movdqu xmm2, a movdqu xmm3, xmm2 a b c d punpckhwd xmm3, xmm0 punpcklwd xmm2, xmm0 movdqu b, xmm3 movdqu c, xmm2 packssdw xmm2, xmm3 movdqu d, xmm2 }

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 51 SSE példa – Kitömörítés-betömörítés 2...DEMO...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 52 SSE/Int – Konverziós utasítások XMM egészből – lebegőpontosba CVTDQ2PS CVTDQ2PD MMX egészből – lebegőpontosba CVTPI2PS CVTPI2PD GPR egészből – lebegőpontosba CVTSI2SS CVTSI2SD

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 53 SSE/Float – Konverziós utasítások 1 lebegőpontosból – lebegőpontosba CVTPS2PD CVTPD2PS CVTSS2SD CVTSD2SS lebegőpontosból – XMM egészbe CVTPS2DQ CVTPD2DQ CVTTPS2DQ CVTTPD2DQ

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 54 SSE/Float – Konverziós utasítások 2 lebegőpontosból – MMX egészbe CVTPS2PI CVTPD2PI CVTTPS2PI CVTTPD2PI lebegőpontosból – GPR egészbe CVTSS2SI CVTSD2SI CVTTSS2SI CVTTSD2SI

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 55 SSE példa – Hangerősség 1 a hangadatok (minták) 16 bites, előjeles egészek sztereo hang esetén egymás után váltakozva helyezkednek el a két csatorna 16 bites mintái (együtt 32 bit egy BAL,JOBB páros) BAL k,JOBB k,BAL k+1,JOBB k+1,BAL k+2,JOBB k+2,... minta (sample) értékek 0 – hangtalan , – maximális hangerő hangosítás = a minták szorzása konstanssal x 2 – kétszeres hangerő x 0.5 – fél hangerő a végső érzékelt hangerő nem úgyanúgy módosul; az embeli fül számára logaritmikus skálán kell módosítani a hangerőt (DB) ebben a prezentációban a példát NEM fogom részletesen kielemezni az ASM szintű optimizációról szolló prezentáció keretében kerül sor rá

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 56 SSE példa – Hangerősség 2 // get volume factor 0 – 1024 fact := tckAmplify.Position; for i := start to stop do begin // amplify left channel temp := Wave.Buffer[2*i]; temp := (temp*fact) div 512; if (temp < ) then Wave.Buffer[2*i] := else if (temp > ) then Wave.Buffer[2*i] := else Wave.Buffer[2*i] := temp;... // amplify right channel temp := Wave.Buffer[2*i+1]; temp := (temp*fact) div 512; if (temp < ) then Wave.Buffer[2*i+1] := else if (temp > ) then Wave.Buffer[2*i+1] := else Wave.Buffer[2*i+1] := temp; end; x0 – x2 hangerő skála → 0 – – x0 hangerő 512 – x1 hangerő 1024 – x2 hangerő

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 57 SSE példa – Hangerősség 3 asm // setup indexing mov edx, paddr mov eax, start // eax = i // setup zero XMM register pxor xmm0, xmm0 // setup factor XMM register movd xmm1, factor pshufd xmm1, xmm1, $00 // load source wave // process 2x16 bit samples(L/R) movdqu xmm2, [edx + eax*4] movdqu xmm3, xmm2 // unpack samples to 32 bit punpcklwd xmm2, xmm0 punpckhwd xmm3, xmm0... // multiply samples by 0 – 1024 // (and add with zero) pmaddwd xmm2, xmm1 pmaddwd xmm3, xmm1 // divide samples by 512 psrad xmm2, 9 psrad xmm3, 9 // pack samples to 16 bit with // signed saturation packssdw xmm2, xmm3 // store destination samples movdqu [edx + eax*4], xmm2 // loop to next samples // 4 x (2x16) bit each step add eax, 4 cmp eax, stop end;

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 58 SSE példa – Hangerősség 4...DEMO...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 59 Köszönöm a figyelmet!