Documente Academic
Documente Profesional
Documente Cultură
Tomasulo
Tomasulo
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.
Î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ță.
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.