Ho appena esaminato alcune diapositive e ho notato che la cache L1 (almeno sulle CPU Intel) distingue tra dati e cache delle istruzioni, vorrei sapere perché questo è ..
Ci sono in realtà diversi motivi.
In primo luogo e probabilmente soprattutto, i dati memorizzati nella cache delle istruzioni sono in genere leggermente diversi da quelli memorizzati nella cache di dati - insieme alle istruzioni stesse, ci sono annotazioni per cose come l'inizio dell'istruzione successiva, per aiutare i decodificatori. Alcuni processori (ad esempio, Netburst, alcuni SPARC) utilizzano una "trace cache", che memorizza il risultato della decodifica di un'istruzione invece di memorizzare l'istruzione originale nella sua forma codificata.
In secondo luogo, semplifica i circuiti un po '- la cache dei dati deve occuparsi di letture e scritture, ma la cache delle istruzioni si occupa solo delle letture. (Questo fa parte del motivo per cui il codice auto-modificante è così costoso - invece di sovrascrivere direttamente i dati nella cache delle istruzioni, la scrittura passa attraverso la cache dei dati nella cache L2, e quindi la riga nella cache delle istruzioni viene invalidata e -loaded from L2).
In terzo luogo, aumenta la larghezza di banda: la maggior parte dei processori moderni può leggere i dati dalla cache delle istruzioni e dalla cache dei dati contemporaneamente. La maggior parte ha anche code all'ingresso della cache, quindi possono effettivamente fare due letture e una scrittura in un dato ciclo.
In quarto luogo, può risparmiare energia. Mentre è necessario mantenere l'alimentazione delle celle di memoria stesse per mantenere il loro contenuto, alcuni processori possono / spegnere alcuni dei circuiti associati (decodificatori e simili) quando non vengono utilizzati. Con cache separate, possono alimentare questi circuiti separatamente per istruzioni e dati, aumentando le possibilità che un circuito rimanga non alimentato durante un determinato ciclo (non sono sicuro che nessun processore x86 lo faccia: AFAIK, è più di un ARM cosa).
Proprio come gli immobili, l'uso della cache è guidato da tre fattori: posizione, posizione, posizione. L'intero punto di avere una cache è che la maggior parte dei programmi mostra pattern di ubicazione: se accedono al byte 1111111, il prossimo byte a cui accedono è probabilmente 1111110 o 1111112, e non tanto il byte 9999999. Tuttavia, la maggior parte dei programmi mostrerà molto diverso schemi di localizzazione per le loro istruzioni e i loro dati. Ciò significa che sarebbe improbabile che le istruzioni e i dati siano in grado di condividere la cache in modo efficiente. Perché le istruzioni e i dati non sono necessariamente vicini l'uno all'altro nella memoria. Un accesso ai dati farebbe saltare le istruzioni dalla cache e le istruzioni di caricamento farebbero saltare i dati dalla cache.