Multithreading
În calcul , multithreading se referă la suportul hardware de către un procesor pentru a executa mai multe fire . Această tehnică diferă de cea care stau la baza sistemelor multiprocesor prin aceea că firele de execuție individuale partajează același spațiu de adresă, același cache și același buffer de traducere .
Multithreading îmbunătățește performanța programelor numai atunci când acestea au fost dezvoltate prin împărțirea sarcinii de lucru în mai multe fire care pot rula în paralel . În timp ce sistemele multiprocesor sunt echipate cu mai multe unități de calcul independente pentru care execuția este efectiv paralelă, un sistem cu mai multe fire are în schimb o singură unitate de calcul care este cel mai bine utilizată prin rularea mai multor fire în aceeași unitate de calcul. Cele două tehnici sunt complementare: uneori sistemele multiprocesor implementează și multithreading pentru a îmbunătăți performanța generală a sistemului.
Prezentare generală
Paradigma multithreading a devenit foarte populară la sfârșitul anilor 1990 , când cercetările privind creșterea paralelismului la nivel de instrucție au stagnat. În acel moment, accentul a fost mutat de la rularea unui singur program la viteză maximă la ocuparea unităților de calcul cât mai eficient posibil. Sa constatat că multe programe erau compuse din mai multe fluxuri paralele sau puteau fi împărțite în mai multe fire paralele cu ușoare modificări ale codului sursă . Prin urmare, îmbunătățirea execuției firelor paralele ar putea îmbunătăți execuția generală a programelor. Acest lucru a determinat dezvoltarea sistemelor multithreading și a sistemelor multiprocesor.
Această linie de cercetare a condus și la critici, principalele fiind:
- Mai multe fire de execuție împărtășesc aceleași resurse, cum ar fi memoria cache sau buffer-urile de traducere și astfel pot interfera între ele și pot încetini.
- Performanța firelor individuale nu se îmbunătățește, dar se poate degrada pe măsură ce firele concurente cresc.
- Suportul hardware al sistemelor multithreading și multiprocesor necesită, de asemenea, o contribuție din partea software -ului , programele și sistemele de operare trebuie adaptate pentru a gestiona această nouă posibilitate.
Clustered Multi-Thread
Clustered Multi-Thread este o tehnică care permite proiectarea procesoarelor superscalare fără a sacrifica timpul de ciclu, dar cu prețul unor latențe mai mari de comunicare. [1]
Exemple
Unul dintre exponenții majori ai acestei arhitecturi sunt procesoarele AMD Bulldozer [2]
Multithreading cu granulație grosieră
Idee de bază
Multithreadingul cu granulație grosieră necesită ca procesorul să execute un singur thread până când acesta este blocat de un eveniment care are în mod normal o latență mare (de exemplu o pierdere de cache ), în acest caz procesorul execută un alt thread care era gata de rulare. Firul de înlocuire rămâne în funcțiune până când primul fir este gata de rulare.
De exemplu:
- Bucla i: Instrucțiunea j este încărcată
- Bucla i + 1: Instrucțiunea j + 1 a firului A este încărcată
- Ciclul i + 2: instrucțiunea j + 2 a firului A este încărcată, încărcarea provoacă o pierdere a memoriei cache cu cererea corespunzătoare în memoria principală
- Ciclul i + 3: procesorul începe execuția firului B
- Bucla i + 4: instrucțiunea k a firului B este încărcată
- Bucla i + 5: Instrucțiunea k + 1 a firului B este încărcată
Conceptual este o tehnică asemănătoare cu cea prezentă în multitasking -ul cooperativ al sistemelor RTOS , în aceste sisteme de operare când un program trebuie să aștepte un eveniment acordând voluntar prioritate unui alt program gata de rulare.
Terminologie
În plus față de Coarse-grained multithreading este definit Block sau Cooperative multithreading.
Costul hardware
Multithreading presupune că comutarea între fire are loc rapid, această tehnică face tranziția într-un singur ciclu de ceas. Pentru a realiza acest lucru, procesorul trebuie să reproducă unele componente pentru cele două fire de execuție, cum ar fi registrele interne , contorul de programe și unele registre de stare. Adaptările la nivel de software sunt, de asemenea, relativ modeste, deoarece sistemul de operare trebuie să gestioneze un număr modest de fire care rulează concomitent.
Exemple
Multe familii de microcontrolere și procesoare încorporate implementează o gestionare a mai multor bănci de registre pentru a permite o schimbare rapidă a contextului pentru gestionarea întreruperilor . Acesta poate fi considerat un tip multithreaded.
Multithreading cu granulație fină
Idee de bază
Un tip foarte puternic de multithreading necesită ca procesorul să schimbe firul de execuție la fiecare ciclu de ceas.
De exemplu:
- Bucla i: Instrucțiunea j este încărcată
- Bucla i + 1: instrucțiunea k a firului B este încărcată
- Bucla i + 2: Instrucțiunea h a firului C este încărcată
Acest tip de multithreading ar trebui să înlăture dependența de datele firelor unice și, prin urmare, ar trebui să elimine sau, în orice caz, să reducă blocajele conductei din cauza dependenței de date. Deoarece fiecare fir de execuție ar trebui să funcționeze independent, firele de execuție individuale vor executa programe care nu au legătură și, prin urmare, există puține șanse ca instrucțiunile unui fir de execuție să aibă nevoie de rezultatele procesate de o instrucțiune a unui alt fir de execuție care rulează în acel moment.
Din punct de vedere conceptual, această tehnică este similară cu multitasking-ul preventiv întâlnit în multe sisteme de operare. Această analogie presupune că fiecare interval de timp al programului este setat egal cu un ciclu de ceas al procesorului.
Terminologie
Această tehnică multithreading a fost inițial numită procesare baril, dar în prezent terminologia modernă definește această tehnică ca fiind multithreading preventiv sau intercalat sau tăiat în timp sau cu granulație fină .
Costul hardware
Pe lângă componentele menționate mai sus, această tehnică multithreading necesită componente suplimentare care atribuie fiecărei instrucțiuni de execuție un ID care permite identificarea firului proprietar. Această tehnică necesită ca schimbul între fire să aibă loc fără cicluri de ceas de blocare și, prin urmare, necesită hardware mai sofisticat; în plus, prezența multor fire care rulează în paralel necesită, în general, cache-uri și TLB-uri mai încăpătoare pentru a putea servi eficient diferitele fire.
Exemple
- Procesor cu elemente eterogene Denelcor
- Sun Microsystems UltraSPARC T1
- Lexra NetVortex
- Core MIPS 34K care implementează Multi-Threaded ASE
- Raza Microelectronics Inc XLR
Multi-Threading simultan
Idee de bază
Procesoarele moderne au mai multe unități de calcul care sunt utilizate prin executarea în paralel a instrucțiunilor firelor individuale. Procesoarele actuale sunt capabile să execute doar câteva instrucțiuni în paralel ale unui singur fir din cauza paralelismului redus la nivelul de instrucțiuni pe care îl posedă în mod normal firele de execuție. Așadar, unele unități de procesare rămân neutilizate în timpul procesării. Pentru a evita acest lucru, Simultaneous Multi-threading (SMT) rulează mai multe fire simultan și utilizează instrucțiunile firelor individuale pentru a menține unitățile de procesare întotdeauna operaționale.
De exemplu:
- Bucla i: instrucțiunea j și j + 1 din firul A, instrucțiunea k din firul B, toate executate simultan
- Bucla i + 1: instrucțiunea j + 2 din firul A, instrucțiunea k + 1 din firul B, instrucțiunea m din firul C, executată simultan
- Bucla i + 2: instrucțiunea j + 3 din firul A, instrucțiunea m + 1 și m + 2 din firul C, executate simultan.
Terminologie
Pentru a o deosebi de alte tipuri de multithreading, termenul de multithreading temporal indică un tip de multithreading care permite finalizarea instrucțiunilor de un singur fir pe ciclu de ceas.
Costul hardware
În plus față de hardware-ul cerut de tipul anterior de multithreading, această tehnică necesită ca fiecare etapă a conductei să urmărească firul de instrucțiuni și, deoarece procesorul are mai multe unități de execuție, există multe instrucțiuni de urmărit. Mai mult, cache-ul și TLB-ul trebuie să fie foarte mari pentru a gestiona un număr atât de mare de fire de execuție deoarece, prin executarea mult mai multe instrucțiuni în paralel, se face o utilizare foarte intensă a resurselor menționate mai sus.
Exemple
- DEC Alpha EV8 (neterminat)
- Intel Hyper-Threading
- IBM POWER5
- Elemente de procesare a puterii ale procesorului celular
- Sun Microsystems UltraSPARC T2
Caută
În prezent, cercetarea sectorială se concentrează pe tehnici care vă permit să alegeți rapid firul de execuție în cazul unui blocaj al firului de execuție. O linie importantă de cercetare este thread scheduler , care poate fi gestionat la nivel hardware, la nivel software sau cu o abordare mixtă.
Un alt domeniu de cercetare se referă la tipul de evenimente care trebuie să provoace un schimb de fire de execuție (cache miss, DMA, comunicare între fire etc.).
Dacă multithreading reproduce toate jurnalele software vizibile, puteți utiliza multithreading pentru a implementa mașinile virtuale . Fiecare fir ar trebui să-și gestioneze propria mașină virtuală ca și cum ar fi executat de un procesor separat și, prin urmare, ar putea rula chiar și un întreg sistem de operare independent.
Note
Articole înrudite
Link- uri externe
- Transparențe pe multithreading ( PDF ), pe di.unito.it ( arhivat la 9 iunie 2006) .
- Programare multi-thread , la Universitatea din Napoli ( arhivat la 23 aprilie 2012) .