Pipeline

De la Wikipedia, enciclopedia liberă

Conceptul de pipeline, un cuvânt englez cu pronunția /ˈpaip.lain/ (v. AFI) și traducerea „conductă de date”, este folosit în designul procesoarelor și al altor dispozitive electronice pentru a crește numărul de instrucțiuni ce pot fi executate într-o unitate de timp. În tehnica pipeline se execută simultan (dar decalat) mai multe instrucțiuni, acest lucru realizându-se fără componente hardware suplimentare.

Detalii[modificare | modificare sursă]

Pipeline este o tehnică de creștere a vitezei de execuție totale a procesoarelor, fără a ridica tactul. Ea constă în subdivizarea fiecărei instrucțiuni într-un număr de etape sau segmente [1], fiecare etapă fiind executată de câte o unitate funcțională separată a procesorului (segment pipeline). Segmentele pipeline sunt conectate între ele într-un mod analog asamblării unei conducte din segmente de țeavă. Segmentele tipice de execuție ale unei instrucțiuni mașină pe un procesor sunt:

  • FI - aducere instrucțiune (engleză: fetch instruction). Se referă la un ciclu special în care procesorul citește din memorie instrucțiunea următoare ce trebuie executată.
  • DI - decodare instrucțiune (decode instruction). În această etapă instrucțiunea este recunoscută și procesorul colectează toate informațiile necesare pentru executarea ei.
  • CO - în cazul instrucțiunilor aritmetice, calculare adresă operand 1 (calculate operand address). Se calculează adresa de memorie de unde se aduce primul operand.
  • FO - aducere operand (fetch operand). Citește operandul aflat în memorie la adresa calculată în pasul anterior.
  • Dacă e nevoie, cele 2 etape anterioare se repetă și pentru al doilea operand etc.
  • EI - execută instrucțiune (execute instruction). Execuția propriu-zisă a instrucțiunii inclusiv calculul rezultatului ei.
  • WO - scriere operand (write operand). Scrierea rezultatului înapoi în memorie.

Principiul se bazează pe faptul că fiecare din aceste operații lucrează în principiu cu alte resurse, deci, cu ajutorul tehnicii potrivite, 2 până la 6 operații se pot executa și în paralel. La un moment dat ele se află în execuție în etape diferite; în cazul cel mai fericit la un moment dat există câte o instrucțiune tratată în fiecare etapă a pipeline-ului. Deși execuția unei instrucțiuni de la început până la sfârșit necesită de obicei mai multe etape, instrucțiunea următoare poate începe să fie executată imediat ce instrucțiunea anterioară a trecut de prima etapă (nu e nevoie să se aștepte până la terminarea completă a instrucțiunii anterioare).

Avantaje și dezavantaje[modificare | modificare sursă]

Avantaje[modificare | modificare sursă]

Rata de execuție a instrucțiunilor crește dacă se folosește o arhitectură de tip pipeline. Unele circuite combinaționale cum ar fi sumatoarele sau multiplicatoarele pot fi făcute să funcționeze mai rapid prin mărirea complexității circuitelor electronice respective, dar dacă se folosește pipelining se poate obține același spor de performanță fără a crește complexitatea.

Dezavantaje - Hazarde pipeline [2][modificare | modificare sursă]

Hazarde structurale[modificare | modificare sursă]

Apar când o anumită resursă (memorie, unitate funcțională) este cerută de mai multe instrucțiuni în același moment. Anumite resurse sunt duplicate tocmai pentru a fi evitate hazardele structurale. Unitățile funcționale pot fi și ele de tip pipeline pentru a suporta mai multe instrucțiuni în același timp. O metodă clasică de a evita hazardele ce implică accesul la memorie este aceea de a avea câte o memorie de tip cache separat pentru instrucțiuni și pentru date. În imaginea 1 (hazard structural) se observă că instrucțiunea ADD R4, X aduce în stagiul FO operandul X din memorie. În timpul acestui ciclu memoria nu acceptă altă accesare.

Hazarde de date[modificare | modificare sursă]

Un scenariu posibil pentru un hazard de date este următorul: trebuie executate 2 instrucțiuni, I1 și I2. Într-un pipeline execuția lui I2 poate începe înainte ca I1 să se termine. Dacă într-un anumit stagiu al pipeline-ului I2 are nevoie de rezultatul produs de I1, dar acest rezultat nu a fost încă generat, se produce un hazard de date. în imaginea 2 (hazard de date), înaintea executării stagiului FO, instrucțiunea ADD este blocată, pînă cînd instrucțiunea MUL a scris rezultatul în R2.

Hazarde de control[modificare | modificare sursă]

Sunt produse de instrucțiuni de salt. Atunci când se execută un salt, pipeline-ul trebuie golit și umplut cu instrucțiunea următoare de la adresa de memorie la care se face saltul. În imaginea 3 (hazard de control ; salt necondiționat), după stagiul FO al instrucțiunii de salt adresa destinației este cunoscută și instrucțiunea următoare poate fi "adusă" (fetch). Înainte ca stagiul DI să se termine nu se știe dacă s-a executat saltul. Mai târziu, instrucțiunea adusă este abandonată. În imaginile 4 și 5 sunt prezentate situații de hazard de control cu instrucțiuni de tip salt condiționat, efectuat sau neefectuat.

Referințe[modificare | modificare sursă]

  1. ^ Modern Processor Design, John Paul Shen, Mikko H. Lipasti (2004)
  2. ^ Instruction Pipelining Arhivat în , la Wayback Machine., Department of computer and information science, Linkoping University, Sweden.