Vienalaikis daugiasluoksniškumas (SMT): kas tai ir kaip veikia

Vienalaikis daugiasluoksniškumas (SMT): kas tai, kaip veikia, privalumai ir metodai (IMT, CMT) siekiant optimizuoti procesorių našumą ir efektyvumą.

Autorius: Leandro Alegsa

Vienalaikis daugiasluoksniškumas, sutrumpintai SMT, yra metodas, skirtas pagerinti bendrą superskalarinių procesorių efektyvumą naudojant aparatinį daugiasluoksniškumą. SMT leidžia vykdyti kelias nepriklausomas vykdymo gijas, kad būtų geriau išnaudojami šiuolaikinių kompiuterių architektūrų teikiami ištekliai. SMT sumažina tuščių ciklų skaičių, kai viena gija laukia duomenų ar atminties prieigos, ir padidina bendrą instrukcijų išėjimą per laiką (IPC — instructions per cycle).

Daugiagretainis darbas yra panašus į daugiaužduočių darbą, tačiau šiuolaikiniuose superskalariniuose procesoriuose jis įgyvendinamas vykdymo gijų lygmeniu. Tai reiškia, kad viename fiziniame branduolyje gali būti vykdomos kelios loginės gijos, kurios dalijasi vykdymo įrenginiais, registrų rinkiniu ir kešais — tai leidžia geriau užpildyti pipeline stadijas ir padidina našumą, ypač mišrioms arba kelių sričių apkrovoms.

Du pagrindiniai lygiagretumo plėtros būdai

Projektuojant procesorius yra du būdai, kaip padidinti lusto lygiagretumą, kai reikia mažiau išteklių:

  1. Superskalarinis metodas: kuriuo bandoma padidinti instrukcijų lygiagretumą (ILP), vienu metu vykdant kelias instrukcijas (vadinama: vienu metu); "vienu metu" siunčiant instrukcijas (vadinama: instrukcijų siuntimas) keliems nereikalingiems procesoriaus viduje esantiems vykdymo blokams.
  2. Daugiagretusis lusto lygmens (angl. Chip-level multithreading, CMT) metodas: Thread level parallelism (TLP) naudojimas, siekiant vienu metu viename procesoriaus luste vykdyti kelių gijų instrukcijas.

Skirtingi daugiasluoksniškumo tipai

Yra daugybė būdų, kaip luste palaikyti daugiau nei vieną giją, būtent:

  1. Perskirstytas daugiasluoksniškumas (angl. Interleaved multithreading, IMT) : kelių instrukcijų išdavimas skirtingais srautais, dar vadinamas laikiniu daugiasluoksniškumu. Jį dar galima skirstyti į smulkiagrūdį daugiasluoksnį arba stambiagrūdį daugiasluoksnį, priklausomai nuo tarpsluoksnių išdavimo dažnumo. Fine-grain multithreading po kiekvieno ciklo išduoda instrukcijas skirtingoms gijoms, o coarse-grain multithreading pereina prie instrukcijų išdavimo iš kitos gijos tik tada, kai šiuo metu vykdoma gija sukelia tam tikrus ilgo uždelsimo įvykius (pvz., puslapio klaidą ir pan.). Šiurkščiagrūdis daugiasluoksniškumas dažniau naudojamas dėl mažesnio konteksto perjungimo tarp gijų. Procesoriuose, kuriuose kiekviename branduolyje yra vienas vamzdynas, daugiasluoksnė tinklaveika yra vienintelis įmanomas būdas, nes per ciklą galima išduoti tik vieną instrukciją.
  2. Vienalaikis daugiasluoksniškumas (angl. Simultaneous multithreading, SMT): Vieno ciklo metu išduodamos kelios instrukcijos iš kelių gijų. Kad tai būtų galima padaryti, procesorius turi būti superskalarus.
  3. Čipo lygmens daugiaprocesorius (CMP arba daugiabranduolinis procesorius): į vieną lustą integruojami du ar daugiau superskalarinių procesorių, kurių kiekvienas savarankiškai vykdo gijas.
  4. Bet koks IMT/SMT/CMP derinys

Pagrindinis veiksnys, padedantis juos atskirti, yra tai, kiek instrukcijų procesorius gali išduoti per vieną ciklą ir iš kiek gijų tos instrukcijos gaunamos. Pvz., vienas CMP branduolys be SMT vykdo vieną giją vienu metu, superskalarus branduolys be SMT gali išduoti kelias instrukcijas iš tos pačios gijos, o SMT leidžia per ciklą išduoti instrukcijas iš skirtingų gijų tuo pačiu metu.

Kaip SMT veikia techniniu požiūriu

SMT įdiegimas reikalauja tam tikrų aparatinių sprendimų:

  • Instrukcijų išėmimas (fetch) ir išdavimo (issue) etapai turi palaikyti kelių gijų bilietų užklausas, kad viename cikle būtų galima pasiimti instrukcijas iš skirtingų gijų.
  • Registrų rinkinio dalis gali būti bendra, todėl dažnai naudojama papildoma logika (pvz., registrų priskyrimas arba virtualūs registrai) gijų kontekstams atskirti.
  • Reikia valdyti bendrinamus vykdymo įrenginius (ALU, FPU, masyvai) ir spręsti konfliktus, kai kelios gijos nori tuo pačiu metu naudoti tą patį resursą.
  • Išorinių išteklių valdymas — kešų, TLB ir magistralės — stipriai įtakoja našumą ir gali sukelti tarpgijų tarpusavio trukdymą (contention).
  • Out-of-order (O-o-O) vykdymas ir register renaming paprastai dirba kartu su SMT, kad būtų užtikrintas didžiausias instrukcijų maišymo (interleaving) naudingumas be duomenų konfliktų.

Privalumai

  • Geresnis procesoriaus vidinių išteklių išnaudojimas — SMT leidžia užpildyti pipeline etapus, kai viena gija laukia užklausų ar duomenų.
  • Išauga bendra per laiką apdorojamų instrukcijų skaičius (througput), ypač mišriose arba daug mažų užduočių apkrovose.
  • Gali pagerinti atsako laiką serverinėse ir multivartotojų sistemose, kur vienu metu veikia daug gijų.

Trūkumai ir apribojimai

  • Konteksto dalinimas — gijos dalijasi cache, TLB ir vykdymo įrenginiais, todėl gali kilti našumo degradacija tam tikrose vienlavikėse (single-threaded) ar cache jautriose užduotyse.
  • Sudėtingesnė procesoriaus logika ir didesnė dizaino sudėtingumas — SMT reikalauja papildomų valdiklių ir sprendimų dėl resursų dalijimo.
  • Saugumo rizikos — bendri aparatiniai ištekliai suteikia galimybes laiko-laukimo ir kešų pagrindu veikiančioms šoninėms atakoms (side-channel attacks). Dėl to kai kurios saugumo politikos leidžia laikinai išjungti SMT.

Praktiniai pavyzdžiai ir saugumo aspektai

SMT plačiai naudojamas šiuolaikiniuose procesoriuose: Intel prekiauja savo sprendimu kaip Hyper-Threading, o AMD naudoja pavadinimą SMT. Realios naudos dydis priklauso nuo programos pobūdžio: multi-threaded serverio apkrovos dažnai gauna didelį prieaugį, o intensyvios vienos gijos skaičiavimo užduotys — mažiau arba netgi nedidėja.

Dėl saugumo šoninių kanalų atakų (pvz., cache timing, branch predictor leakage) kai kurios organizacijos laikinai išjungia SMT ant jautrių sistemų arba taiko OS ir hypervisor lygiu QoS bei izoliavimo priemones. Kita alternatyva — aparatinės įrangos pataisos ir tvarkyklių (microcode) atnaujinimai, mažinantys atakų paviršių plotą.

Kada verta įjungti arba išjungti SMT

  • Įjunkite SMT, kai vykdyta apkrova yra daugialypė, daug lygiagrečių užduočių arba serverinės darbo krūviai — dažnai padidina bendrą pralaidumą.
  • Apsvarstykite išjungimą, jei veikia kritinės vienos gijos programos, kurioms svarbiausias maksimalus vienos gijos našumas arba kai stebimas intensyvus cache contentioun, arba jei saugumo politika griežtai draudžia bendrų resursų naudojimą.

Apibendrinant, SMT yra galingas būdas padidinti procesoriaus efektyvumą ir pralaidumą derinant superskalarinį vykdymą ir kelių gijų eksploatavimą tame pačiame fiziniame branduolyje. Tinkamai pritaikytas jis ženkliai pagerina bendrą našumą, tačiau kartu reikalauja kruopštaus resursų valdymo bei dėmesio saugumo ir izoliavimo klausimams.

Šiuolaikinių SMT procesorių pavyzdžiai

  1. "Intel Pentium 4" buvo pirmasis šiuolaikinis stalinių kompiuterių procesorius, kuriame buvo įdiegtas vienalaikis daugiajutiklis duomenų srautų valdymas (nuo 2002 m. išleisto 3,06 GHz modelio ir vėliau įdiegtas daugelyje kitų procesorių). Šią funkciją "Intel" vadina "Hyper-Threading Technology" (HTT) ir pateikia pagrindinį dviejų gijų SMT variklį. "Intel" teigia, kad, palyginti su identišku "Pentium 4" be SMT, jo sparta padidėja iki 30 %.
  2. Naujausiuose MIPS architektūros projektuose yra SMT sistema, vadinama "MIPS MT".
  3. 2004 m. gegužę paskelbta IBM POWER5 yra dviejų branduolių DCM arba keturių branduolių ar 8 branduolių MCM, o kiekvienas branduolys turi dviejų gijų SMT variklį. IBM realizacija yra sudėtingesnė nei ankstesnės, nes gali priskirti skirtingą prioritetą skirtingoms gijoms, yra smulkesnė, o SMT variklį galima dinamiškai įjungti ir išjungti, kad būtų galima geriau vykdyti tas darbo apkrovas, kurių našumo SMT procesorius nepadidintų. Tai antrasis IBM įgyvendintas visuotinai prieinamas aparatūrinis daugiasluoksniškumas.
  4. 2008 m. išleistas "Intel Atom" yra pirmasis "Intel" gaminys, kuriame įdiegta SMT (parduodamas kaip "Hyper-threading"), tačiau nepalaikomas instrukcijų eiliškumo keitimas, spekuliacinis vykdymas ar registrų pervadinimas.

Susiję puslapiai

Klausimai ir atsakymai

K: Kas yra vienalaikis daugiasluoksniškumas?


A: Vienalaikis daugiasluoksniškumas (angl. Simultaneous multithreading, SMT) - tai metodas, skirtas pagerinti bendrą superskalarinių procesorių efektyvumą naudojant aparatinį daugiasluoksniškumą. Jis leidžia vykdyti kelias nepriklausomas vykdymo gijas, kad būtų geriau išnaudojami šiuolaikinių kompiuterių architektūrų teikiami ištekliai.

Klausimas: Kaip SMT galima palyginti su daugiapakopiu valdymu?


A.: Daugiagretaus duomenų srauto koncepcija panaši į daugiaužduočių, tačiau šiuolaikiniuose superskalariniuose procesoriuose jis įgyvendinamas vykdymo gijų lygmeniu, o daugiaužduotys įgyvendinamos procesų lygmeniu.

K: Kokie yra du būdai lusto lygiagretumui padidinti?


A: Du lygiagretumo didinimo luste būdai yra superskalarinis metodas ir lusto lygmens daugiajuostis procesas (CMT).

K: Kokie yra keli skirtingi lusto lygmens daugiasluoksniškumo tipai?


A.: Skirtingi lusto lygmens daugiasluoksniškumo tipai yra šie: "Interleaved Multithreading" (IMT), "Fine-Grain Multithreading", "Coarse Grain Multithreadin" ir "Simultaneous Multithreadin" (SMT).

K.: Kaip galima atskirti IMT/SMT/CMP?


A: Pagrindinis veiksnys, leidžiantis atskirti IMT/SMT/CMP, yra tai, kiek instrukcijų procesorius gali išduoti per vieną ciklą ir iš kiek gijų tos instrukcijos ateina.

K: Kokio tipo procesorius turi būti naudojamas SMT?


A: SMT turi būti naudojamas superskalarus procesorius.

K: Kokio tipo procesorius naudojamas Chip Level MultiProcessing?


A.: "Chip Level MultiProcessing" naudoja daugiabranduolinius procesorius, kurie viename luste integruoja du ar daugiau superskalarinių procesorių, kurių kiekvienas savarankiškai vykdo gijas.


Ieškoti
AlegsaOnline.com - 2020 / 2025 - License CC3