SSE4 on Intel Core -mikroarkkitehtuurin käskysarja , joka toteutettiin ensimmäisen kerran Penryn -sarjan prosessoreissa (ei pidä sekoittaa AMD:n SSE4A :han ) [1] .
Se julkistettiin 27. syyskuuta 2006 , mutta yksityiskohtainen kuvaus oli saatavilla vasta keväällä 2007 . Tarkempi kuvaus uusista prosessoriominaisuuksista ohjelmoijille löytyy Intelin verkkosivuilta.
SSE4 koostuu 54 käskystä, joista 47 kuuluu SSE4.1:een (ne ovat Penryn-prosessoreissa). Täysi ohjesarja (SSE4.1 ja SSE4.2, eli 47 + loput 7 käskyä) on saatavilla Intel-prosessoreissa Nehalem-mikroarkkitehtuurilla, jotka julkaistiin marraskuun puolivälissä 2008 ja myöhemmissä versioissa. Mikään SSE4-käskyistä ei toimi 64-bittisten mmx-rekisterien kanssa (vain 128-bittisten xmm0-15).
Uudet SSE4-komennotAlaryhmä | Prosessorin ohjeet | Kuvaus | Odotettuja parannuksia sovellukseen |
---|---|---|---|
Erilaisia paketoituja DWORD-toimintoja | PMULLD, PMULDQ | Uusi tuki neljälle etumerkilliselle (ja etumerkittömälle) 32x32-bittiselle kertolaskulle käskyä kohden sekä etumerkeille kertoimille, kuten 32x32->64. | Soveltuu laajasti korkean tason ohjelmointikielillä (kuten C ja Fortran) kirjoitetun tietojenkäsittelyn kääntäjävektorisoinnin automatisointiin. |
Liukulukupistetuote | DPPS, DPPD | Parannettu käsittelysuorituskyky AOS-tietotyypeille (rakenteiden joukko) tuen yhden ja kahden tarkkuuden pistetuotteita. | Kolmiulotteisen sisällön, pelien luominen. Tuki ohjelmointikielille, kuten CG ja HLSL. |
Pakattu pariliitos | BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDDW | Sopimuksen mukaan pariliitostoiminto kopioi yhden kentän lähteestä ja siirtää sen määränpäähän. Nämä uudet prosessorikäskyt parantavat konjugointitoimintojen suorituskykyä useimpien kenttäkokojen osalta pakkaamalla kertolaskuoperaatiot yhteen käskyyn. | Se soveltuu laajasti korkean tason ohjelmointikielillä (kuten C ja Fortran) kirjoitetun tietojenkäsittelyn kääntäjävektorisoinnin automatisointiin sekä kuvankäsittelyyn ja videoinformaatioon suunniteltuihin sovelluksiin. Multimedia- ja peliresurssit. |
Pakattu kokonaisluku maksimi- ja minimiarvot | PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINDS, PMAXSD | Vertailee kohdeoperandin ja lähdeoperandin pakattuja etumerkittyjä/etuttomia tavu-/sana-/dword-tason kokonaislukuarvoja ja palauttaa minimi- tai maksimiarvon käskyä kohden kohdeoperandin jokaiselle pakatulle operandille. | Se soveltuu laajasti korkean tason ohjelmointikielillä (kuten C ja Fortran) kirjoitetun tietojenkäsittelyn kääntäjävektorisoinnin automatisointiin sekä kuvankäsittelyyn ja videoinformaatioon suunniteltuihin sovelluksiin. |
Liukulukuarvojen pyöristys | ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD | Pyöristää skalaari- ja pakatun yhden tai kaksinkertaisen tarkkuusoperandin tehokkaasti kokonaislukuarvoksi, mikä tukee Fortran-, Java- ja C99-ohjelmointikielten vaatimuksia. | Kuvien, grafiikan, videotietojen käsittely. Sovellukset, joissa on 2D/3D-multimedia- ja peliresurssit. |
Lisää/poista rekisterit | INSERTPS, PINSRB, PINSRD, PINSRQ, EXTRACTPS, PEXTRB, PEXTRD, PEXTRW, PEXTRQ | Nämä uudet prosessoriohjeet yksinkertaistavat GPR:ien (tai muistin) ja XMM:ien välistä lisäystä ja purkamista. | Se soveltuu laajasti korkean tason ohjelmointikielillä (kuten C ja Fortran) kirjoitetun tietojenkäsittelyn kääntäjävektorisoinnin automatisointiin sekä kuvankäsittelyyn ja videoinformaatioon suunniteltuihin sovelluksiin. |
Pakatun muodon muunnos | PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ | Muuntaa laatikollisen kokonaisluvun arvon (XMM-rekisteristä tai muistista) leveämmäksi kokonaislukuarvoksi, jossa on etumerkitty tai nollapääte. | Se soveltuu laajasti korkean tason ohjelmointikielillä (kuten C ja Fortran) kirjoitetun tietojenkäsittelyn kääntäjävektorisoinnin automatisointiin sekä kuvankäsittelyyn ja videoinformaatioon suunniteltuihin sovelluksiin. |
Pakattu tarkistus ja asennus | PTEST | SIMD-arkkitehtuurin nopeampi haarautuminen vektorisoidun koodin tukemiseksi. | Soveltuu tietojenkäsittelyn kääntäjävektorisoinnin, kuva- ja videoinformaation käsittelyn sekä kolmiulotteisen sisällön luomisen automatisointiin. Multimedia- ja peliresurssit. |
Pakattu identiteetin määritelmä | PCMPEQQ, PCMPGTQ | SIMD-arkkitehtuuri määrittelee, että QWORD:ien pakatut arvot kohdeoperandissa ja lähdeoperandissa ovat identtiset. | Se soveltuu laajasti korkean tason ohjelmointikielillä (kuten C ja Fortran) kirjoitetun tietojenkäsittelyn kääntäjävektorisoinnin automatisointiin sekä kuvankäsittelyyn ja videoinformaatioon suunniteltuihin sovelluksiin. Multimedia- ja peliresurssit. |
DWORDin pakkaaminen allekirjoittamattomaan WORD-muotoon | PACKUSDW | Muuntaa pakatun allekirjoitetun DWORDin allekirjoittamattomaksi pakatuksi WORDiksi käyttämällä allekirjoittamatonta vaiheistusta ylivuotoolosuhteiden käsittelemiseksi. Tämä uusi prosessoriohje täydentää muita tässä muodossa olevia ohjeita. | Se soveltuu laajasti korkean tason ohjelmointikielillä (kuten C ja Fortran) kirjoitetun tietojenkäsittelyn kääntäjävektorisoinnin automatisointiin sekä kuvankäsittelyyn ja videoinformaatioon suunniteltuihin sovelluksiin. Multimedia- ja peliresurssit. |
Parannetut merkkijonotoiminnot | PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM | Nämä uudet suorittimen käskyt sisältävät suuren määrän merkkijono- ja tekstinkäsittelyominaisuuksia, jotka vaativat yleensä enemmän opkoodeja. | Parannettu suorituskyky virustarkistuksessa, tekstihaussa, merkkijonojen käsittelykirjastoissa, kuten ZLIB, tietokannat, kääntäjät ja tilakonesovellukset. |
Intelin C - kääntäjä versiosta 10 lähtien luo SSE4-käskyt, kun -QxS-vaihtoehto on määritetty . Sun Microsystemsin Sun Studio -kääntäjä versiosta 12 alkaen päivityksestä 1 luo SSE4-käskyt käyttämällä -xarch=sse4_1 (SSE4.1) ja -xarch=sse4_2 (SSE4.2) [2] vaihtoehtoja . GCC-kääntäjä on tukenut SSE4.1:tä ja SSE4.2:ta versiosta 4.3 lähtien [ 3] optioilla -msse4.1 ja -msse4.2 tai -msse4 molempien sisällyttämiseksi.
Ohjeita on lisätty nopeuttamaan liikkeen kompensointia videokoodekeissa , nopeaa lukemista USWC- muistista, paljon ohjeita ohjelmien vektorisoinnin yksinkertaistamiseksi kääntäjien toimesta.
Lisäksi SSE4.2:een on lisätty ohjeet 8/16-bittisten merkkijonojen käsittelyyn, CRC32-laskelmiin, POPCNT :hen . Ensimmäistä kertaa SSE4:ssä xmm0-rekisteriä käytettiin implisiittisenä argumenttina joillekin ohjeille.
4-tavuisten etumerkittömien offset-ryhmien erojen absoluuttisten arvojen (SAD) kahdeksan summan laskeminen. 16-bittisten SAD:ien operandien sijainti määräytyy imm8-suoraargumentin kolmella bitillä.
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) | SAD 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) | ... SAD 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) |Hae 16-bittisistä etumerkittömistä kentistä A 0 ... A 7 , jolla on vähimmäisarvo (ja sijainti pienemmällä numerolla, jos tällaisia kenttiä on useita). Palautetaan 16-bittinen arvo ja sen sijainti.
12 ohjeen ryhmä pakattujen kenttien muodon laajentamiseksi. Pakatut 8-, 16- tai 32-bittiset kentät argumentin alaosasta laajennetaan (allekirjoitettuina tai allekirjoittamattomina) 16-, 32- tai 64-bittisiksi tuloskentiksi.
Syöttömuoto | Tuloksena oleva muoto | ||
---|---|---|---|
8-bittinen | 16-bittinen | 32 bittiä | |
PMOVSXBW | 16-bittinen | ||
PMOVZXBW | PMOVZXWW | ||
PMOVSXBD | PMOVSXWD | 32 bittiä | |
PMOVZXBD | PMOVZXWD | PMOVSXDD | |
PMOVSXBQ | PMOVSXWQ | PMOVSXDQ | 64 bittiä |
PMOVZXBQ | PMOVZXWQ | PMOVZXDQ |
Jokainen tuloskenttä on kahden argumentin vastaavien kenttien pienin/maksimiarvo. Tavukenttiä käsitellään vain etumerkillisinä numeroina, 16-bittisiä kenttiä vain etumerkittämättöminä numeroina. 32-bittisille pakattuille kentille tarjotaan sekä allekirjoitettuja että allekirjoittamattomia vaihtoehtoja.
Kerro etumerkityt 32-bittiset kentät, jolloin tuloksesta saadaan täydet 64 bittiä (kaksi kertolaskuoperaatiota 0- ja 2-argumenttikentillä).
Kerro etumerkityt 32-bittiset kentät, jolloin saadaan vähiten merkitseviä 32 bittiä tuloksista (neljä kertolaskuoperaatiota kaikilla argumenttikentillä).
32-bittisten allekirjoitettujen kenttien pakkaaminen 16-bittisiksi allekirjoittamattomiksi kyllästyneiksi kentiksi.
64-bittisten kenttien tasa-arvon tarkistaminen ja 64-bittisten maskien antaminen.
32-bittisen kentän lisääminen xmm2:sta (on mahdollista valita mikä tahansa tämän rekisterin 4 kentästä) tai 32-bittisestä muistipaikasta mielivaltaiseen tuloskenttään. Lisäksi voit asettaa jokaisen tuloskentän nollautumaan arvoon +0.0.
Poimimalla 32-bittinen kenttä xmm-rekisteristä, kentän numero ilmoitetaan imm8:n alimmassa 2 bitissä. Jos tulokseksi määritetään 64-bittinen rekisteri, sen ylemmät 32 bittiä nollataan (allekirjoittamaton laajennus).
Lisää 8-, 32- tai 64-bittinen arvo määritettyyn rekisterin xmm-kenttään (muut kentät eivät muutu).
8-, 16-, 32-, 64-bittisen kentän poimiminen rekisterin imm8:ssa määritetystä xmm-kentästä. Jos tuloksena määritetään kirjainkoko, sen korkea osa hylätään (allekirjoittamaton laajennus).
32/64-bittisten kenttien vektorin skalaarikerto (pistetulo). Imm8:ssa bitimaskin avulla osoitetaan mitkä kenttien tulot tulee summata ja mitä kuhunkin tuloksen kenttään tulee kirjoittaa: määritettyjen tulojen summa tai +0,0.
Jokainen 32/64-bittinen tuloskenttä valitaan xmm0 implisiittisen argumentin saman kentän etumerkistä riippuen: joko ensimmäisestä tai toisesta argumentista.
Imm8:n bittipeite (4 tai 2 bittiä) määrittää, mistä argumentista kukin 32/64-bittinen tuloskenttä otetaan.
Tuloksen jokaisen tavukentän valinta tapahtuu xmm0 implisiittisen argumentin saman kentän tavun etumerkistä riippuen: joko ensimmäisestä tai toisesta argumentista.
Imm8:n bittipeite (8 bittiä) määrittää, mistä argumentista kukin 16-bittinen tuloskenttä otetaan.
Aseta ZF -lippu vain, jos xmm2/m128:ssa kaikki maskilla merkityt bitit xmm1:stä ovat nollia. Jos kaikki merkitsemättömät bitit ovat nollia, aseta CF -lippu . Muut liput ( AF , OF , PF , SF ) nollataan aina. Ohje ei muuta xmm1:tä.
Pyöristetään kaikki 32/64-bittiset kentät. Pyöristystila (4 vaihtoehtoa) valitaan joko MXCSR.RC:stä tai suoraan imm8:sta. Voit myös estää tarkkuuden menetyspoikkeuksen luomisen.
Pyöristetään vain vähiten merkitsevä 32/64-bittinen kenttä (muut bitit pysyvät ennallaan).
Lukutoiminto, joka nopeuttaa (jopa 7,5-kertaisesti) kirjoitus-yhdistävien muistialueiden työtä .
Nämä ohjeet suorittavat aritmeettisia vertailuja kaikkien mahdollisten kenttäparien välillä (64 tai 256 vertailua) molemmista merkkijonoista, jotka on annettu sisällöllä xmm1 ja xmm2/m128. Vertailujen loogiset tulokset käsitellään sitten haluttujen tulosten saamiseksi. Imm8 Direct -argumentti ohjaa kokoa (tavu- tai unicode-merkkijonot, enintään 16/8 elementtiä kussakin), kenttien luonnehdintaa (merkkijonoelementit), vertailun tyyppiä ja tulosten tulkintaa.
He voivat etsiä merkkijonosta (muistialueelta) merkkejä tietystä joukosta tai tietyiltä alueilta. Voit verrata merkkijonoja (muistialueita) tai etsiä alimerkkijonoja.
Kaikki ne vaikuttavat prosessorin lippuihin : SF on asetettu, jos xmm1 ei ole täysi merkkijono, ZF on asetettu, jos xmm2/m128 ei ole täysi merkkijono, CF on, jos tulos ei ole nolla, OF on jos vähiten merkitsevä bitti tulos ei ole nolla. AF- ja PF-liput tyhjennetään.
Viivojen koon eksplisiittinen asetus <eax>, <edx> (rekisterien itseisarvo otetaan kyllästymisestä arvoon 8/16, riippuen rivien elementtien koosta. Tulos on ecx-rekisterissä .
Viivojen koon eksplisiittinen asetus <eax>, <edx> (rekisterien absoluuttinen arvo otetaan kyllästymisestä 8/16, riippuen rivien elementtien koosta. Tulos on xmm0-rekisterissä .
Merkkijonojen koon implisiittinen asetus (jokaiselle merkkijonolle etsitään nolla elementtiä). Tulos on ecx-rekisterissä.
Merkkijonojen koon implisiittinen asetus (jokaiselle merkkijonolle etsitään nolla elementtiä). Tulos on xmm0-rekisterissä.
CRC-32C-arvon kertyminen (muu merkintä CRC-32/ISCSI CRC-32/CASTAGNOLI ) 8-, 16-, 32- tai 64-bittiselle argumentille (käyttämällä polynomia 0x1EDC6F41 ).
Yksittäisten bittien lukumäärän laskeminen. Kolme ohjevaihtoehtoa: 16-, 32- ja 64-bittisille rekistereille. Esiintyy myös AMD:n SSE4A :ssa .
64-bittisten kenttien tarkistaminen "suurempi kuin" ja 64-bittisten maskien myöntäminen.
AMD esitteli SSE4a-käskysarjan Barcelonan arkkitehtuuriprosessoreihin . Tämä laajennus ei ole saatavilla Intel-suorittimille. Tuki määritellään lipulla CPUID.80000001H:ECX.SSE4A[Bitti 6]. [neljä]
Ohje | Kuvaus |
---|---|
LZCNT/POPCNT | Nolla/yksi bittien lukumäärän laskeminen. |
EXTRQ/INSERTQ | Yhdistetyt maskin ja vaihteen ohjeet [5] |
MOVNTSD/MOVNTSS | Skalaarivirran kirjoitusohjeet [6] |
x86-prosessorin käskysarjat | |
---|---|
Intel | |
AMD | |
Cyrix |