Trace cache - Trace cache

Image
Funzionamento di una cache di traccia

Nell'architettura del computer , una cache di traccia o una cache di traccia di esecuzione è una cache di istruzioni specializzata che memorizza il flusso dinamico di istruzioni noto come traccia . Aiuta ad aumentare la larghezza di banda per il recupero delle istruzioni e a ridurre il consumo energetico (nel caso di Intel Pentium 4 ) memorizzando tracce di istruzioni che sono già state recuperate e decodificate. Un processore di traccia è un'architettura progettata attorno alla cache di traccia ed elabora le istruzioni con granularità a livello di traccia. La teoria matematica formale delle tracce è descritta dai monoidi delle tracce .

sfondo

La prima pubblicazione accademica di trace cache era "Trace Cache: a Low Latency Approach to High Bandwidth Instruction Fetching". Questo documento ampiamente riconosciuto è stato presentato da Eric Rotenberg, Steve Bennett e Jim Smith alla conferenza del 1996 International Symposium on Microarchitecture (MICRO). Una pubblicazione precedente è il brevetto statunitense 5381533, di Alex Peleg e Uri Weiser di Intel, "Memoria cache di istruzioni a flusso dinamico organizzata attorno a segmenti di traccia indipendenti dalla riga di indirizzo virtuale", una continuazione di una domanda presentata nel 1992, successivamente abbandonata.

Necessità

I processori superscalari più larghi richiedono più istruzioni da recuperare in un unico ciclo per prestazioni più elevate. Istruzioni per essere scaricata non sono sempre in locazioni di memoria contigue ( blocchi di base ) a causa di filiali e di salto istruzioni. Quindi i processori necessitano di logica aggiuntiva e supporto hardware per recuperare e allineare tali istruzioni da blocchi di base non contigui. Se più rami sono previsti come non presi , i processori possono recuperare istruzioni da più blocchi di base contigui in un singolo ciclo. Tuttavia, se uno qualsiasi dei rami è previsto come preso , il processore dovrebbe recuperare le istruzioni dal percorso preso in quello stesso ciclo. Ciò limita la capacità di recupero di un processore.

Image
Blocchi di base di un semplice ciclo if-else

Considerare questi quattro blocchi di base ( A , B , C , D ) come indicato in figura, che corrispondono ad un semplice if-else loop. Questi blocchi verranno memorizzati in modo contiguo come ABCD nella memoria. Se il ramo D è previsto non-presa, l'unità di recupero può recuperare i blocchi di base A , B , C che sono posti in modo contiguo. Tuttavia, se D si prevede presa , il recupero unità deve recuperare A , B , D che sono non-contiguo disposto. Quindi, recuperare questi blocchi che non sono posti contigui, in un unico ciclo sarà molto difficile. Quindi, in situazioni come queste, la cache di traccia viene in aiuto al processore.

Una volta scaricata, la cache di traccia memorizza le istruzioni nella loro sequenza dinamica. Quando queste istruzioni vengono incontrate di nuovo, la cache di traccia consente all'unità di recupero delle istruzioni di un processore di recuperare diversi blocchi di base da esso senza doversi preoccupare dei rami nel flusso di esecuzione. Le istruzioni verranno memorizzate nella cache di traccia dopo che sono state decodificate o quando vengono ritirate. Tuttavia, la sequenza delle istruzioni è speculativa se vengono memorizzate subito dopo la fase di decodifica.

Traccia la struttura

Una traccia, chiamata anche sequenza di istruzioni dinamiche, è una voce nella cache della traccia. Può essere caratterizzato dal numero massimo di istruzioni e dal numero massimo di blocchi di base . Le tracce possono iniziare da qualsiasi istruzione dinamica. Tracce multiple possono avere la stessa istruzione di partenza, cioè lo stesso contatore del programma di partenza (PC) e istruzioni da diversi blocchi di base in base ai risultati del ramo. Per la figura sopra, ABC e ABD sono tracce valide. Entrambi iniziano sullo stesso PC (indirizzo di A) e hanno blocchi di base diversi secondo la previsione di D.

Le tracce di solito terminano quando si verifica una delle seguenti condizioni:

  1. La traccia è stata riempita con il numero massimo consentito di istruzioni
  2. Trace ha blocchi di base massimi consentiti
  3. Istruzioni per la restituzione
  4. Filiali indirette
  5. Chiamate di sistema

Traccia le informazioni di controllo

Una singola traccia avrà le seguenti informazioni:

  • Avvio PC - PC della prima istruzione in traccia
  • Flag del ramo: ( massimo blocchi di base -1 ) previsioni del ramo
  • Maschera ramo: numero di rami nella traccia e se la traccia finisce in un ramo o meno
  • Trace fall through - Il prossimo PC se l'ultima istruzione non è un ramo o non è un ramo
  • Trace target - indirizzo dell'ultimo branch preso di mira

Traccia il design della cache

Di seguito sono riportati i fattori che devono essere considerati durante la progettazione di una cache di traccia.

  • Criteri di selezione della traccia: numero massimo di istruzioni e blocchi di base massimi in una traccia
  • Associatività : numero di modi in cui può avere una cache
  • Metodo di indicizzazione della cache: concatenazione o XOR con bit del PC
  • Associatività del percorso: le tracce con lo stesso PC iniziale ma con blocchi di base diversi possono essere mappate su set diversi
  • Traccia le scelte di riempimento della cache -
    1. Dopo la fase di decodifica (speculativa)
    2. Dopo la fase di ritiro

Una cache di traccia non si trova sul percorso critico del recupero delle istruzioni

Logica hit / miss

Le linee di traccia vengono memorizzate nella cache di traccia in base al PC della prima istruzione nella traccia e a una serie di previsioni di ramo. Ciò consente di memorizzare diversi percorsi di traccia che iniziano sullo stesso indirizzo, ognuno dei quali rappresenta diversi risultati di diramazione. Questo metodo di etichettatura aiuta a fornire l'associatività del percorso alla cache di traccia. Un altro metodo può includere solo l'avvio del PC come tag nella cache di traccia. Nella fase di recupero delle istruzioni di una pipeline , il PC corrente insieme a una serie di previsioni di diramazione viene controllato nella cache di traccia per rilevare eventuali risultati . Se c'è un riscontro, viene fornita una linea di traccia per recuperare l'unità che non deve andare in una cache normale o in memoria per queste istruzioni. La cache di traccia continua ad alimentare l'unità di recupero fino al termine della riga di traccia o fino a quando non si verifica una previsione errata nella pipeline. In caso di errore, inizia a essere costruita una nuova traccia.

La cache di traccia dell'esecuzione del Pentium 4 memorizza le micro-operazioni risultanti dalla decodifica delle istruzioni x86 , fornendo anche la funzionalità di una cache per micro-operazioni. Avendo questo, la prossima volta che è necessaria un'istruzione, non è necessario decodificarla nuovamente in micro-operazioni.

Svantaggi

Gli svantaggi della cache di traccia sono:

  1. Archiviazione ridondante delle istruzioni tra la cache di traccia e la cache di istruzioni e all'interno della stessa cache di traccia.
  2. Inefficienza energetica e complessità hardware

Cache della traccia di esecuzione

Nella cache L1 delle CPU NetBurst , Intel ha incorporato la sua cache di traccia dell'esecuzione. Memorizza le micro-operazioni decodificate , in modo che quando si esegue una nuova istruzione, invece di recuperare e decodificare nuovamente l'istruzione, la CPU accede direttamente alle micro-operazioni decodificate dalla cache di traccia, risparmiando così tempo considerevole. Inoltre, le micro-operazioni vengono memorizzate nella cache nel loro percorso di esecuzione previsto, il che significa che quando le istruzioni vengono recuperate dalla CPU dalla cache, sono già presenti nell'ordine di esecuzione corretto. Intel ha successivamente introdotto un concetto simile ma più semplice con Sandy Bridge chiamato micro-operation cache (cache UOP).

Guarda anche

Riferimenti