Spore hurtigbuffer - Trace cache
I dataarkitektur er en sporingsbuffer eller utførelsessporebuffer en spesialisert instruksjonsbuffer som lagrer den dynamiske strømmen av instruksjoner kjent som trace . Det hjelper med å øke båndbredden for instruksjonene og redusere strømforbruket (i tilfelle Intel Pentium 4 ) ved å lagre spor av instruksjoner som allerede er hentet og dekodet. En sporingsprosessor er en arkitektur designet rundt sporingsbufferen og behandler instruksjonene på sporingsnivå granularitet. Den formelle matematiske teorien om spor er beskrevet av spormonoider .
Bakgrunn
Den tidligste akademiske publikasjonen av trace cache var "Trace Cache: a Low Latency Approach to High Bandwidth Instruction Fetching". Dette anerkjente papiret ble presentert av Eric Rotenberg, Steve Bennett og Jim Smith på 1996 International Symposium on Microarchitecture (MICRO) -konferansen. En tidligere publikasjon er US patent 5381533, av Alex Peleg og Uri Weiser fra Intel, "Dynamic flow instruction cache memory organised around trace segments independent of virtual address line", en fortsettelse av en søknad arkivert i 1992, senere forlatt.
Nødvendighet
Bredere superscalar-prosessorer krever at flere instruksjoner hentes i en enkelt syklus for høyere ytelse. Instruksjoner som skal hentes ligger ikke alltid sammenhengende minneplasser ( grunnleggende blokker ) på grunn av instruksjoner om forgrening og hopp . Så prosessorer trenger ekstra logikk og maskinvarestøtte for å hente og justere slike instruksjoner fra ikke sammenhengende grunnleggende blokker. Hvis flere grener blir spådd som ikke tatt , kan prosessorer hente instruksjoner fra flere sammenhengende grunnleggende blokker i en enkelt syklus. Imidlertid, hvis noen av grenene blir spådd som tatt , bør prosessoren hente instruksjoner fra den valgte banen i den samme syklusen. Dette begrenser hentingskapasiteten til en prosessor.
Vurder disse fire grunnleggende blokker ( A , B , C , D ), som vist i figuren som korresponderer med en enkel if-else sløyfe. Disse blokkene lagres sammenhengende som ABCD i minnet. Hvis grenen D er spådd ikke-tatt, kan innhentingsenheten hente de grunnleggende blokker A , B , C som er plassert contiguously. Hvis imidlertid D forventes tatt , den innhentingsenheten har for å hente A , B , D som er ikke-contiguously plassert. Det vil derfor være veldig vanskelig å hente disse blokkene som ikke er sammenhengende plassert i en enkelt syklus. Så, i situasjoner som disse, kommer sporingsbufferen til hjelp for prosessoren.
Når den er hentet, lagrer sporingsbufferen instruksjonene i sin dynamiske sekvens. Når disse instruksjonene oppstår igjen, lar sporingsbufferen instruksjonshentingsenheten til en prosessor hente flere grunnleggende blokker fra den uten å måtte bekymre seg for grener i utførelsesstrømmen. Instruksjonene lagres i sporingsbufferen enten etter at de er blitt dekodet, eller når de er pensjonert. Imidlertid er instruksjonssekvensen spekulativ hvis de lagres like etter dekodningstrinnet.
Sporstruktur
Et spor, også kalt en dynamisk instruksjonssekvens, er en oppføring i sporingsbufferen. Det kan preges av maksimalt antall instruksjoner og maksimale grunnleggende blokker . Spor kan starte med hvilken som helst dynamisk instruksjon. Flere spor kan ha samme start instruksjon dvs. samme startprogramteller (PC) og instruksjoner fra ulike grunnleggende blokker som per avdelings utfall. For figuren ovenfor er ABC og ABD gyldige spor. De starter begge på samme PC (adresse A) og har forskjellige grunnleggende blokker i henhold til Ds forutsigelse.
Spor slutter vanligvis når ett av følgende oppstår:
- Trace ble fylt med tillatt maksimalt antall instruksjoner
- Trace har tillatte maksimale grunnleggende blokker
- Returinstruksjoner
- Indirekte grener
- Systemanrop
Spor kontrollinformasjon
Et enkelt spor vil ha følgende informasjon:
- Starter PC - PC av den første instruksjonen i spor
- Forgreningsflagg - ( maksimalt grunnleggende blokker -1 ) forutsigelser om gren
- Grenmaske - antall grener i sporet, og om spor slutter i en gren eller ikke
- Trace fall through - Neste PC hvis siste instruksjon ikke er tatt gren eller ikke en gren
- Spormål - adresse til den siste grenens tatt mål
Spor cache-design
Følgende er faktorene som må vurderes når du designer en sporingsbuffer.
- Retningslinjer for valg av spor - maksimalt antall instruksjoner og maksimale grunnleggende blokker i et spor
- Associativitet - antall måter en cache kan ha
- Cacheindekseringsmetode - sammenkobling eller XOR med PC-biter
- Baneassosiativitet - spor med samme start-PC, men med forskjellige grunnleggende blokker, kan kartlegges til forskjellige sett
- Spor valg av fyllingsbuffer -
- Etter dekodningsfasen (spekulativ)
- Etter pensjonistappen
En sporingsbuffer er ikke på den kritiske veien for henting av instruksjoner
Hit / miss-logikk
Sporelinjer lagres i sporingsbufferen basert på PC-en for den første instruksjonen i sporet og et sett med grenforutsigelser. Dette muliggjør lagring av forskjellige sporingsbaner som starter på samme adresse, hver representerer forskjellige grenresultater. Denne metoden for merking hjelper til med å gi baneassosiativitet til sporingsbufferen. En annen metode kan omfatte å ha bare start-PC som tag i spor cache. I instruksjonshentingsfasen av en rørledning blir den nåværende PCen sammen med et sett av grenforutsigelser sjekket i sporingsbufferen for en hit . Hvis det er et treff, leveres en sporingslinje for å hente enheten som ikke trenger å gå til en vanlig cache eller til minne for disse instruksjonene. Sporbufferen fortsetter å mate hentingsenheten til sporingslinjen slutter, eller til det er feil prediksjon i rørledningen. Hvis det er savn, begynner det å bygges et nytt spor.
Pentium 4s kjøringssporbuffer lagrer mikrooperasjoner som følge av dekoding av x86-instruksjoner , og gir også funksjonaliteten til en mikrooperasjonsbuffer. Når du har dette, trenger du ikke å dekode det til mikrooperasjoner neste gang en instruksjon trengs.
Ulemper
Ulempene med sporingsbuffer er:
- Redundant instruksjonslagring mellom sporingsbuffer og instruksjonsbuffer og i selve sporingsbuffer.
- Effektiv ineffektivitet og maskinvarekompleksitet
Utføringssporbuffer
Innenfor L1-hurtigbufferen til NetBurst- prosessorer, innarbeidet Intel sin sporingsbuffer for kjøring. Den lagrer dekodede mikrooperasjoner , slik at når du utfører en ny instruksjon, i stedet for å hente og dekode instruksjonen igjen, får CPU direkte tilgang til de dekodede mikrooperatorene fra sporingsbufferen, og sparer dermed betydelig tid. Videre er micro-opsjonene bufret i sin forventede kjøringsbane, noe som betyr at når instruksjoner blir hentet av CPUen fra cachen, er de allerede til stede i riktig rekkefølge. Intel introduserte senere et lignende, men enklere konsept med Sandy Bridge, kalt micro-operation cache (UOP cache).