Simultánny multithreading, skratka SMT, je technika na zlepšenie celkovej účinnosti superskalárnych procesorov s hardvérovým multithreadingom. SMT umožňuje vykonávať viacero nezávislých vlákien s cieľom lepšie využiť zdroje poskytované modernými počítačovými architektúrami. V praxi to znamená, že v jednom takte môže jadro vyslať a čiastočne alebo úplne vykonať inštrukcie pochádzajúce z viacerých vlákien, čím sa zvyšuje celkový priepustnosť čipu.
Viacvláknovosť je podobná koncepcii multitaskingu, ale v moderných superskalárnych procesoroch je implementovaná na úrovni vykonávania vlákien. Zatiaľ čo multitasking prechádza medzi procesmi alebo vláknami na úrovni operačného systému, SMT zdieľa a plánuje vykonávanie viacerých kontextov priamo v hardvéri procesora.
Princíp fungovania
Základnou myšlienkou SMT je znížiť premŕtvenie (idle time) rôznych častí procesora pri výkone inštrukcií jedného vlákna. Superskalárne jadro obsahuje množstvo vykonávacích jednotiek (ALU, FPU, load/store, atď.), rozličné pipeline a buffre. Jedno vlákno často nedokáže využiť všetky tieto zdroje súčasne (napríklad kvôli závislostiam medzi inštrukciami alebo čakaní na pamäť). SMT dovolí, aby inštrukcie z ďalších vlákien zaplnili tieto voľné cykly a jednotky, čím sa zvyšuje vyťaženosť jednotiek a celková priepustnosť.
Implementácia SMT obyčajne zahŕňa:
- replikáciu alebo rozšírenie kontextových registrov (register file, program counter, procesné stavy) pre každé podporované vlákno,
- mechanizmy arbitráže pri prideľovaní vykonávacích jednotiek a issue slotov medzi vláknami,
- zdieľané cache, TLB a medzipamäte, ktoré môžu byť zdrojom kolízií aj úspor pri zdieľaní dát.
Spôsoby zvýšenia paralelizmu na čipe
- Superskalárna technika: snaží sa zvýšiť paralelizmus na úrovni inštrukcií (ILP) vykonávaním viacerých inštrukcií súčasne. Superskalárne jadro môže vyslať viacero inštrukcií do rôznych vykonávacích jednotiek v jednom cykle a tým dosiahnuť vyšší výkon pri jednom vlákne, pokiaľ sú inštrukcie nezávislé.
- Technika viacvláknového spracovania na úrovni čipu (Chip-level multithreading - CMT): využíva paralelnosť na úrovni vlákien (Thread level parallelism - TLP) s cieľom vykonávať inštrukcie z viacerých vlákien v rámci jedného procesorového čipu súčasne. CMT zahŕňa riešenia ako IMT, SMT alebo kombinácie s viacjadrovými návrhmi.
Typy multithreadingu
Existuje niekoľko prístupov, ako v čipe podporiť viac ako jedno vlákno. Medzi hlavné patria:
- Interleaved multithreading (IMT): časové striedanie vydávania inštrukcií z rôznych vlákien (temporal multithreading). IMT sa delí na:
- Fine-grain multithreading – prepínanie vlákien po každom cykle. Toto efektívne skracuje latencie spôsobené čakaniami (napr. na pamäť) a znižuje dopad vetvenia, ale vyžaduje časté prepínanie kontextu a väčšie hardvérové nároky na rýchlu arbitráž.
- Coarse-grain multithreading – prepínanie vlákien len ak aktuálne vlákno čaká na dlhú udalosť (napr. cache miss alebo chyba stránky). Znižuje počet kontextových prepnutí, ale menej plynule využíva voľné cykly procesora.
- Simultánny multithreading (SMT): umožňuje vydanie viacerých inštrukcií z rôznych vlákien v tom istom cykle. Preto na fungovanie vyžaduje superskalárne jadro schopné súčasne spracovať viac inštrukcií. SMT maximalizuje využitie vnútorných zdrojov a zvyšuje priepustnosť pri zvládnutí vyššej zložitosti arbitráže medzi vláknami.
- Multiprocessing na úrovni čipu (CMP alebo viacjadrový procesor): integruje dva alebo viac superskalárnych čipov (jadier) do jedného balíka, pričom každé jadro vykonáva vlákna nezávisle. CMP zvyšuje paralelizmus na úrovni jadier, pričom kombinovanie CMP so SMT alebo IMT môže viesť k veľmi vysokému počtu súbežne aktívnych vlákien.
- Akákoľvek kombinácia IMT/SMT/CMP – skutočné architektúry často používajú kombinované prístupy (napr. viacjadrové čipy, pričom každé jadro podporuje SMT pre 2 alebo viac vlákien).
Výhody a obmedzenia SMT
Výhody:
- Zvýšenie celkovej priepustnosti (throughput) bez výrazného nárastu počtu jadier alebo frekvencie.
- Lepšie využitie vykonávacích jednotiek a pipeline pri zmiešaných záťažiach a pri aplikáciách s vysokými oneskoreniami pamäte.
- Softvér väčšinou nevyžaduje úpravy — operačný systém a scheduler vidia logické procesory a prideľujú im vlákna bežným spôsobom.
Obmedzenia a nevýhody:
- Zdieľanie zdrojov (cache, TLB, pamäťová šírka pásma, interné bufry) môže viesť ku kontaminácii výkonu medzi vláknami a nižšej výkonnosti pre niektoré typy pracovných záťaží.
- Zložitejšie návrhy a vyššie požiadavky na arbitráž a plánovanie v rámci jadra.
- V niektorých prípadoch môže SMT zhoršiť latenciu kritických jednovláknových úloh, pretože zdroje sú prerozdeľované medzi viac vlákien.
- Bezpečnostné a súkromnostné riziká – zdieľané microarchitektonické prvky môžu otvárať cestičky pre vedľajšie kanály (side-channel) alebo spektrálne útoky medzi vláknami.
Implementácie a príklady
V praxi sú známe implementácie SMT napríklad:
- Intel Hyper-Threading — formálna implementácia SMT, kde každé fyzické jadro prezentuje operačnému systému dva logické procesory (typicky 2 vlákna na jadro).
- AMD Zen — používa SMT s dvoma vláknami na jadro v rodine Zen/Zen2/Zen3, pričom každé jadro spravuje dva kontexty.
- IBM POWER — niektoré implementácie (POWER7 a novšie) podporujú viacnásobné SMT (až 8 vlákien na jadro v určitých variantách), čo je vhodné pre serverové a databázové záťaže.
Pri týchto implementáciách platí, že výhody SMT sú najvýraznejšie pri záťažiach, ktoré majú vysoké čakania na pamäť alebo veľkú mieru paralelizmu, menej výhodné sú pri ťažko konkurentných aplikáciách, ktoré intenzívne súťažia o cache a pamäťovú šírku pásma.
Dizajnérske úvahy
Pri návrhu SMT jadra treba zvážiť:
- Koľko vlákien bude podporovaných na jadro (trade-off medzi komplexnosťou a prínosom).
- Ktoré zdroje budú striktne zdieľané a ktoré čiastočne alebo úplne replikované (napr. register file vs. decode jednotky).
- Algoritmus prideľovania issue slotov a priorít medzi vláknami (fairness vs. maximalizácia throughputu).
- Riadenie spotreby energie — viac aktívnych vlákien môže zvýšiť spotrebu, preto návrh často zahŕňa mechanizmy dynamickej adaptácie aktívnych vlákien.
Dopad na softvér a bezpečnosť
Pre vývojárov a administrátorov platí:
- Operačný systém a plánovače zvyčajne vidia logické procesory a alokujú na ne vlákna bez potreby zásahu aplikácií.
- Pre optimálny výkon sa môže oplatiť priradiť kritické jednovláknové úlohy na samostatné logické procesory alebo vypnúť SMT v určitých prostrediach (napr. pri špecifických výskumných alebo bezpečnostných požiadavkách).
- Pri zdieľaní SMT medzi nedôveryhodnými používateľmi treba zvážiť riziká vedľajších kanálov a prípadne izolovať alebo zakázať SMT pre citlivé systémy.
Kedy SMT pomôže najviac: pri veľkom počte ľahkých vlákien so striedavým čakaním na I/O alebo pamäť, v serverových aplikáciách, webových službách a pri paralelných dátových spracovaniach. Menej užitočné je pri úlohách veľmi závislých na cache alebo pri striktne jednovláknových latencne kritických úlohách.
Kľúčovým faktorom na ich rozlíšenie je pozrieť sa na to, koľko inštrukcií môže procesor vydať v jednom cykle a koľko vlákien z nich pochádza. SMT predstavuje jednu z efektívnych stratégií zvýšenia využitia moderných procesorových zdrojov, pričom reálny prínos závisí od typu záťaže, návrhu čipu a správy zdrojov operačným systémom.