În arhitectura computerului , preîncărcarea instrucțiunilor este o tehnologie folosită într-un microprocesor pentru a crește viteza de execuție a programului reducerea timpului în care procesorul este inactiv din cauza lipsei de instrucțiuni de executat.
Microprocesoarele moderne sunt mult mai rapide decât memoria , drept urmare instrucțiunile programului executabil nu pot fi citite suficient de rapid pentru a asigura continuitatea procesorului [1] . Adăugarea unui cache poate oferi acces mai rapid la instrucțiunile de care aveți nevoie.
Preluarea codului este emiterea de solicitări de la procesor către RAM pentru a citi instrucțiunile în avans, înainte ca aceste instrucțiuni să fie executate. Ca urmare a acestor solicitări, instrucțiunile sunt încărcate din memorie în cache. Atunci când instrucțiunile trebuie executate, accesul la acestea va fi mult mai rapid, deoarece întârzierea la accesarea cache-ului este cu ordine de mărime mai mică decât la accesarea RAM.
Cu cât programul este mai consistent, cu atât efectul preîncărcării codului este mai mare. Cu toate acestea, preîncărcarea codului poate face parte dintr-un algoritm complex de predicție a ramurilor care încearcă să prezică instrucțiunile care vor trebui executate în viitor și să le încarce din memorie. În hardware-ul dedicat (cum ar fi un GPU ), algoritmul de preluare preliminară poate profita de coerența spațială a datelor care este observată în mod obișnuit în timpul mapării texturii . În acest caz, nu instrucțiunile sunt preîncărcate, ci elementele de textură ( texels ) care sunt candidate pentru maparea poligonului .
Primele microprocesoare produse în masă care au folosit preîncărcarea codului au fost Intel 8086 (6 octeți) și Motorola 68000 (4 octeți).
Există hardware, software și metode combinate pentru implementarea preîncărcării codului [2] [3] . Principalul criteriu de clasificare a metodelor este natura implementării analizei codului, care determină ce părți ale codului vor fi descărcate în prealabil [4] . De exemplu, dacă prelevarea codului este implementată ca o optimizare a compilatorului care plasează instrucțiunile de preluare preliminară în locurile potrivite, atunci metoda este software.
Metoda a fost propusă în 1978 [5] și, așa cum sugerează și numele, constă în schimbarea următoarelor linii sau a mai multor rânduri următoare în memoria cache de instrucțiuni. În acest caz, linia cache de instrucțiuni curentă este înțeleasă ca linia cache care conține instrucțiunea care este în curs de executare. La implementarea acestei metode, alegerea distanței optime de paginare [6] — distanța de la capătul liniei curente până la ultima linie încărcată — este de cea mai mare importanță . Dacă distanța de paginare este aleasă prea mică, atunci codul nu va avea timp să fie încărcat în memoria cache de instrucțiuni, iar procesorul va intra în starea de așteptare din cauza lipsei codului. Dacă alegeți o distanță prea mare, atunci efectul negativ al poluării cache (adică împingerea prea multor date utile din cache) poate depăși efectul pozitiv al preluării.
Metoda își arată eficiența în secțiuni succesive de cod, dar nu oferă nimic pentru preîncărcarea codului care ar trebui să înceapă să se execute după instrucțiunea de salt sau apelul procedurii. În ciuda deficiențelor sale evidente, metoda este ușor de implementat, necesită o cantitate minimă de hardware suplimentar în procesor [6] și reduce numărul de blocări din lipsa codului cu 20-50% [2] [7] .
Preaducerea unui șir datTehnologia a fost propusă în 1992 [7] . Această metodă, spre deosebire de preîncărcarea liniei următoare, este concepută pentru a furniza paginarea codului la care trece controlul programului ca rezultat al operației de tranziție. Pentru a face acest lucru, se adaugă un tabel hardware, în care se introduce fiecare operație de tranziție deja executată cu rezultatul ei (adresa tranziției). Metoda se bazează pe presupunerea: dacă o dată, la orice operațiune de transfer de control, a fost calculată o anumită adresă de tranziție, atunci este foarte probabil ca aceeași adresă să fie calculată atunci când se repetă aceeași operațiune.
Această abordare nu este capabilă să prevină erorile de cache de pornire la rece , deoarece pentru a utiliza tabelul la procesarea oricărei operațiuni de tranziție, este necesar să efectuați mai întâi această operație cel puțin o dată. În plus, metoda necesită o cantitate semnificativă de hardware suplimentar în procesor [6] .
Preluare prealabilă a tranziției eșuate [6] Preluare cu un predictor Markov [8]Folosind predictorul Markov, puteți preleva codul.
Tehnologii de procesoare digitale | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arhitectură | |||||||||
Arhitectura set de instrucțiuni | |||||||||
cuvânt mașină | |||||||||
Paralelism |
| ||||||||
Implementări | |||||||||
Componente | |||||||||
Gestionare a energiei |