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:

  1. 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.
  2. 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:

  1. 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.
  2. Samanaikainen monisäikeistäminen (SMT): Annetaan useita ohjeita useista säikeistä yhdessä syklissä. Prosessorin on oltava superskalaarinen, jotta se voi tehdä näin.
  3. Sirutasoinen moniprosessointi (CMP tai moniydinprosessori): Yhdistää kaksi tai useampia superskalaarisia prosessoreita yhdelle sirulle, joista kukin suorittaa säikeitä itsenäisesti.
  4. 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.