|
STALL-URI IN ACCESAREA MEMORIEI
Registrii in virgula mobila permit scrierea valorilor pe 64-biti ca doubles. In locul scrierii unui singur vector de valori cu o lungime de 8-, 16- sau 32-biti, se considera incarcarea valorilor intr-un singur cuadruplu-cuvant, incrementand apoi pointerul spre structura sau vectorul respectiv in mod corespunzator.
In primul rand, incarcarea si stocarea datelor reprezentate pe 64-biti sunt mult mai eficiente daca se utilizeaza blocurile mari de date. In al doilea rand, in acest mod este evitata cu mai multa usurinta amestecarea operatiilor de incarcare si stocare a datelor pe 8-, 16- sau 32-biti cu cele pe 64-biti. Este inlaturata astfel posibilitatea aparitiei unui stall in cazul operatiilor de acces la memorie, unde stall reprezinta situatia in care trebuie sa se astepte ca o anumita data sa fie disponibila pentru a continua prelucrarea. Stall-urile legate de accesul la memorie apar in situatiile urmatoare:
atunci cand alocari de mici dimensiuni urmeaza unor stocari de mari dimensiuni in cadrul aceleiasi zone de memorie;
atunci cand alocari de dimensiuni mari urmeaza unor stocari de mici dimensiuni in cadrul aceleiasi zone de memorie
Procesoarele Pentium Pro and Pentium II vor intampina situatii de stall in aceste cazuri.
Se considera exemplul urmator, in primul caz exista o situatie de incarcare de dimensiuni mari de date dupa o serie de stocari reduse ca dimensiune in aceeasi zona de memorie (incepand la adresa de memorie mem). In acest caz operatia de incaracare va intampina un stall:
mov mem, eax ; stocheaza dword la adresa "mem'
mov mem + 4, ebx ; stocheaza dword la adresa "mem + 4'
fld mem ; incarcare date qword de la adresa "mem', stall
Instructiunea fld trebuie sa astepte ca operatiile de stocare sa realizeze scrierea memoriei inainte ca aceasta sa poata accesa intreaga informatie de care are nevoie. Acest stall poate de asemenea aparea si in cazul altor tipuri de date, spre exemplu atunci cand sunt stocati octeti sau cuvinte, si apoi cuvinte sau dublu-cuvinte sunt citite de la aceeasi zona de memorie.
In cel de+al doilea caz, se realizeaza o serie de citiri de dimensiuni reduse, ce urmeaza unei stocari de mari dimensiuni la aceeasi zona de memorie (incepand la adresa de memorie mem). In acest caz, operatiile de citire se vor lovi de o situatie de stall:
fstp mem ; stocheaza qword la adresa "mem'
mov bx, mem + 2 ; incarcare date word de la adresa "mem + 2',
stall
mov cx, mem + 4 ; incarcare date word de la adresa "mem + 4',
stall
Operatiile de citire a unui word trebuie sa astepte finalizarea operatiei de scriere in memorie a cuvantului cuadruplu pentru ca aceasta sa poata accesa intreaga informatie necesara. Acest stall poate fi intalnit si in lucrul cu alte tipuri de date, de asemenea.(spre exemplu atunci cand cuvinte duble sau cuvinte sunt stocate si apoi cuvinte sau octeti sunt cititi de la aceeasi zona de memorie. Acesta poate fi evitat prin mutarea operatiilor de stocare cat mai departe de operatiile de incarcare a datelor. In general, stocarile si incarcarile de date ar trebui sa fie separate de cel putin 10 instructiuni pentru evitarea unui stall.