Multithreading simultan

Procesorul Intel Pentium 4 a fost primul procesor desktop modern care a implementat multithreading-ul simultan, începând cu modelul de 3,06 GHz lansat în 2002 și introdus de atunci într-o serie de procesoare ale acestora. Intel numește această funcționalitate Hyper-Threading Technology, și oferă un motor SMT de bază cu două fire. Intel pretinde o îmbunătățire a vitezei cu până la 30% față de un Pentium 4 identic, fără SMT. Îmbunătățirea performanțelor constatată depinde foarte mult de aplicație; cu toate acestea, atunci când se rulează două programe care necesită întreaga atenție a procesorului, se poate părea că unul sau ambele programe încetinesc ușor atunci când Hyper-threading este activat. Acest lucru se datorează sistemului de reluare al Pentium 4 care leagă resurse valoroase de execuție, crescând concurența pentru resurse precum lățimea de bandă, memoria cache, TLB, reordonarea intrărilor în buffer, egalizând resursele procesorului între cele două programe, ceea ce adaugă o cantitate variabilă de timp de execuție. Nucleul Pentium 4 Prescott a câștigat o coadă de reluare, ceea ce reduce timpul de execuție necesar pentru sistemul de reluare. Acest lucru este suficient pentru a depăși complet această lovitură de performanță.

Cele mai recente modele de arhitectură MIPS de la Imagination Technologies includ un sistem SMT cunoscut sub numele de „MIPS MT”. MIPS MT prevede atât elemente de procesare virtuală cu greutate mare, cât și microthread-uri hardware mai ușoare. RMI, un start-up cu sediul în Cupertino, este primul furnizor MIPS care oferă un procesor SOC bazat pe opt nuclee, fiecare dintre acestea rulând patru fire de execuție. Firele pot fi rulate în modul „fine-grain”, în care un fir diferit poate fi executat în fiecare ciclu. De asemenea, firelor li se pot atribui priorități. Procesoarele MIPS de la Imagination Technologies au câte două fire SMT pe nucleu.

Blue Gene/Q de la IBM are un SMT cu 4 căi.

Modul IBM POWER5, anunțat în mai 2004, este disponibil fie ca un modul dual core dual-chip (DCM), fie ca un modul multi-chip quad-core sau oct-core (MCM), fiecare nucleu incluzând un motor SMT cu două fire. Implementarea IBM este mai sofisticată decât cele anterioare, deoarece poate atribui o prioritate diferită diferitelor fire de execuție, este mai fină, iar motorul SMT poate fi activat și dezactivat în mod dinamic, pentru a executa mai bine acele sarcini de lucru în care un procesor SMT nu ar crește performanța. Aceasta este a doua implementare de către IBM a multithreading-ului hardware general disponibil. În 2010, IBM a lansat sisteme bazate pe procesorul POWER7 cu opt nuclee, fiecare dintre acestea având patru fire inteligente simultane (Simultaneous Intelligent Threads). Acesta comută modul de threading între un fir, două fire sau patru fire, în funcție de numărul de fire de proces care sunt programate în acel moment. Acest lucru optimizează utilizarea nucleului pentru un timp de răspuns minim sau un randament maxim. IBM POWER8 are 8 fire inteligente simultane pe nucleu (SMT8).

IBM z13 are două fire pe nucleu (SMT-2).

Deși multe persoane au raportat că UltraSPARC T1 de la Sun Microsystems (cunoscut sub numele de „Niagara” până la lansarea sa din 14 noiembrie 2005) și defunctul procesor cu nume de cod „Rock” (anunțat inițial în 2005, dar după multe amânări, anulat în 2010) sunt implementări ale SPARC axate aproape în întregime pe exploatarea tehnicilor SMT și CMP, Niagara nu folosește de fapt SMT. Sun se referă la aceste abordări combinate drept „CMT”, iar conceptul general drept „Throughput Computing”. Niagara are opt nuclee, dar fiecare nucleu are doar un singur pipeline, așa că, de fapt, utilizează multithreading cu granulație fină. Spre deosebire de SMT, unde instrucțiunile de la mai multe fire de execuție împart fereastra de emitere în fiecare ciclu, procesorul utilizează o politică de tip „round robin” pentru a emite instrucțiuni de la următorul fir de execuție activ în fiecare ciclu. Acest lucru îl face să fie mai asemănător cu un procesor cu butoi. Procesorul Rock de la Sun Microsystems este diferit, are nuclee mai complexe care au mai mult de un pipeline.

Procesorul Oracle Corporation SPARC T3 are opt fire de execuție cu granulație fină pe nucleu, SPARC T4, SPARC T5, SPARC M5, M6 și M7 au opt fire de execuție cu granulație fină pe nucleu, dintre care două pot fi executate simultan.

Fujitsu SPARC64 VI are Vertical Multithreading (VMT) cu granulație grosieră, SPARC VII și cele mai noi au SMT cu 2 căi.

Intel Itanium Montecito a folosit multithreading cu granulație grosieră, iar Tukwila și cele mai noi folosesc SMT cu 2 căi (cu multithreading cu două domenii).

Intel Xeon Phi are 4 căi SMT (cu multithreading multiplu în timp) cu fire bazate pe hardware care nu pot fi dezactivate, spre deosebire de Hyperthreading obișnuit. Intel Atom, lansat în 2008, este primul produs Intel care dispune de SMT pe 2 căi (comercializat ca Hyper-Threading) fără a suporta reordonarea instrucțiunilor, execuția speculativă sau redenumirea registrelor. Intel a reintrodus Hyper-Threading odată cu microarhitectura Nehalem, după absența sa pe microarhitectura Core.

Microarhitectura AMD Bulldozer FlexFPU și memoria cache L2 partajată sunt multithreaded, dar nucleele întregi din modul sunt single threaded, deci este doar o implementare SMT parțială.

Microarhitectura AMD Zen are SMT cu 2 căi.

Arhitectura VISC utilizează stratul software virtual (strat de traducere) pentru a expedia un singur fir de instrucțiuni către Global Front End, care împarte instrucțiunile în threadlets hardware virtuale care sunt apoi expediate către nuclee virtuale separate. Aceste nuclee virtuale le pot trimite apoi către resursele disponibile pe oricare dintre nucleele fizice. Mai multe nuclee virtuale pot împinge threadlets în bufferul de reordonare al unui singur nucleu fizic, care poate împărți instrucțiunile parțiale și datele din mai multe threadlets prin porturile de execuție în același timp. Fiecare nucleu virtual ține evidența poziției ieșirii relative. Această formă de multithreading poate crește performanța unui singur thread prin faptul că permite unui singur thread să utilizeze toate resursele CPU. alocarea resurselor este dinamică la un nivel de latență de aproape un singur ciclu (1-4 cicluri în funcție de modificarea alocării în funcție de nevoile individuale ale aplicației. Prin urmare, dacă două nuclee virtuale concurează pentru resurse, există algoritmi corespunzători pentru a determina ce resurse trebuie alocate și unde.