Simultaneous multithreading, forkortelse SMT, er en teknik til at forbedre den samlede effektivitet af superskalare CPU'er med hardware multithreading. SMT gør det muligt at udføre flere uafhængige tråde for bedre at udnytte de ressourcer, som moderne computerarkitekturer stiller til rådighed. Kort sagt forsøger SMT at øge processorens gennemløb (throughput) ved at fylde tomme udførelsesenheder og udnytte pipeline-perioder, hvor en enkelt tråd ellers ville vente.
Multithreading svarer i princippet til multitasking, men implementeres på trådniveau i moderne superskalære processorer. Hvor multitasking typisk roterer mellem processer/tråde på operativsystemsniveau, lader SMT flere tråde køre samtidigt på samme fysiske kerne ved at dele pipeline- og udførelsesressourcer.
I processordesign er der to måder at øge on-chip-paralleliteten på med mindre ressourcekrav:
- Superscalar teknik: denne tilgang øger paralleliteten på instruktionsniveau (ILP) ved at udføre flere instruktioner på samme tid (kaldet samtidig); ved "samtidig" at sende instruktioner (kaldet: instruktionsfordeling) til flere redundante udførelsesenheder, der er indbygget i processoren. Superskalaritet kræver avanceret afhængighedsdetektion, omordning og registerstyring for at få flere instruktioner til at køre parallelt med korrekt programsemantik.
- CMT-teknik (chip-level multithreading): anvendelse af trådniveauparallelisme (TLP) for at udføre instruktioner fra flere tråde i en processorchip på samme tid. CMT kan realiseres som SMT, CMP (multi-core) eller en kombination af begge.
Der er flere konkrete måder at støtte mere end én tråd i en chip på:
- Interleaved multithreading (IMT): Interleaved udstedelse af instruktioner fra forskellige tråde, også kaldet temporal multithreading. IMT kan opdeles i fine-grain og coarse-grain afhængigt af, hvor ofte skift mellem tråde sker. Fine-grain multithreading udsteder instruktioner fra forskellige tråde i hver cyklus, hvilket hjælper med at skjule korte ventetider som branch-misses. Coarse-grain multithreading skifter kun tråd, når den aktuelle tråd rammer en længere ventetid, f.eks. en cache-miss eller page fault; dette reducerer hyppigheden af kontekstskift og kan give lavere overhead. For processorer med én pipeline pr. kerne er interleaved multithreading ofte den eneste mulighed, fordi sådanne kerner typisk kun kan udstede op til én instruktion pr. cyklus.
- Simultan multithreading (SMT): Udstedelse af flere instruktioner fra flere tråde i én cyklus. For at kunne gøre dette skal processoren være superskalær, så den har flere udførelsesenheder og kan afvikle flere instruktioner parallelt. SMT kan udnytte ressourcer, som ellers ville stå ledige i en enkelt-trådet superskalar kerne (f.eks. ALU'er, load/store-enheder og branch-predictorer).
- Multiprocessing på chipniveau (CMP eller multi-core-processor): Integrerer to eller flere superskalare processorer i en chip, som hver især udfører tråde uafhængigt. CMP øger parallelkapaciteten ved at kopiere hele kerner, hvilket ofte giver bedre isolation mellem tråde end SMT, men til en højere hardwareomkostning pr. ekstra trådkapacitet.
- En hvilken som helst kombination af IMT/SMT/CMP kan anvendes for at afbalancere hardwareomkostninger, ydeevne og kompleksitet. Moderne designs bruger ofte en kombination: flere kerner (CMP), hver med superskalar udførelse og SMT understøttelse af flere logiske tråde pr. kerne.
Den vigtigste faktor til at skelne disse teknikker er, hvor mange instruktioner processoren kan udstede i en cyklus, og hvor mange tråde instruktionerne kommer fra. Andre væsentlige forskelle og overvejelser inkluderer:
- Fordele ved SMT: Bedre udnyttelse af udførelsesenheder, højere throughput for multitrådede eller blandede arbejdsbelastninger, hurtigere skift mellem uafhængige instruktionsstrømme og ofte bedre energieffektivitet pr. arbejdeenhed.
- Ulemper og begrænsninger: Ressourcekonkurrence (cache, TLB, udførelsesenheder), øget hardwarekompleksitet (registerfil-håndtering, scoreboarding) og potentielle fairness-problemer hvor en tråd kan dominere delte ressourcer. Derudover kan SMT forværre sidekanal- og informationslækageproblemer i sikkerhedssammenhæng.
- OS- og scheduler-krav: Operativsystemer og virtualiseringssoftware skal være SMT-bevidste for at planlægge tråde effektivt—fx at undgå at placere to tunge tråde, der konkurrerer om samme ressourcer, på de logiske tråde tilhørende samme fysiske kerne.
- Hvornår hjælper SMT mest? Arbejdsbelastninger med betydelig parallelitet men varierende brug af arkitekturressourcer (fx webservere, applikationsservere, visse HPC-opgaver) ser ofte tydelige gevinster. I enkelttråds-latensfølsomme opgaver kan SMT i værste fald give negativ effekt på latenstider, hvis ressourcedeling ikke håndteres.
Praktiske eksempler og implementeringer: Intel har markedsført SMT under navnet Hyper-Threading; moderne AMD Zen-kerner understøtter også SMT; og IBM POWER-processorer har længe tilbudt avancerede multithreading-varianter. Implementationsdetaljer varierer (f.eks. antallet af logiske tråde pr. kerne, om registerbanker er kopieret eller delte, og hvordan branch-predictor-state håndteres).
Måling af SMT-effekt bør baseres på relevante metrikker: throughput (instruktioner per cyklus, IPC), latenstid for kritiske tråde, energieffektivitet og ressourceudnyttelse (cache-miss-rate, udførelsesenhedernes belastning). I praksis anbefales tests med repræsentative arbejdsbelastninger for at afgøre, om SMT giver en nettofordel i en given kontekst.
Samlet set er SMT et kraftfuldt værktøj til at øge procesorydelsen under mange arbejdsbelastninger ved at udnytte eksisterende hardware mere fuldt ud. Valget mellem IMT, SMT og CMP (eller en kombination) afhænger af designmål, omkostningsbegrænsninger, målrettede arbejdsbelastninger og sikkerhedsovervejelser.