Sunteți pe pagina 1din 3

Algoritmul lui Tomasulo este un algoritm hardware de arhitectură a calculatoarelor pentru

programarea dinamică a instrucțiunilor care permite executarea out of order și permite


utilizarea mai eficientă a mai multor unități de execuție. A fost dezvoltat de Robert Tomasulo
la IBM în 1967 și a fost implementat pentru prima dată în unitatea de virgule mobila IBM
System / 360 Model 91.
Inovațiile majore ale algoritmului Tomasulo includ redenumirea registrului în hardware, stațiile
de rezervare pentru toate unitățile de execuție și CDB (magistrala de date comuna) pe care
valorile calculate sunt transmise tuturor stațiilor de rezervare care ar putea avea nevoie de ele.
Aceste evoluții permit o îmbunătățire a execuției paralele a instrucțiunilor care altfel ar face stall
la utilizarea scorebordului sau a altor algoritmi mai vechi.

Common data bus - CDB


Common Data Bus (CDB) conectează stațiile de rezervare direct la unitățile funcționale.
Potrivit lui Tomasulo, „păstrează prioritatea și încurajează concurența”. Aceasta are două
efecte importante:
1. Unitățile funcționale pot accesa rezultatul oricărei operațiuni fără a implica un registru
de virgulă mobila, permițând mai multor unități care așteaptă un rezultat să continue
fără a aștepta să rezolve conținutul pentru acces la înregistrarea porturilor de citire a
fișierelor.
2. Detectarea hazardelor și execuția controlului sunt distribuite. Stațiile de rezervare
controlează când se poate executa o instrucțiune, mai degrabă decât o singură
unitate de hazard dedicată.

Instruction order
Instrucțiunile sunt emise secvențial, astfel încât efectele unei secvențe de instrucțiuni, cum
ar fi excepțiile provacate de aceste instrucțiuni, să apară în aceeași ordine ca și pe un
procesor in-order, indiferent de faptul că sunt executate out-of-order (adică non-secvențiale).

Register renaming
Algoritmul lui Tomasulo folosește redenumirea registrelor pentru a efectua corect executarea
out-of-order. Toate registrele de uz general și de stații de rezervare dețin fie o valoare reală,
fie o valoare de placeholder. Dacă o valoare reală nu este disponibilă pentru un registru de
destinație în faza de issue, se utilizează inițial o valoare placeholder. Valoarea placeholder-
ului este o etichetă care indică ce stație de rezervare va produce valoarea reală. Când
unitatea termină și difuzează rezultatul pe CDB, placeholder-ul va fi înlocuit cu valoarea
reală.

Fiecare unitate funcțională are o singură stație de rezervare. Stațiile de rezervare dețin
informațiile necesare pentru a executa o singură instrucțiune, inclusiv operațiia și operanzii.
Unitatea funcțională începe procesarea atunci când este libera și când toti operanzii sursă
necesari pentru o instrucțiune sunt reali.

Exceptions
Practic vorbind, pot exista excepții pentru care nu sunt disponibile suficiente informații de
stare despre o excepție, caz în care procesorul poate ridica o excepție specială, numită
excepție „imprecisă”. Excepții imprecise nu pot apărea în implementări in-order, întrucât
starea procesorului este modificată numai în ordinea programului.

Programele care prezintă excepții „precise”, unde poate fi determinata instrucțiunea


specifică care a luat excepția, pot fi repornite sau reexecutate de la punctul excepției. Cu
toate acestea, cei care se confruntă cu excepții “imprecise”, în general, nu pot reporni sau
reexecuta, deoarece sistemul nu poate determina instrucțiunea specifica care au luat
excepția.

Îmbunătățirea algoritmului
Conceptele de stații de rezervare, redenumirea registrelor și CBD în algoritmul lui Tomasulo
prezintă avansuri semnificative în proiectarea computerelor de înaltă performanță.

Stațiile de rezervare își asumă responsabilitatea de a aștepta operanzi în prezența


dependențelor de date și alte inconsecvențe, cum ar fi variația timpului de acces la stocare și a
vitezei de circuit, eliberând astfel unitățile funcționale. Această modificare imbunatateste
întârzierile mari produse de operatiile in virgula mobila și accesele la memorie. În special,
algoritmul este mai tolerant la cache MISSuri. În plus, programatorii nu mai trebuie sa
implementeze cod optimizat. Acesta este rezultatul CDB ului și al stației de rezervare care
lucrează împreună pentru păstrarea dependențelor, precum și încurajarea concurentei.

Urmărind operanzii instrucțiunilor în stațiile de rezervare și redenumirea registrilor în hardware,


algoritmul minimizează RAW și elimină riscurile de WAW și WAR. Acest lucru îmbunătățește
performanța prin reducerea timpului pierdut, care altfel ar fi necesar pentru stall-uri.

O îmbunătățire la fel de importantă a algoritmului este că proiectarea nu se limitează la o


structură specifică de pipeline. Această îmbunătățire permite algoritmului să fie adoptat mai pe
scară largă de către procesoarele multiple-issue. În plus, algoritmul este ușor extins pentru a
permite speculațiile branch-urilor.

The three stages listed below are the stages through which each instruction passes from the time it is issued to
the time its execution is complete.

Stage 1: issue
În faza de issue, instrucțiunile sunt emise pentru executare dacă toti operanzii și stațiile de
rezervare sunt gata; altfel sunt blocate. Registrele sunt redenumite în această etapă, eliminând
hazardele WAR și WAW.
 Se obține următoarea instrucțiune din varful IQ (instruction queue). Dacă operanzii
instrucțiunii sunt în prezent în registre, atunci
o Dacă este disponibilă o unitate funcțională potrivită, emiteți instrucțiunea.
o Altfel, întrucât nu există nicio unitate funcțională disponibilă, opriți instrucțiunea
până când o stație sau un buffer este liber (stall).

 În caz contrar, putem presupune că operanzii nu sunt în registre și, prin urmare, să
utilizăm valori virtuale. Unitatea funcțională trebuie să calculeze valoarea reală pentru a
urmări unitățile funcționale care produc operandul.
Stage 2: execute
În etapa de execuție, operațiile de instrucțiuni sunt efectuate. Instrucțiunile sunt întârziate în
acest pas până când toti operanzii lor sunt disponibili, eliminând hazardele RAW. Corectitudinea
programului este menținută printr-un calcul eficient al adresei pentru a preveni hazardele de
memorie.

 Dacă unul sau mai multi operanzi nu sunt încă disponibili, așteptați ca operandul să
devină disponibil pe CDB.
 Când toti operanzii sunt disponibili, atunci: dacă instrucțiunea este un load sau store:
o Calculați adresa efectiva atunci când registrul de bază este disponibil și
introduceți-l în load/store buffer.
 Dacă instrucțiunea este load:, executați imediat ce unitatea de memorie
este disponibilă
 Altfel, dacă instrucțiunea este store, atunci: așteptați stocarea valorii
înainte de a o trimite la unitatea de memorie
 Altfel, instrucțiunea este o operație de aritmetică logică (ALU), apoi: executați
instrucțiunea in unitatea funcțională corespunzătoare
Stage 3: write result
În aceasta etapa, rezultatele operațiilor ALU sunt scrise în registre și operațiile de stocare sunt
scrise în memorie.

 Dacă instrucțiunea a fost o operație ALU


o Dacă rezultatul este disponibil, atunci: scrieți-l pe CDB și de acolo în registrele și
în orice stații de rezervare care așteaptă acest rezultat.
 Altfel, dacă instrucțiunea a fost store, atunci: scrieți datele în memorie în timpul acestui
pas

S-ar putea să vă placă și