Multithreading temporar

Multithreadingul temporal este una dintre cele două forme principale de multithreading  care poate fi implementat în hardware-ul procesoarelor. A doua formă este multithreading simultan . Diferența dintre aceste două forme este numărul maxim de fire care se execută în fiecare etapă a conductei de calcul într-un anumit ciclu de tact al procesorului. Cu multithreading temporar, un singur thread se execută la un moment dat, iar cu multithreading simultan, există mai multe. Unii experți folosesc termenul de super-threading ca sinonim pentru multithreading tranzitoriu. [unu]

Pe un procesor convențional, controlul firelor este gestionat de sistemul de operare . Firul este executat până când apare o întrerupere hardware , are loc un apel de sistem sau până când expiră timpul alocat pentru acesta de sistemul de operare. După aceea, procesorul trece la codul sistemului de operare, care salvează starea firului de execuție (contextul său) și trece la starea următorului fir de execuție din coadă, căruia i se acordă și timp pentru a fi executat. Cu o astfel de multithreading, un număr suficient de mare de cicluri de procesor este cheltuit pe codul sistemului de operare care schimbă contextele. Dacă suportul pentru fire este implementat în hardware, atunci procesorul însuși va putea comuta între fire și, în cazul ideal, executa mai multe fire simultan pentru fiecare ciclu de ceas.

Opțiuni

Multithreadingul temporal este împărțit în două sub-forme principale:

Multithreading cu granulație grosieră ( CGMT) , multithreading blocat )

Un singur thread rulează într-o conductă de procesor pentru o perioadă lungă de timp. În momentul în care acest thread are nevoie de date din memorie, de exemplu, iar datele nu sunt în cache, procesorul salvează starea firului de execuție și trece automat la un alt thread până când acesta are nevoie și de ceva din memorie. Un alt motiv pentru trecerea la un alt thread poate fi o limită dată a numărului de cicluri de procesor. Astfel, conducta procesorului nu este inactiv și este aproape întotdeauna ocupată cu executarea codului unui anumit thread.

Granulație fină ( FGMT ) , multithreading intercalat )

Procesorul comută între firele de execuție de program la fiecare ciclu de ceas. Multithreading cu granulație fină garantează execuția tuturor thread-urilor alocate procesorului. Execuția fiecărui fir specific încetinește, dar debitul general al procesorului crește. Procesoarele multi-threaded care implementează multi-threading cu granulație fină sunt bune la rularea programelor în care există multe fire de execuție, cum ar fi servere de baze de date, servere web, servere de aplicații, procesând multe dintre aceleași solicitări de la mulți clienți. Astfel de procesoare se mai numesc și procesoare baril (execuția firelor în procesor alternează fiecare ciclu ca niturile cu butoi într-un cerc).

Implementări

Procesoare multithreading cu granulație grosieră: În 1998, IBM a lansat RS64-II ( Northstar ), primul microprocesor de pe piață care acceptă multithreading în hardware . Procesorul a suportat execuția alternativă a 2 fire. Recent: Intel dual-core Montecito (2006) cu nuclee bazate pe Itanium 2 , unde fiecare nucleu execută două fire cu granulație grosieră; Fujitsu SPARC64 VI (2007).

Exemple de procesoare care au implementat multithreading cu granulație fină includ Denelcor HEP (1982) - 8 fire. Procesorul Cray /Tera MTA (1988) putea rula pe rând 128 de fire. Recente: Sun UltraSPARC T1 (2005, 4 fire per nucleu) și T2 (2008), Oracle SPARC T3 (2010, 8 fire), SPARC M7 (2015, 8 fire).

Comparație cu multithreading concurent

Multithreadingul temporal are un avantaj față de multithreadingul simultan prin faptul că încălzește mai puțin procesorul; cu toate acestea, dezavantajul este că doar un cod de fir este executat la orice ciclu de procesor dat.

Pe un procesor scalar, multithreading cu granulație fină nu se distinge de simultan. Pentru a implementa multithreading simultan, procesorul are nevoie de o conductă superscalar , iar cu cât sunt planificate mai multe fire de execuție simultan, cu atât trebuie să fie mai mare conducta superscalar , ceea ce crește complexitatea logicii procesorului.

Note

  1. Superthreading cu un procesor multithreaded . Consultat la 5 septembrie 2016. Arhivat din original la 14 octombrie 2008.

Literatură

Link -uri