Dependența de date
Această intrare sau secțiune despre componentele computerului nu menționează sursele necesare sau sunt insuficiente . |
Dependența de date în calcul este o situație care apare atunci când o instrucțiune necesită executarea rezultatelor operațiilor care nu au terminat încă. Aceste situații sunt denumite și pericole de date și ignorarea acestor probleme poate duce la condiții de eroare de execuție a datelor. Teoria care analizează și rezolvă aceste probleme se numește analiză a dependenței.
Exemplu de dependențe de date
Există trei tipuri de pericole de date sau dependențe de date
- RAW - Citește după scriere
- RĂZBOI - Scrieți după citire
- WAW - Scrie după Scrie
Unele dintre aceste dependențe pot părea ciudate, dar trebuie amintit că procesoarele moderne pun aproape întotdeauna în aplicare execuția instrucțiunilor și, prin urmare, ordinea instrucțiunilor decise de programator nu este neapărat respectată.
RAW - Citit după scriere
Dependența RAW se referă la cazul în care o instrucțiune necesită date care nu au fost încă calculate. De exemplu:
i1. R2 <- R1 + R3
i2. R4 <- R2 + R3
Prima instrucțiune calculează suma lui R1 și R3 și pune rezultatul în R2. a doua instrucțiune calculează în schimb suma lui R2 și R3 și pune rezultatul în R4, dar evident nu poate executa suma până când prima instrucțiune nu este completă. Deci, există o dependență de date. Orice execuție în afara comenzii nu este posibilă.
RĂZBOI - Scrieți după citire
Dependența WAR apare atunci când o instrucțiune citește date care se află într-o locație în care o instrucțiune ulterioară este pe cale să salveze alte date. De exemplu:
i1. r1 <- r2 + r3
i2. r3 <- r4 x r5
Prima instrucțiune adaugă R2 la R3 și plasează rezultatul în R1, în timp ce a doua instrucțiune înmulțește R4 cu R5 și plasează rezultatul în R3. Pentru ca programul să se execute corect, trebuie să vă asigurați că prima instrucțiune citește valoarea din R3 înainte ca a doua instrucțiune să actualizeze valoarea din R3.
WAW - Scrie după Scrie
Dependența WAW se referă la cazul în care mai multe instrucțiuni utilizează simultan aceleași registre. De exemplu:
i1. r2 <- r1 + r3
i2. r2 <- r4 x r7
Ambele instrucțiuni doresc să-și salveze rezultatul în registrul R2 și, prin urmare, trebuie să se asigure că prima instrucțiune salvează rezultatul înainte de a doua.
Notă : Rezultatul primei afirmații este eliminat din a doua afirmație. Dacă cele două instrucțiuni sunt consecutive, prima instrucțiune este total inutilă. Deși poate ascunde o eroare de programare, operația nu provoacă erori.
Soluții
Soluția acestor dependențe poate fi lăsată în sarcina compilatorului care poate introduce un număr adecvat de instrucțiuni NOP
pentru a rezolva dependențele. Cu toate acestea, procesoarele moderne implementează unități specializate în interiorul acestora care reordonează instrucțiunile pentru a elimina dependențele. Unele dependențe sunt rezolvate prin redenumirea registrului și alte tehnici.
Dependențele sunt, de asemenea, rezolvate prin algoritmi implementați în procesoare, cum ar fi tabloul de bord și algoritmul Tomasulo .