Samaaegne mitmikeeramine, lühend SMT, on tehnika, millega parandatakse üliskalaarsete protsessorite üldist tõhusust riistvaralise mitmikeeramise abil. SMT võimaldab mitut sõltumatut täitmisniiti, et paremini kasutada kaasaegsete arvutiarhitektuuride pakutavaid ressursse.
Mitmesideseade on kontseptsioonilt sarnane multitaskingule, kuid seda rakendatakse moodsates superskalaarsetes protsessorites täitmisniidi tasandil.
Protsessori projekteerimisel on kaks võimalust suurendada kiibilikku paralleelsust väiksema ressursinõudlusega:
- Superskalaarne tehnika: mis püüab suurendada käsu taseme paralleelsust (ILP) mitme käsu üheaegse (nimetatakse: samaaegselt) täitmise kaudu; "samaaegselt" käskude saatmise (nimetatakse: käskude saatmine) kaudu mitmele protsessori sisse ehitatud üleliigsele täitmisüksusele.
- Kiibitasandi mitmikeeramise (CMT) tehnika: kasutatakse niiditasandi paralleelsust (TLP), et täita ühe protsessorikiibi piires korraga mitme niidi käske.
On mitmeid viise, kuidas toetada rohkem kui ühte niiti kiibi sees, nimelt:
- Interleaved multithreading (IMT) : mitme käsu järjestikune väljastamine erinevatest lõimedest, mida nimetatakse ka ajaliseks multithreadinguks. Seda võib jagada edasi peeneteraliseks või jämedateraliseks multitöötluseks sõltuvalt interleaved emissioonide sagedusest. Fine-grain multithreading väljastab erinevate niitide juhiseid iga tsükli järel, samas kui coarse-grain multithreading lülitub teise niidi juhiste väljastamisele ainult siis, kui praegune täitev niit põhjustab mõne pika latentsusega sündmuse (nt lehekülje viga jne). Jämedateraline mitmehäälne muutmine on tavalisem, kuna niidid vahetavad vähem konteksti. Protsessorite puhul, millel on üks torujuhtme tuumade kohta, on interleaved multithreading ainus võimalik viis, sest see võib anda välja ainult ühe käsu tsükli kohta.
- Samaaegne mitmikeeramine (SMT): Mitme käsu väljastamine mitmest lõngast ühes tsüklis. Selleks peab protsessor olema superskalaarne.
- Kiibitasandi multiprotsessor (CMP või multi-core processor): integreerib kaks või enam superskalaarset protsessorit ühele kiibile, millest igaüks täidab niite iseseisvalt.
- IMT/SMT/CMP mis tahes kombinatsioon
Nende eristamise võtmeteguriks on vaadata, kui palju käske protsessor suudab ühe tsükli jooksul välja anda ja kui paljudest lõimedest need käsud pärinevad.
Kuidas SMT töötab lihtsas keeles
SMT võimaldab ühel füüsilisel protsessori tuumal täita samaaegselt mitme tarkvaralise lõime (thread) käske, jagades tuuma sisemisi riistvaralisi ressursse (näiteks täitmisühikud, registerfailid, kaudsed bufrid ja vahemälu) lõimede vahel. Erinevalt superskalaarset käskude taseme paralleelsusest, kus püütakse ühe lõime sees samal ajal täita palju käske, võimaldab SMT koondada ühe tuuma läbi mitme lõime tekkiva töökoormuse ja nii saavutada suuremat läbilaset (throughput).
Peamised eelised
- Parendatud ressursikasutus: kui üks lõim ootab mälu või muid pikki latentsusi, saab teine lõim kasutada täitmisühikuid, mis muidu seisaksid tühjana.
- Suurem läbilase üldjuhul – olenevalt töökoormusest võib SMT anda märgatava jõudluse tõusu (tihti 15–30% mitme lõimega koormustel, mõnikord rohkem).
- Madal lisakulud: SMT annab paralleelsuse kasvatamise riistvaraliselt võrreldes täiendava füüsilise tuuma lisamisega (CMP) väiksema pindala- ja energiakuluga.
Puudused ja riskid
- Üksikniidi jõudlus võib halveneda: kuna lõimed jagavad samu täitmisressursse, võib üksikniidi latentsus või käitumine aeglustada seda lõime täitmist võrreldes puhta ühe lõime tuumaga.
- Ressurssikonfliktid: jagatud vahemälud ja täitmisühikud võivad tekkida kitsaskohtadeks, eriti väga sarnaste töökoormuste puhul.
- Turbekaidlus- ja turvariskid: SMT võib suurendada mikrotasandi külgkanalite (side-channel) ja andmete leket, sest kaks lõime (või kaks virtuaalset protsessorit) võivad jagada samu mikroarhitektuurikomponente. Seetõttu mõnedes turvalistes keskkondades või pilveõppeklastrites on SMT (nt Hyper-Threading) välja lülitatud.
Tüübid ja võrdlus teiste lähenemistega
SMT on üks viis TLP (thread-level parallelism) realiseerimiseks. Muud variandid:
- Interleaved multithreading (IMT) – ajapõhine niitide vahetamine, kus välja antakse käske ühe lõime kaupa tsükli kaupa (fine-grain) või harvem (coarse-grain). IMT nõuab tavaliselt vähem riistvara kui SMT, kuid ei kasuta superskalaarsust mitme käsu samaaegseks väljundiks.
- CMP / multi-core – füüsiliste tuumade lisamine samale kiibile; iga tuum saab eraldi täita lõime ega pea ressursse tingimata teistega jagama.
- Hübriidlahendused – tootjad kombineerivad tihti SMT-i, CMP-d ja superskalaarset projekteerimist (st mitme tuumaga kiibid, kus iga tuum toetab mitut riistvaralist lõime).
Võtmeindikaator on: kui palju käske saab protsessor ühe tsükli jooksul välja anda ning kui paljudest lõimedest need käsud pärinevad — see määrab, kas tegemist on IMT, SMT või lihtsalt superskalaarsusega.
Rakendused ja näited
- Intel Hyper-Threading — varasem ja laialt tuntud kommertsialiseeritud SMT-variatsioon, kasutusel alates Pentium 4 ajast; võimaldab tavaliselt 2 lõime ühe füüsilise tuuma kohta.
- AMD Zen arhitektuur — toetab samuti SMT-i (tavaliselt 2 lõime tuuma kohta).
- Suuremad serveriarhitektuurid (nt IBM POWER, SPARC) — toetavad sageli mitut riistvaralist lõime ühe tuuma kohta (4, 8 või rohkem) ja on optimeeritud palju-paralleelseteks koormateks.
Jõudlus ja optimeerimine
SMT-i kasu sõltub suuresti töökoormusest. Parima tulemuse saab siis, kui mitu lõime kasutavad protsessori erinevaid ressursse: näiteks üks lõim ootab mälu ja teine kasutab ALU-d. Kui mõlemad lõimed võistlevad samade üksuste üle (nt täpselt sama tüüpi aritmeetika või intensiivne L1 vahemälu kasutus), siis võib kasu olla väike või isegi negatiivne.
Operatsioonisüsteem ja ajastaja mängivad olulist rolli: kui OS jagab töökoormust teadlikult (nt ei pane kahte väga intensiivset lõime sama füüsilise tuuma mõlema lõime peale), paraneb kogu süsteemi jõudlus ja stabiilsus.
Praktilised soovitused
- Testige rakendusi reaalsete koormustega — üldised hinnangud ei pruugi kehtida spetsiifilistes olukordades.
- Turvalisuse nõudmiste korral hinnake SMT-keelamise mõju — mõnes majutuskeskkonnas on SMT välja lülitatud, et vähendada külgkanalite riske.
- Kui arendate kõrge jõudlusega tarkvara, mõõtke nii üksikniidi kui mitme-niidi jõudlust ning katsetage erinevaid tuumide/niitide sidumisi (CPU affinity).
Kokkuvõtteks: SMT on võimas tehnika, mis võib parandada protsessori läbilaset ja ressursikasutust, kuid selle tegelik kasu sõltub töökoormusest, arhitektuurist ja süsteemist tervikuna. SMP/CM P, IMT ja SMT on erinevad vahendid paralleelsuse saavutamiseks ning igaühel on oma kompromissid jõudluse, keerukuse ja energiatarbe osas.