Movatterモバイル変換


[0]ホーム

URL:


Siirry sisältöön
Wikipedia
Haku

SSE

Wikipediasta
Tämä artikkeli käsittelee käskykantalaajennosta. Levy-yhtiöstä katso:Skill Street Entertainment.

SSE eliStreaming SIMD Extensions (aluksi ISSE,engl.Internet Streaming SIMD Extension[1], myöhemminengl.Intel Streaming SIMD Extension[2] ) onIntelinSIMD-käskykantalaajennus (Single Instruction, Multiple Data; yksi käsky, paljon dataa)IA-32-käskykantaan. SSE tuli käyttöön vuonna 1999Pentium III -suorittimessa.

SSE lisää suorittimeen kahdeksan 128-bittistä rekisteriä (XMM0–XMM07) ja 70 kpl näitä käyttäviäkäskyjä. Käskykannasta löytyy mm. käskyjä joilla rekistereille voidaan laskea rinnakkain neljää 32-bittistäliukulukuoperaatiota.

SSE tehostaa erityisesti3D-grafiikan geometriamuunnosten laskemista. Laajennus tuplasi Pentium III:n liukulukusuorituskyvyn lisäten suorittimen ytimen pinta-alaa vain kymmenyksellä. Käskykannan avulla Pentium III pystyi reaaliaikaiseenMPEG-1 jaMPEG-2-videon purkuun ja soittamaanDVD-levyjä 30 ruutua sekunnissa siten että aikaa jäi vielä muillekin ohjelmille.[1]Surkuhupaisasti sitä mainostettiin alun perinInternetin käyttöä nopeuttavana laajennuksena, mistä alkuperäinen nimikin tulilähde?.

Koska käskykanta lisäsi suorittimen rekisterien määrää, tulee tämä huomioida tilanteissa, joissa suorittimen tila piti tallettaa, kuten esimerkiksi ohjelmasta toiseen vaihtaessa, joten SSE-käskyjen käyttö vaatii tukea alla olevaltakäyttöjärjestelmältä. Jotta ohjelmat eivät voisi yrittää käyttää SSE-käskyjä ilman sitä tukevaa käyttöjärjestelmää, mistä seuraisi ohjelmien virheellistä toimintaa, suorittimeen lisättiin uusi toimintatila. SSE-tietoinen käyttöjärjestelmä asettaa suorittimen tähän toimintatilaan, ja vasta tämän jälkeen SSE-käskyt ovat käytettävissä.

Ensimmäinen SSE-käskykantaa tukenut suoritin oliIntelinPentium III, joka julkaistiin alkuvuodesta 1999.AMD oli vajaata vuotta aikaisemmin julkaissut oman3DNow!-käskykantansaK6-2-suorittimen myötä. 3DNow! puolestaan oli "oikein tehty" korvaaja Intelin alkuperäiselleMMX-käskylaajennukselle, joka ei osannut käsitellä kuin kokonaislukuja, ja sitä käytettäessä esti suorittimen liukulukumatematiikan käytön. SSE ja 3DNow! olivat keskenään kilpailevia käskykantalaajennoksia, ja ajan myötä SSE vei voiton mm. Intelin suuremman markkina-aseman ja paremmankääntäjätuen ansiosta, ja nykyisin ohjelmat optimoidaan tyypillisesti käyttämään SSE-käskyjä mutta ei 3DNow!-käskyjä. AMD otti SSE-käskykannan käyttöönAthlon XP-suorittimessaan vuonna 2001. SSE-käskykantaa on myöhemmin laajennettuSSE2-käskyillä.

SSE:n kehitysversiot

[muokkaa |muokkaa wikitekstiä]
  • SSE2 tuli käyttöönPentium 4:ssa. Se lisäsi 144 uutta käskyä, tuen kaksoistarkkuuden (64-bitin)liukuluvuille, sekä kokonaislukuoperaatiot, jotka käyttävät SSE-rekistereitä. Näin se korvasi täysin epäonnistuneen MMX:n, sekä koko Intel 8087:n liukukäskykannan.
  • SSE3 eliPrescott New Instructions on SSE2:n edelleen kehitetty versio, joka lisäsi muutamia signaalinkäsittelyyn (jatkuvaan datavirtaan) suuntautuneita käskyjä jasäikeidenhallintaa.
  • SSSE3 on pieni Core Microarchitecturen (2006) laajennus SSE3:een, joka lisäsi 16 käskyä sanan tavujen permutointiin, 16-bittisten kiinteän pilkun lukujen kertomiseen oikein toimivalla pyöristyksellä.
  • SSE4 on suuri muutos, joka esiteltiin syyskuussa 2006 ja otettiin käyttöön vuonna 2008 julkaistussa "Nehalem"-suorittimessa.

SSE-komentojen käyttö

[muokkaa |muokkaa wikitekstiä]

SSE-komentoja voidaan käyttää erikseenassembly-ohjelmilla taiinline komennoilla ylemmän tason kielestä kutenC- taiC++-kielestä.[3]

Triviaali esimerkki kahdenvektorin yhteenlaskemisesta SSE-komentoja käyttäen C++-kielisestä ohjelmasta (inline-assembly):

structvec_t{floatv[4];};vec_tv1={1.1,1.2,1.3,1.4};vec_tv2={1.2,2.2,3.2,4.2};vec_tvec_res={0.0,0.0,0.0,0.0};__asm{movapsxmm0,[v1];v1arvotlähteestärekisteriinaddpsxmm0,[v2];v1+v2(alkioidensummat)movaps[vec_res],xmm0;kopiorekisteristäkohdemuuttujaan}

Kääntäjien mukana on tyypillisestiintrinsicsstandardifunktiot suoritinkohtaisten alemman tason operaatioiden käyttämiseen ilman inline-assemblya. Esimerkiksi Microsoftin kääntäjä toteuttaa standardifunktiot, jotka vastaavat suoraanx86-käskykannan laajennuksia.[4] Samoin tekevät myös mm. Intelin C/C++ kääntäjä jaGCC.[5]

Suoritin odottaa, että muuttujattasataan (engl.align) tiettyyn kokoon, joka SSE-komennoilla tarkoittaa 16-tavuista (128-bittistä) tasausta. Koskafloat on tyypillisesti neljä tavua tämä tapahtuu automaattisesti neljän muuttujantaulukolla (engl.array). Muuttujatyypille tasaus asetetaan__declspec määrittelyllä seuraavasti:[6]

__declspec(align(16))structvec_t{floatv[4];};

Koska kyseessä on käskylaajennus tavalliseen käskykantaan normaalisti tarkistettava että suoritin tukee laajennusta.[7]

Lähteet

[muokkaa |muokkaa wikitekstiä]
  1. abThe Internet Streaming SIMD Extensions, Intel Technology Journal Q2, 1999, Shreekant (Ticky) Thakkar
  2. Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture. Intel, March 2013. Teoksen verkkoversio.
  3. Inline Assembler Overview Microsoft. Viitattu 13.3.2017.
  4. Compiler Intrinsics Microsoft. Viitattu 16.3.2017.
  5. Built-in Functions Specific to Particular Target Machines GNU. Viitattu 16.3.2017.
  6. align (C++) Microsoft. Viitattu 13.3.2017.
  7. __cpuid, __cpuidex Microsoft. Viitattu 13.3.2017.

Aiheesta muualla

[muokkaa |muokkaa wikitekstiä]
Noudettu kohteesta ”https://fi.wikipedia.org/w/index.php?title=SSE&oldid=19176765
Luokka:
Piilotettu luokka:

[8]ページ先頭

©2009-2025 Movatter.jp