Care este diferența cheie între un cache de date și un cache de instrucțiuni?


Răspunsul 1:

Trebuie să analizați cum funcționează procesorul pentru a înțelege clar acest lucru.

Funcționarea procesorului urmând o buclă foarte simplă (mai mult sau mai puțin):

  1. Încărcați „instrucțiuni” din memorieLocați orice „date” asociate cu instrucțiunea din memoryExecute „instrucțiunea” Salvați orice „date” care este creată de instrucțiunea la memoryIncrement program-counterGo la pasul 1

Toate programele sunt împărțite în cod executabil, numit Instrucțiunile și datele asociate programului.

Programul mic - adică secvența de instrucțiuni - poate fi:

  • Locație de memorie executabilă 0001: Locație LOAD M1Executable memory 0002: LOAD M2Executable Memory Locație 0003: MULTIPLYExecutable Memory Locație 0004: STORE M1

Deci, CPU trebuie să încarce prima instrucțiune, care îi spune să încarce „date” din locația de memorie M1. A doua instrucțiune îi spune să încarce „date” din locația de memorie M2. Apoi CPU multiplică acest lucru (și îl stochează intern într-o locație temporară în interiorul procesorului). Instrucțiunea finală îi spune să suprascriere locația de memorie de date M1 cu rezultatul temporar.

După cum vedeți, procesorul trebuie să se ocupe de două regiuni de memorie independente - una care conține instrucțiunile pe care trebuie să le execute și una care conține datele pe care le utilizează aceste instrucțiuni.

Cache-ul care se ocupă cu prima regiune este „cache-ul de instrucțiuni”, iar cel care se ocupă de a doua regiune este „cache-ul de date”. Acestea sunt mai mult sau mai puțin independente (dar tipul de memorie în cache de date depinde de memoria cache de instrucțiuni, în multe cazuri).

În ceea ce privește modul în care funcționează cache-urile și diferențele de implementare a fiecăruia este o discuție inginerească destul de complexă (pentru că lucrează oarecum diferit unele de altele)


Răspunsul 2:

După cum spune Luc, cache-ul I deține numai instrucțiuni, în timp ce D-cache conține date.

Un DCache L1 nu va avea de obicei atât date cât și instrucțiuni, cu excepția cazului în care citiți segmentul de cod ca date.

Un cache L2 și L3 vor fi de obicei „unificate” și vor păstra atât instrucțiuni cât și date.

Cealaltă mare problemă despre cache-urile de instrucțiuni este că, cel puțin în unele arhitecturi, acestea nu sunt coerente. Scrierile în fluxul de instrucțiuni pot să nu actualizeze imediat copii în Icache. Cred că MIPS funcționează astfel.

Acest lucru face ca Icache să fie mai ieftin, deoarece nu are căutări de la magazin sau coerență de memorie. Pe de altă parte, atunci când doriți să generați cod din mers, trebuie să invalidați icache-ul în software pentru ca acesta să funcționeze.

(MIPS are o tradiție îndelungată de „RISC” iness, necesitând un software care să gestioneze cazuri neobișnuite. SGI a construit odată un multiprocesor fără memorie coerentă și l-au făcut să funcționeze după actualizări hercule la OS. Intel, având tranzistori liberi la dispoziție, de obicei face ca hardware-ul să se ocupe de astfel de lucruri.)