SSE4

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 19. syyskuuta 2016 tarkistetusta versiosta . vahvistus vaatii 21 muokkausta .

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.

Komentosarja

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-komennot
Alaryhmä 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.

Muutokset

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.

Uudet SSE4.1-ohjeet

Nopeuta videota

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

Vektoriprimitiivit

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.

Lisäykset/poistot

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).

Vektorien skalaarinen kertolasku

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.

Sekoitus

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.

Bittitarkistukset

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öristys

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).

WC-muistin lukeminen

Lukutoiminto, joka nopeuttaa (jopa 7,5-kertaisesti) kirjoitus-yhdistävien muistialueiden työtä .

Uudet SSE4.2-ohjeet

Merkkijonojen käsittely

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ä.

CRC32-laskenta

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 ).

1 bitin populaation laskeminen

Yksittäisten bittien lukumäärän laskeminen. Kolme ohjevaihtoehtoa: 16-, 32- ja 64-bittisille rekistereille. Esiintyy myös AMD:n SSE4A :ssa .

Vektoriprimitiivit

64-bittisten kenttien tarkistaminen "suurempi kuin" ja 64-bittisten maskien myöntäminen.

SSE4a

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]

Prosessorit SSE4-tuella

Kirjallisuus

Muistiinpanot

  1. Innovatiivinen suoratoisto SIMD Extensions 4 (SSE4) -käskysarja (downlink ) . Haettu 21. helmikuuta 2010. Arkistoitu alkuperäisestä 29. toukokuuta 2010. 
  2. Sun Studio 12 -päivitys 1: C Compiler 5.10 Readme . Haettu 8. helmikuuta 2010. Arkistoitu alkuperäisestä 7. marraskuuta 2009.
  3. GCC 4.3 -julkaisusarja - Muutokset, uudet ominaisuudet ja korjaukset - GNU Project - Free Software Foundation (FSF) . Haettu 27. toukokuuta 2010. Arkistoitu alkuperäisestä 9. toukokuuta 2012.
  4. AMD CPUID -määritykset . Haettu 7. toukokuuta 2011. Arkistoitu alkuperäisestä 16. toukokuuta 2011.
  5. Rahul Chaturvedi. "Barcelona" -prosessoriominaisuus: SSE4a Instruction Set  (englanniksi)  (linkki ei saatavilla) (17. syyskuuta 2007). Arkistoitu alkuperäisestä 25. lokakuuta 2013.
  6. Rahul Chaturvedi. "Barcelona" -prosessoriominaisuus: SSE4a, osa 2  (englanniksi)  (linkki ei saatavilla) (2. lokakuuta 2007). Arkistoitu alkuperäisestä 25. lokakuuta 2013.