it-swarm.it

Perché ci sono cache L1 separate per dati e istruzioni?

Ho appena passato alcune diapositive e ho notato che la cache L1 (almeno sulle CPU Intel) distingue tra cache dati e istruzioni, vorrei sapere perché questo è ...

23
Nils

Ci sono in realtà diverse ragioni.

Innanzitutto e probabilmente soprattutto, i dati archiviati nella cache delle istruzioni sono generalmente leggermente diversi da quelli memorizzati nella cache dei dati - insieme alle istruzioni stesse, ci sono annotazioni per cose come dove inizia la prossima istruzione, per aiutare i decodificatori. Alcuni processori (ad es. Netburst, alcuni SPARC) utilizzano una "cache di traccia", che memorizza il risultato della decodifica di un'istruzione anziché memorizzare l'istruzione originale nella sua forma codificata.

In secondo luogo, semplifica un po 'i circuiti: la cache dei dati deve gestire le letture e le scritture, ma la cache delle istruzioni si occupa solo delle letture. (Questo è uno dei motivi per cui il codice di auto-modifica è così costoso - invece di sovrascrivere direttamente i dati nella cache delle istruzioni, la scrittura passa attraverso la cache dei dati nella cache L2, quindi la riga nella cache delle istruzioni viene invalidata e ri caricato da L2).

In terzo luogo, aumenta la larghezza di banda: i processori più moderni possono leggere i dati dalla cache delle istruzioni e dalla cache dei dati contemporaneamente. Molti hanno anche delle 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 la potenza delle celle di memoria stesse per conservare il loro contenuto, alcuni processori possono/fare 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 spento durante un determinato ciclo (non sono sicuro che qualsiasi processore x86 faccia questo - AFAIK, è più di un = ARM cosa).

28
Jerry Coffin

Proprio come il settore immobiliare, l'uso della cache è guidato da tre cose: posizione, posizione, posizione. L'intero punto di avere una cache è che la maggior parte dei programmi mostra schemi di posizione: se accedono al byte 1111111, allora il byte successivo a cui accederanno è probabilmente 1111110 o 1111112, e non così tanto byte 9999999. Tuttavia, la maggior parte dei programmi presenterà molto diversi modelli di posizione per le loro istruzioni e i loro dati. Ciò significa che è improbabile che istruzioni e 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 in memoria. Un accesso ai dati eliminerebbe le istruzioni dalla cache e le istruzioni di caricamento avrebbero annullato i dati dalla cache.

5