SSE4

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2016. szeptember 19-én felülvizsgált verziótól ; az ellenőrzéshez 21 szerkesztés szükséges .

Az SSE4  az Intel Core mikroarchitektúra utasításkészlete , amelyet először a Penryn sorozatú processzorokban valósítottak meg (nem tévesztendő össze az AMD SSE4A -jával ) [1] .

2006. szeptember 27-én jelentették be , de a részletes leírás csak 2007 tavaszán volt elérhető . A programozóknak szánt új processzorszolgáltatások részletesebb leírása az Intel honlapján található.

Parancskészlet

Az SSE4 54 utasításból áll, ebből 47 az SSE4.1-hez tartozik (Penryn processzorokban vannak). Az utasítások teljes készlete (SSE4.1 és SSE4.2, azaz 47 + a maradék 7 utasítás) elérhető Nehalem mikroarchitektúrával rendelkező Intel processzorokban, amelyek 2008. november közepén és későbbi kiadásokban jelentek meg. Az SSE4 utasítások egyike sem működik 64 bites mmx regiszterekkel (csak 128 bites xmm0-15 esetén).

Új SSE4 parancsok
Alcsoport A processzor utasításai Leírás Várható fejlesztések az alkalmazásban
Különféle csomagolt duplaszó-műveletek PMULLD, PMULDQ Új támogatás négy előjeles (és előjel nélküli) 32x32 bites szorzáshoz utasításonként, valamint előjeles szorzásokhoz, például 32x32->64. Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására.
Lebegőpontos pont termék DPPS, DPPD Javított feldolgozási teljesítmény az AOS adattípusokhoz (struktúrák tömbje) az egy- és kétpontos precíziós termékek támogatásával. Háromdimenziós tartalom, játékok készítése. Programozási nyelvek, például CG és HLSL támogatása.
Csomagolt párosítás BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDDW Megállapodás szerint a párosítási művelet egy mezőt másol a forrásból, és továbbítja a célállomásra. Ezek az új processzorutasítások javítják a konjugációs műveletek teljesítményét a legtöbb mezőméretnél, mivel a szorzási műveleteket egyetlen utasításba csomagolják. Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. Multimédiás és játékforrások.
Csomagolt egész számok maximális és minimális értékei PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINDS, PMAXSD Összehasonlítja a csomagolt előjeles/előjel nélküli bájt/szó/szavas szintű egész értékeket a cél operandusban és a forrás operandusban, és visszaadja a minimális vagy maximális értéket utasításonként minden egyes csomagolt operandushoz a cél operandusban. Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz.
Lebegőpontos értékek kerekítése ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD Hatékonyan kerekíti a skalár és a csomagolt egyszeres vagy dupla precíziós operandust egész értékre, támogatva a Fortran, Java és C99 programozási nyelvek követelményeit. Képek, grafikák, videó információk feldolgozása. Alkalmazások 2D/3D multimédiás és játékforrásokkal.
Regiszterek beszúrása/kiadása INSERTPS, PINSRB, PINSRD, PINSRQ, EXTRACTPS, PEXTRB, PEXTRD, PEXTRW, PEXTRQ Ezek az új processzorutasítások leegyszerűsítik a GPR-ek (vagy memória) és az XMM-ek közötti beillesztési és kibontási folyamatot. Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz.
Csomagolt formátum konvertálása PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ A dobozos egész értéket (XMM regiszterből vagy memóriából) egy szélesebb típusú, előjeles vagy null kiterjesztésű egész számmá alakítja. Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz.
Csomagolt csekk és telepítés PTEST A SIMD architektúra gyorsabb elágazása a vektorizált kód támogatása érdekében. Alkalmazható adatfeldolgozás fordítói vektorizálására, kép- és videó információfeldolgozásra, háromdimenziós tartalom létrehozására. Multimédiás és játékforrások.
Csomagolt identitás meghatározása PCMPEQQ, PCMPGTQ A SIMD architektúra meghatározza, hogy a QWORD-ok csomagolt értékei a céloperandusban és a forrás operandusban azonosak. Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. Multimédiás és játékforrások.
A DWORD csomagolása aláíratlan WORD formátumba PACKUSDW A csomagolt aláírt duplaszót előjel nélküli csomagolt WORD-dá alakítja a túlcsordulási feltételek kezeléséhez használt előjel nélküli állomásozással. Ez az új processzor-utasítás kiegészíti az ebben a formátumú egyéb utasításokat. Széles körben alkalmazható magas szintű programozási nyelveken (például C és Fortran) írt adatfeldolgozás fordítói vektorizálására, valamint képfeldolgozásra, videó információkra tervezett alkalmazásokhoz. Multimédiás és játékforrások.
Továbbfejlesztett karakterlánc-műveletek PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM Ezek az új processzorutasítások nagyszámú karakterlánc- és szövegfeldolgozási képességet tartalmaznak, amelyek általában több műveleti kódot igényelnek. Jobb teljesítmény a víruskereséshez, szöveges kereséshez, karakterlánc-feldolgozó könyvtárakhoz, például a ZLIB-hez, adatbázisokhoz, fordítókhoz és állapotgép-alkalmazásokhoz.


Az Intel C fordítója a 10-es verzió óta SSE4 utasításokat állít elő, ha a -QxS opció meg van adva . A Sun Microsystems Sun Studio fordítója a 12-es frissítés 1. verziója óta SSE4 utasításokat állít elő a -xarch=sse4_1 (SSE4.1) és -xarch=sse4_2 (SSE4.2) [2] beállítások használatával . A GCC fordító a 4.3-as verzió óta támogatja az SSE4.1-et és az SSE4.2-t [3] , az -msse4.1 és -msse4.2 kapcsolókkal , vagy az -msse4 -vel , hogy mindkettőt tartalmazza.

Változások

Utasítások kerültek hozzáadásra a videokodekek mozgáskompenzációjának felgyorsítására , gyors olvasás az USWC memóriából, sok utasítás a programok fordítók általi vektorizálásának egyszerűsítésére.

Ezenkívül a 8/16 bites karakterláncok feldolgozására, a CRC32 számításokra és a POPCNT-re vonatkozó utasításokat hozzáadtuk az SSE4.2-hez . Az SSE4-ben először az xmm0 regisztert használták implicit argumentumként néhány utasításhoz.

Új SSE4.1 utasítások

Videó felgyorsítása

Az eltolásos 4 bájtos előjel nélküli csoportok különbségeinek abszolút értékének (SAD) nyolc összegének kiszámítása. A 16 bites SAD-ok operandusainak helyét az imm8 közvetlen argumentum három bitje határozza meg.

s1 = imm8[2]*4 s2 = imm8[1:0]*4 SAD 0 = |A (s1+0) -B (s2+0) | + |A (s1+1) -B (s2+1) | + |A (s1+2) -B (s2+2) | + |A (s1+3) -B (s2+3) | SAD 1 = |A (s1+1) -B (s2+0) | + |A (s1+2) -B (s2+1) | + |A (s1+3) -B (s2+2) | + |A (s1+4) -B (s2+3) | EV 2 = |A (s1+2) -B (s2+0) | + |A (s1+3) -B (s2+1) | + |A (s1+4) -B (s2+2) | + |A (s1+5) -B (s2+3) | ... EV 7 = |A (s1+7) -B (s2+0) | + |A (s1+8) -B (s2+1) | + |A (s1+9) -B (s2+2) | + |A (s1+10) -B (s2+3) |

Keresés a 16 bites előjel nélküli A 0 ... A 7 mezők között , amelyeknek minimális értéke van (és kisebb számmal, ha több ilyen mező van). A rendszer egy 16 bites értéket és annak pozícióját adja vissza.

12 utasításból álló csoport a csomagolt mezők formátumának bővítéséhez. Az argumentum alsó részének csomagolt 8, 16 vagy 32 bites mezői (előjeles vagy előjel nélküli) 16, 32 vagy 64 bites eredménymezőkre bővülnek.

Beviteli formátum Eredmény
formátum
8 bites 16 bites 32 bites
PMOVSXBW 16 bites
PMOVZXBW PMOVZXWW
PMOVSXBD PMOVSXWD 32 bites
PMOVZXBD PMOVZXWD PMOVSXDD
PMOVSXBQ PMOVSXWQ PMOVSXDQ 64 bites
PMOVZXBQ PMOVZXWQ PMOVZXDQ

Vektorprimitívek

Mindegyik eredménymező a két argumentum megfelelő mezőinek minimális/maximális értéke. A bájtmezőket csak előjeles számként, a 16 bites mezőket csak előjel nélküli számként kezeli a rendszer. A 32 bites csomagolt mezőknél aláírt és aláíratlan opciók is rendelkezésre állnak.

Szorozza meg az előjeles 32 bites mezőket, és állítsa elő az eredmény teljes 64 bitjét (két szorzási művelet 0 és 2 argumentum mezőn).

Szorozza meg az előjeles 32 bites mezőket úgy, hogy az eredmények közül a legkevésbé szignifikáns 32 bitet állítsa elő (négy szorzási művelet az összes argumentummezőn).

A 32 bites aláírt mezők telítettségű, 16 bites aláíratlan mezőkbe történő csomagolása.

A 64 bites mezők egyenlőségének ellenőrzése és 64 bites maszkok kiadása.

Beszúrások/kivonatok

32 bites mező beszúrása xmm2-ből (a regiszter 4 mezője közül bármelyik választható), vagy egy 32 bites memóriahelyről tetszőleges eredménymezőbe. Ezenkívül minden egyes eredménymezőnél beállíthatja, hogy +0,0-ra állítsa vissza.

Az xmm regiszterből kivonva egy 32 bites mezőt a mező száma az imm8 alsó 2 bitjében jelenik meg. Ha eredményként egy 64 bites regisztert adunk meg, akkor annak felső 32 bitje visszaáll (előjel nélküli kiterjesztés).

Szúrjon be egy 8, 32 vagy 64 bites értéket a regiszter megadott xmm mezőjébe (a többi mező változatlan).

8, 16, 32, 64 bites mező kinyerése a regiszter imm8-ában megadott xmm mezőből. Ha az eredményként kis- és nagybetűt adunk meg, akkor a magas része el lesz vetve (aláírás nélküli kiterjesztés).

Vektorok skaláris szorzása

32/64 bites mezők vektor skaláris szorzása (pontszorzata). Az imm8-ban bitmaszk segítségével jelzi, hogy a mezők mely szorzatait kell összesíteni, és mit kell írni az eredmény egyes mezőibe: a megadott szorzatok összegét vagy +0,0.

Keverés

Minden 32/64 bites eredménymező az xmm0 implicit argumentumban szereplő mező előjelétől függően kerül kiválasztásra: az első vagy a második argumentumból.

Az imm8 bitmaszkja (4 vagy 2 bit) határozza meg, hogy melyik argumentumból kell venni az egyes 32/64 bites eredménymezőket.

Az eredmény minden bájtmezőjének kiválasztása az xmm0 implicit argumentumban ugyanazon mező bájtjának előjelétől függően történik: az első vagy a második argumentumból.

Az imm8 bitmaszkja (8 bit) határozza meg, hogy az egyes 16 bites eredménymezők melyik argumentumból származnak.

Bitellenőrzések

Csak akkor állítsa be a ZF jelzőt , ha az xmm2/m128-ban az xmm1 maszkkal jelölt összes bitje nulla. Ha minden jelöletlen bit nulla, akkor állítsa be a CF jelzőt . A fennmaradó jelzők ( AF , OF , PF , SF ) mindig alaphelyzetbe állnak. Az utasítás nem módosítja az xmm1-et.

Kerekítés

Az összes 32/64 bites mező kerekítése. A kerekítési mód (4 lehetőség) az MXCSR.RC-ből választható ki, vagy közvetlenül az imm8-ban állítható be. Elnyomhatja a precizitásvesztés kivételének generálását is.

Csak a legkisebb jelentőségű 32/64 bites mező kerekítése (a többi bit változatlan marad).

WC memória olvasása

Olvasási művelet, amely felgyorsítja (akár 7,5-szeresére) az írás-kombinációs memóriaterületek munkáját .

Új SSE4.2 utasítások

Karakterlánckezelés

Ezek az utasítások számtani összehasonlításokat végeznek az összes lehetséges mezőpár között (64 vagy 256 összehasonlítás) mindkét karakterláncból, amelyeket xmm1 és xmm2/m128 tartalmaz. Az összehasonlítások logikai eredményeit ezután feldolgozzák a kívánt eredmények elérése érdekében. Az imm8 direct argumentum vezérli a méretet (byte vagy unicode karakterláncok, egyenként legfeljebb 16/8 elem), a mezők (karakterláncelemek) jellemzését, az összehasonlítás típusát és az eredmények értelmezését.

Egy karakterláncban (memóriaterületen) kereshetnek egy adott halmazból vagy adott tartományból. Összehasonlíthatja a karakterláncokat (memóriaterületeket), vagy kereshet részkarakterláncokat.

Mindegyik befolyásolja a processzorjelzőket: SF akkor van beállítva, ha az xmm1 nem egy teljes karakterlánc, a ZF akkor van beállítva, ha az xmm2/m128 nem egy teljes karakterlánc, a CF, ha az eredmény nem nulla, az OF, ha a legkisebb jelentőségű bit az eredmény nem nulla. Az AF és PF jelzők törlődnek.

A sorok méretének explicit beállítása <eax>, <edx>-ben (a regiszterek abszolút értékét a telítettségtől 8/16-ig vesszük, a sorok elemeinek méretétől függően. Az eredmény az ecx regiszterben van .

A sorok méretének explicit beállítása <eax>, <edx>-ben (a regiszterek abszolút értékét telítettségtől 8/16-ig vesszük, a sorok elemeinek méretétől függően. Az eredmény az xmm0 regiszterben van .

A karakterláncok méretének implicit beállítása (minden karakterlánchoz nulla elemet kell keresni). Az eredmény az ecx regiszterben található.

A karakterláncok méretének implicit beállítása (minden karakterlánchoz nulla elemet kell keresni). Az eredmény az xmm0 regiszterben található.

CRC32 számítás

A CRC-32C érték felhalmozása (más jelöléssel CRC-32/ISCSI CRC-32/CASTAGNOLI ) egy 8, 16, 32 vagy 64 bites argumentumhoz (a 0x1EDC6F41 polinom használatával ).

1 bites populáció számolása

Az egyes bitek számának számolása. Három utasítási lehetőség: 16, 32 és 64 bites regiszterekhez. Az AMD SSE4A -jában is megtalálható .

Vektorprimitívek

A 64 bites mezők „nagyobb, mint” ellenőrzése és 64 bites maszkok kiadása.

SSE4a

Az SSE4a utasításkészletet az AMD vezette be a Barcelona architektúrájú processzoraiba . Ez a bővítmény nem érhető el Intel processzorokon. A támogatást a CPUID.80000001H:ECX.SSE4A[Bit 6] jelző határozza meg. [négy]

Utasítás Leírás
LZCNT/POPCNT A nulla/egy bitek számának számolása.
EXTRQ/INSERTQ Kombinált maszk és váltás utasítások [5]
MOVNTSD/MOVNTSS Scalar Stream írási utasítások [6]

Processzorok SSE4 támogatással

Irodalom

Jegyzetek

  1. Innovatív Streaming SIMD Extensions 4 (SSE4) utasításkészlet (lefelé irányuló kapcsolat ) . Letöltve: 2010. február 21. Archiválva az eredetiből: 2010. május 29. 
  2. Sun Studio 12 1. frissítés: C Compiler 5.10 Readme . Letöltve: 2010. február 8. Az eredetiből archiválva : 2009. november 7..
  3. GCC 4.3 Release Series – Változások, új szolgáltatások és javítások – GNU Project – Free Software Foundation (FSF) . Letöltve: 2010. május 27. Az eredetiből archiválva : 2012. május 9..
  4. AMD CPUID specifikáció . Letöltve: 2011. május 7. Az eredetiből archiválva : 2011. május 16..
  5. Rahul Chaturvedi. „Barcelona” processzorfunkció: SSE4a utasításkészlet  (angol nyelven)  (a hivatkozás nem elérhető) (2007. szeptember 17.). Archiválva az eredetiből 2013. október 25-én.
  6. Rahul Chaturvedi. „Barcelona” processzorfunkció: SSE4a, 2. rész  (angol)  (a hivatkozás nem elérhető) (2007. október 2.). Archiválva az eredetiből 2013. október 25-én.