Dependența de date

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

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 .

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