Multithreading

Principiul de multithreading presupune execuția mai multor thread-uri în același pipeline, fiecare având propria secțiune de timp în care este menit să lucreze. Odată cu creșterea capabilităților procesoarelor au crescut și cererile de performanță, asta ducând la solicitarea la maxim a resurselor unui procesor. Necesitatea multithreading-ului a venit de la observația că unele procesoare puteau pierde timp prețios în așteptarea unui eveniment pentru o anumită sarcină.

Foarte repede a fost observat potențialul principiului de paralelizare a unui proces, atât la nivel de instrucțiune, cât și la nivel de fir de execuție. Firul de execuție sau thread-ul este un mic proces sau task, având propriile instrucțiuni și date.

Avantajele multithreading-ului

[modificare | modificare sursă]

Ca și aplicabilitate, multithreading-ul poate fi folosit pentru sporirea eficienței atât în cadrul multiprogramării sau a sarcinilor de lucru pe mai multe fire de execuție, cât și în cadrul unui singur program. Astfel, un fir de execuție poate rula în timp ce alt fir de execuție așteaptă un anumit eveniment. În ziua de azi, capacitățile oferite de acest tip de procesare sunt folosite până și la nivelul sistemului de operare.

Pentru a putea beneficia de avantajele multithreading-ului, un program trebuie să poată fi despărțit în secțiuni ce pot rula independent și în mod paralel, fiind foarte greu de utilizat în codul reprezentat de o înșiruire foarte lungă de instrucțiuni. Gestiunea firelor de execuție este controlată de sistemul de operare. Un exemplu de implementare a acestui concept este modalitatea prin care Microsoft Word repaginează un document în timp ce utilizatorul scrie.

Conceptul de multithreading poate fi folosit și pentru accelerarea unui singur thread prin utilizarea, atunci când procesorul nu este foarte solicitat, a execuției speculative pe mai multe căi și a firelor de execuție ajutătoare.

Multithreading cu granularitate fină și aspră

[modificare | modificare sursă]

Principiul multithreading-ului cu granularitate fină stă în faptul că fiecare instrucțiune va fi preluată de un alt fir de execuție, astfel neavând două instrucțiuni din același fir de execuție prezente în același timp în pipeline. Avantajul major al acestui tip de procesor este faptul că latența cauzată de anumite evenimente este folosită eficient de alte fire de execuție. Pentru a avea o eficiență maximă sunt necesare cel puțin atâtea fire de execuție câte etape are pipe-ul, altfel fiind mai ineficiente decât procesoarele scalare. Complexitatea hardware crește deoarece fiecare registru trebuie duplicat pentru fiecare fir de execuție, însă complexitatea pipeline-ului scade deoarece fiecare instrucțiune este independentă de toate celelalte.

Multithreading-ul cu granularitate aspră gestionează în mod similar firele de execuție din pipeline, însă fiecare nouă instrucțiune poate deriva din orice fir de execuție, independent de instrucțiunile aflate în pipeline. Acest lucru are ca rezultat o eficiență identică între acest tip de procesor și un procesor cu un singur fir de execuție, în condițiile în care primul menționat rulează un singur fir de execuție. Avantajul major al acestui tip de procesare este evident în configurațiile software care necesită puține fire de execuție, fiind mai eficient decât procesoarele scalare sau cele care prezintă multithreading cu granularitate fină, având totuși o complexitate hardware mult mai mare.

Multithreading Simultan

[modificare | modificare sursă]

Un procesor cu mai multe fire de execuție, capabil să proceseze multiple instrucțiuni din surse diferite poartă numele de procesor cu multithreading simultan. Această tehnică prezintă cea mai mare flexibilitate în acoperirea ineficiențelor procesoarelor cu un singur fir de execuție, depășind arhitecturile multithreading cu granularitate fină sau aspră, deoarece aceasta permite execuția unei instrucțiuni din orice fir de execuție în paralel cu procesarea altei instrucțiuni din alt fir de execuție.