SMT – samanaikainen monisäikeistäminen: mitä se on ja miten toimii
Samanaikainen monisäikeistäminen (Simultaneous multithreading, lyhenne SMT) on tekniikka, jolla parannetaan superskalaaristen suorittimien kokonaistehokkuutta laitteiston monisäikeistämisen avulla. SMT mahdollistaa useiden itsenäisten suoritussäikeiden käytön, jotta nykyaikaisten tietokonearkkitehtuurien tarjoamia resursseja voidaan hyödyntää paremmin.
Monisäikeistäminen on samankaltainen käsite kuin moniajo, mutta se on toteutettu säikeiden suoritustasolla nykyaikaisissa superskaalarisissa prosessoreissa.
Prosessorisuunnittelussa on kaksi tapaa lisätä piirin sisäistä rinnakkaisuutta pienemmillä resurssivaatimuksilla:
- Superskalaarinen tekniikka: jolla pyritään lisäämään käskytason rinnakkaisuutta (Instruction level parallelism, ILP) suorittamalla useita käskyjä samaan aikaan (termi: samanaikaisesti); lähettämällä käskyjä "samanaikaisesti" (termi: instruction dispatching) useisiin prosessorin sisälle rakennettuihin redundanteihin suoritusyksiköihin.
- Sirutasoinen monisäikeistystekniikka (CMT): käytetään säikeistystason rinnakkaistekniikkaa (TLP), jotta useiden säikeiden käskyjä voidaan suorittaa samanaikaisesti yhdellä prosessorisirulla.
On monia tapoja tukea useampaa kuin yhtä säiettä piirin sisällä, nimittäin:
- Interleaved multithreading (IMT) : Useiden ohjeiden antaminen lomittain eri säikeistä, jota kutsutaan myös temporaaliseksi monisäikeistykseksi. Se voidaan jakaa edelleen hienojakoiseen monilukuistamiseen (fine-grain multithreading) tai karkeakokoiseen monilukuistamiseen (coarse-grain multithreading) lomitettujen kysymysten taajuuden mukaan. Hienojakoinen monilukuistaminen antaa ohjeita eri säikeille jokaisen syklin jälkeen, kun taas karkearakeinen monilukuistaminen siirtyy antamaan ohjeita toisesta säikeestä vain silloin, kun nykyinen suorittava säie aiheuttaa joitakin pitkän viiveen tapahtumia (kuten sivuvika jne.). Karkearakeinen monisäikeistäminen on yleisempää, kun säikeiden välinen kontekstinvaihto on vähäisempää. Prosessoreissa, joissa on yksi putkisto ydintä kohti, lomitettu monisäikeistäminen on ainoa mahdollinen tapa, koska se voi antaa enintään yhden käskyn sykliä kohti.
- Samanaikainen monisäikeistäminen (SMT): Annetaan useita ohjeita useista säikeistä yhdessä syklissä. Prosessorin on oltava superskalaarinen, jotta se voi tehdä näin.
- Sirutasoinen moniprosessointi (CMP tai moniydinprosessori): Yhdistää kaksi tai useampia superskalaarisia prosessoreita yhdelle sirulle, joista kukin suorittaa säikeitä itsenäisesti.
- Mikä tahansa IMT/SMT/CMP-yhdistelmä
Keskeinen tekijä niiden erottamiseksi toisistaan on tarkastella, kuinka monta ohjetta prosessori voi antaa yhdessä syklissä ja kuinka monesta säikeestä ohjeet tulevat.
Mitä SMT käytännössä tarkoittaa
SMT:ssä yksi fyysinen ydin näyttää käyttöjärjestelmälle useammalta loogiselta suorittimelta. Ydin pitää yllä usean säikeen tilaa yhtä aikaa (esimerkiksi ohjelmalaskurit, keskeytykset, säikeiden rekisterikartat) ja valitsee jokaisella kellosyklillä useita käskyjä eri säikeistä lähetettäväksi samoihin jaettuihin suoritusyksiköihin. Näin tyhjiksi jäävät väylät, varausjonot tai suoritusportit voidaan täyttää toisen säikeen työllä sen sijaan, että ne seisoisivat käyttämättöminä vaikkapa välimuistihitin tai haarautumisennusteen virheen aiheuttaman viiveen takia.
Näin SMT toimii putkiston läpi
- Haku (fetch): Etupää valitsee yhden tai useamman säikeen, joista käskyjä haetaan. Valintapolitiikka voi olla vuorottelua, priorisointia tai dynaamista kuormitustietoista valintaa. Haarautumisennuste ja ohjevälimuistit ovat tyypillisesti jaettuja, mutta säietunnisteilla (TID) tagattuja.
- Purkamis- ja uudelleennimeäminen (decode & rename): Käskyt puretaan mikro-opeiksi ja niille annetaan fyysiset rekisterit. Jokaisella säikeellä on oma arkkitehtuurisen tilan näkymä ja oma rename-map. Mikro-opit merkitään säietunnisteella, jotta järjestys ja eristys säilyvät.
- Ajoitus ja lähetys (schedule/dispatch): Yhteiset varausjonot ja uudelleenjärjestyspuskurit (ROB) voivat palvella useita säikeitä. Lähetysleveys (issue width) määrää, montako mikro-oppia voidaan antaa yhdellä syklillä – SMT:ssä nämä voivat tulla eri säikeistä.
- Suoritus (execute): ALU-, vektori-, lataus/tallennus- ja muut yksiköt ovat jaettuja. Ressurssien jakaminen voi olla dynaamista tai osittain varattua (esim. porttien tai puskurien osittainen kiintiöinti).
- Valmistuminen ja commit: Jokaisen säikeen käskyt valmistuvat arkkitehtuurisesti oikeassa järjestyksessä (per-säie in-order commit), vaikka ytimen sisäinen suoritus olisi epäjärjestyksessä.
Hyödyt
- Parempi resurssien käyttöaste: Täyttää tyhjät suorituspaikat toisen säikeen töillä, mikä nostaa läpimenotehoa.
- Viiveiden peittäminen: Välimuistimissit, TLB-viiveet tai haarautumisvirheet eivät pysäytä koko ydintä, kun toinen säie voi edetä.
- Tehokkuus per watt: Usein 10–30 % lisäläpivirtaa pienellä lisäkulutuksella verrattuna yhden säikeen ajoon samalla kellotaajuudella.
Rajoitukset ja kompromissit
- Kontentio: Säikeet kilpailevat samoista resursseista (välimuistit, suoritusportit, muistikaistat). Jos molemmat kuormittavat samaa yksikköä (esim. vektoriyksiköt), hyöty voi jäädä pieneksi tai yksittäisen säikeen suoritus hieman hidastua.
- Reiluus ja priorisointi: Ytimellä on oltava politiikat, joilla se estää yhden säikeen nälkiintymisen ja säilyttää latenssikriittisten tehtävien vasteen.
- Virrankulutus ja lämpö: Lisääntynyt aktiivisuus nostaa kulutusta ja lämpöä, mikä voi laukaista kellotaajuuden alentamista tietyissä olosuhteissa.
SMT suhteessa IMT, CMT ja CMP
- IMT (lomitettu monisäikeistys) vaihtaa säiettä sykleittäin tai viiveen sattuessa. Yhdessä syklissä lähetetään vain yhden säikeen käskyjä.
- SMT lähettää saman syklin aikana useiden säikeiden käskyjä ja vaatii superskalaarisen etu- ja takapään.
- CMP (moniydin): useita erillisiä ytimiä samalla sirulla; kukin ydin suorittaa säikeitä itsenäisesti. SMT:tä voidaan yhdistää CMP:hen: jokaisessa ytimessä on 2–8 loogista säiettä.
- CMT -termiä käytetään kirjallisuudessa vaihtelevasti kuvaamaan sirutason monisäikeistystä tai arkkitehtuureja, joissa yhdistyy useita säikeitä per ydin ja useita ytimiä per siru. Oleellista on, hyödynnetäänkö säikeistystason rinnakkaistekniikkaa yhdellä ytimellä (SMT/IMT) vai useilla ytimillä (CMP) – tai näiden yhdistelmää.
Käyttöjärjestelmän ja ohjelmiston näkökulma
- Loogiset suorittimet: SMT-ytimessä näkyy 2–8 loogista prosessoria per fyysinen ydin. Ajoittimen on hyvä olla SMT-tietoinen, jotta se sijoittaa kuormat ensisijaisesti eri fyysisille ytimille ja hyödyntää SMT:tä vasta kun se on hyödyllistä.
- Kiinnitys ja affiniteetti: Prosesseja ja säikeitä voidaan kiinnittää loogisiin ytimiiin suorituskyvyn, eristämisen tai energiatehokkuuden vuoksi.
- Työkuormat: Palvelinkuormat, kääntäjät, renderöinti ja tietokantapalvelimet hyötyvät usein selvästi. Raskaasti vektorisoidut, yksittäistä säiettä kuormittavat tehtävät voivat hyötyä vähemmän.
Esimerkkejä toteutuksista
- Intel Hyper-Threading: SMT2 (kaksi loogista säiettä per ydin) monissa Core- ja Xeon-sukupolvissa.
- AMD Zen: SMT2 koko Zen-sukupolvassa, mahdollisuus kytkeä SMT pois tai rajoittaa se yhden säikeen tilaan.
- IBM POWER: SMT2/4/8 malleista riippuen, aggressiivinen resurssien jakaminen palvelinympäristöihin.
Turvallisuusnäkökulmat
- Kanavavuodot: Jaettujen resurssien takia SMT voi altistaa sivukanavahyökkäyksille (esim. välimuisti- ja porttikontention-ajoitukset). Joissakin ympäristöissä SMT rajoitetaan tai poistetaan käytöstä eristystarpeiden vuoksi.
- Lievennykset: Ydin- ja käyttöjärjestelmät voivat eristää säikeitä (esim. eri turvialueille ei ajoiteta samaan ytimeen), jakaa resursseja kiintiöillä tai käyttää aikajaettua monisäikeistystä, kun eristys on tärkeämpää kuin läpimeno.
Historia ja terminologia
SMT:n periaatteet esiteltiin tutkimuksessa 1990-luvulla. Ensimmäiset laajasti saatavilla olleet kaupalliset toteutukset tulivat 2000-luvun alussa palvelin- ja työpöytäprosessoreihin. Terminologia vaihtelee: esimerkiksi "Hyper-Threading" on SMT:n tuotemerkkinimi, ja "SIMT" (GPU-maailmassa) ei ole sama asia kuin SMT – SIMT kuvaa vektorimaisia, lukuisia rinnakkaisia laneja, kun taas SMT jakaa saman yleiskäyttöisen putkiston usean säikeen kesken.
Yhteenveto
- Mitä SMT on: Menetelmä, jolla ydin voi lähettää useiden säikeiden käskyjä samassa syklissä.
- Miksi se on hyödyllinen: Parantaa läpimenotehoa ja peittää viiveitä hyödyntämällä muuten tyhjänä seisovia resursseja.
- Milloin se auttaa: Parhaiten heterogeenisissa, muistiviiveherkissä tai palvelintyyppisissä kuormissa; vähäisemmin kun säikeet kilpailevat samoista yksiköistä.
- Miten se eroaa: IMT vuorottelee säikeitä ajassa, SMT yhdistää ne samassa syklissä; CMP lisää ytimiä sirulle, SMT lisää loogisia säikeitä per ydin. Yhdistelmät ovat nykypäivän tavallisin ratkaisu.
Esimerkkejä nykyaikaisista SMT-suorittimista
- Intel Pentium 4 oli ensimmäinen nykyaikainen pöytäprosessori, joka toteutti samanaikaisen monisäikeistyksen vuonna 2002 julkaistussa 3,06 GHz:n mallissa, ja se on sittemmin otettu käyttöön useissa prosessoreissa. Intel kutsuu toimintoa Hyper-Threading Technology (HTT) -tekniikaksi, ja se tarjoaa kahden säikeen perus-SMT-moottorin. Intel väittää jopa 30 prosentin nopeusparannusta verrattuna muuten samanlaiseen Pentium 4:ään ilman SMT:tä.
- Uusimmat MIPS-arkkitehtuurin mallit sisältävät SMT-järjestelmän, joka tunnetaan nimellä "MIPS MT".
- Toukokuussa 2004 julkistettu IBM POWER5 on saatavana joko kaksiytimisenä DCM:nä tai neliytimisenä tai kahdeksanytimisenä MCM:nä, jossa kussakin ytimessä on kahden säikeen SMT-moottori. IBM:n toteutus on edellistä kehittyneempi, koska se voi määrittää eri säikeille eri prioriteetit, se on hienojakoisempi ja SMT-moottori voidaan kytkeä dynaamisesti päälle ja pois päältä, jotta voidaan paremmin suorittaa sellaisia työtehtäviä, joissa SMT-prosessori ei parantaisi suorituskykyä. Tämä on IBM:n toinen yleisesti saatavilla olevan laitteiston monisäikeistyksen toteutus.
- Vuonna 2008 julkaistu Intel Atom on ensimmäinen Intelin tuote, jossa on SMT (jota markkinoidaan nimellä Hyper-threading) ilman tukea käskyjen uudelleenjärjestämiselle, spekulatiiviselle suoritukselle tai rekisterien uudelleennimeämiselle.
Aiheeseen liittyvät sivut
- Kierre (tietojenkäsittelytiede)
- Rinnakkaislaskenta
- Käskytason rinnakkaisuus
- Moniydinprosessorit
Kysymyksiä ja vastauksia
K: Mitä on samanaikainen monisäikeistäminen?
V: Samanaikainen monisäikeistäminen (SMT, Simultaneous Multithreading) on tekniikka, jolla parannetaan superskalaaristen suorittimien kokonaistehokkuutta laitteiston monisäikeistämisen avulla. Se mahdollistaa useiden itsenäisten suoritussäikeiden käytön nykyaikaisten tietokonearkkitehtuurien tarjoamien resurssien paremman hyödyntämisen.
Kysymys: Miten SMT vertautuu monitehtävään?
V: Monisäikeistäminen on käsitteeltään samanlainen kuin moniajo, mutta se toteutetaan nykyaikaisissa superskaalarisissa prosessoreissa suoritussäikeiden tasolla, kun taas moniajo toteutetaan prosessitasolla.
K: Mitkä ovat kaksi tapaa lisätä piirin sisäistä rinnakkaisuutta?
V: Kaksi tapaa lisätä piirin sisäistä rinnakkaisuutta ovat superskalaaritekniikka ja sirutason monisäikeistäminen (CMT).
K: Mitä erilaisia sirutason monisäikeistystekniikoita on?
V: Sirutason monilukuistamisen eri tyyppejä ovat Interleaved Multithreading (IMT), Fine-Grain Multithreading, Coarse Grain Multithreadin ja Simultaneous Multithreadin (SMT).
K: Miten voit erottaa IMT/SMT/CMP:n toisistaan?
V: Keskeinen tekijä IMT/SMT/CMP:n erottamisessa toisistaan on tarkastella, kuinka monta ohjetta prosessori voi antaa yhdessä syklissä ja kuinka monesta säikeestä ohjeet tulevat.
K: Minkä tyyppistä prosessoria on käytettävä SMT:tä varten?
V: SMT:tä varten on käytettävä superskalaarista prosessoria.
K: Minkä tyyppistä prosessoria käytetään Chip Level MultiProcessing -prosessoinnissa?
V: Chip Level MultiProcessing käyttää moniydinprosessoreita, jotka integroivat kaksi tai useampia superskalaarisia prosessoreita yhdelle piirille, joista kukin suorittaa säikeitä itsenäisesti.