Multithreading

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În calcul , multithreading se referă la suportul hardware de către un procesor pentru a executa mai multe fire . Această tehnică diferă de sistemele multiprocesor care stau la baza în care firele individuale au același spațiu de adrese, același cache și același tampon de traducere .

Multithreading îmbunătățește performanța programelor numai atunci când acestea au fost dezvoltate prin împărțirea volumului de lucru pe mai multe fire de execuție 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 utilizată cel mai bine prin rularea mai multor fire în aceeași unitate de calcul. Cele două tehnici sunt complementare: uneori sistemele multiprocesor implementează, de asemenea, multithreading pentru a îmbunătăți performanța generală a sistemului.

Un singur procesor de execuție execută un singur fir la un moment dat
Un sistem multiprocesor clasic rulează doar un fir pentru fiecare unitate de calcul

Prezentare generală

Paradigma multithreading a devenit foarte populară la sfârșitul anilor 1990, când s-au oprit cercetările privind creșterea paralelismului nivelului de instruire . Î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. S-a constatat că multe programe erau compuse din mai multe fluxuri paralele sau puteau fi defalcate în mai multe fire paralele cu modificări minore ale codului sursă . Deci, îmbunătățirea execuției firelor paralele ar putea îmbunătăți execuția generală a programelor. Acest lucru a determinat dezvoltarea de sisteme multithreading și sisteme multiprocesor.

Această linie de cercetare a dus și la critici, principalele fiind:

  • Mai multe thread-uri împărtășesc aceleași resurse, cum ar fi tampoane cache sau traducere, și astfel pot interfera unul cu celălalt și pot încetini.
  • Performanța firelor individuale nu se îmbunătățește, dar se poate degrada pe măsură ce firele simultane cresc.
  • Suportul hardware al sistemelor multiprocesor ș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 de procesoare suprascalare fără a sacrifica timpul ciclului, dar cu prețul unor latențe de comunicare mai mari. [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 graiere grosieră necesită procesorului să execute un singur thread până când este blocat de un eveniment care are în mod normal o latență ridicată (de exemplu o pierdere în cache ), în acest caz procesorul execută un alt thread care era gata să ruleze. Firul de înlocuire rămâne în funcțiune până când primul fir este gata să ruleze.

De exemplu:

  1. Bucla i: fir Se încarcă o instrucțiune j
  2. Bucla i + 1: se încarcă instrucțiunea j + 1 a firului A
  3. Ciclul i + 2: se încarcă instrucțiunea j + 2 a firului A, încărcarea provoacă o pierdere a memoriei cache cu solicitarea corespunzătoare în memoria principală
  4. Ciclul i + 3: procesorul începe executarea firului B.
  5. Bucla i + 4: se încarcă instrucțiunea k a firului B
  6. Bucla i + 5: se încarcă instrucțiunea k + 1 a firului B

Conceptual este o tehnică similară cu cea prezentă în multitaskingul cooperativ al sistemelor RTOS , în aceste sisteme de operare atunci când un program trebuie să aștepte un eveniment acordă voluntar prioritate unui alt program gata de rulare.

Terminologie

În plus față de multithreading cu granulație grosieră , este definit bloc sau multi-threading cooperativ .

Costul hardware-ului

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, 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ă simultan.

Exemple

Multe familii de microcontrolere și procesoare încorporate implementează o gestionare a mai multor bănci de registre pentru a permite un comutator rapid de context pentru gestionarea întreruperilor . Acesta poate fi considerat un tip multithread.

Multithread cu granulație fină

Un sistem multithreading cu granulație fină planifică mai multe fire de execuție și execută instrucțiunile acestora simultan pentru a ocupa unitățile de procesare în cel mai bun mod posibil.

Idee de bază

Un tip foarte puternic de multithreading necesită procesorului să schimbe firul de rulare la fiecare ciclu de ceas.

De exemplu:

  1. Bucla i: fir Se încarcă o instrucțiune j
  2. Bucla i + 1: se încarcă instrucțiunea k a firului B
  3. Bucla i + 2: Instrucțiunea h a firului C este încărcată

Acest tip de multithreading ar trebui să elimine dependența de datele firelor individuale și, prin urmare, ar trebui să elimine sau, în orice caz, să reducă standurile conductei din cauza dependenței de date. Deoarece fiecare thread trebuie să funcționeze independent, firele individuale vor executa programe fără legătură și, prin urmare, există puține șanse ca instrucțiunile unui thread să aibă nevoie de rezultatele procesate de o instrucțiune a altui thread care rulează în acel moment.

Conceptual, această tehnică este similară cu multitaskingul preventiv găsit î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 numită inițial prelucrarea butoiului, dar în prezent terminologia modernă definește această tehnică ca fiind pre-preventivă sau intercalată sau în felii de timp sau multithreading cu granulație fină .

Costul hardware-ului

În plus față de 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ă schimbul între fire pentru a avea 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 mai mari și TLB-uri pentru a putea servi diferitele fire în mod eficient.

Exemple

Multi-Threading simultan

Un sistem simultan multi-filet planifică mai multe fire, dar rulează doar unul pe ciclu de ceas

Idee de bază

Procesoarele moderne au mai multe unități de calcul care sunt utilizate executând instrucțiunile firelor individuale în paralel. Procesoarele actuale sunt capabile să execute doar câteva instrucțiuni în paralel cu un singur fir din cauza paralelismului redus la nivelul de instrucțiuni pe care îl posedă în mod normal firele. Deci, adesea 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 folosește instrucțiunile firelor individuale pentru a menține unitățile de procesare întotdeauna operaționale.

De exemplu:

  1. Bucla i: instrucțiunea j și j + 1 din firul A, instrucțiunea k din firul B, toate rulează simultan
  2. 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
  3. Bucla i + 2: instrucțiunea j + 3 din firul A, instrucțiunea m + 1 și m + 2 din firul C, executată simultan.

Terminologie

Pentru a-l distinge de alte tipuri de multi-threading, termenul de multi-threading temporal indică un tip de multi-threading care permite completarea instrucțiunilor unui singur thread pe ciclu de ceas.

Costul hardware-ului

În plus față de hardware-ul cerut de tipul anterior de multithreading, această tehnică necesită fiecare etapă a conductei pentru a urmări firul de instrucțiuni și, din moment ce 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, deoarece, executând mai multe instrucțiuni în paralel, se face o utilizare foarte intensivă a resurselor menționate anterior.

Exemple

Cercetare

În prezent, cercetarea sectorială se concentrează pe tehnici care vă permit să alegeți rapid firul de executat în cazul unui blocaj al firului în execuție. O linie importantă de cercetare este planificatorul de fire, care poate fi gestionat la nivel hardware, la nivel software sau cu o abordare mixtă.

O altă zonă de cercetare se referă la tipul de evenimente care trebuie să provoace un schimb de fire de execuție (cache rate, DMA, comunicare inter-thread etc.).

Dacă multiprocesarea replică toate jurnalele vizibile ale software-ului, puteți utiliza multiprocesarea pentru a implementa mașini virtuale . Fiecare fir ar trebui să-și gestioneze propria mașină virtuală ca și când ar fi fost executat de un procesor separat și, prin urmare, ar putea rula chiar și un întreg sistem de operare independent.

Notă

Elemente conexe

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT