Hvis du ikke er specielt interesseret i computere, ville du blive tilgivet for at antage, at de eneste former for hukommelse i en computer var harddisken og RAM. De af jer med interesse for computere ville sandsynligvis vide, at dette ikke er tilfældet, og at CPU'en har også et sæt caches, der bruges til at cache data fra RAM'en, så CPU'en kan få adgang til det hurtigere. Alle disse er annoncerede funktioner, primært fordi hastigheden og/eller kapaciteten er et anstændigt salgsargument og generelt påvirker ydeevnen.
Der er faktisk et andet hukommelseslag. Så meget som du måske tror, at L1-cachen er så tæt på den faktiske behandlingskerne som muligt, er der endnu et højere lag i hukommelseshierarkiet. Disse er CPU-registrene. Grunden til, at disse ikke rigtig annonceres eller nævnes, er, at de overhovedet ikke er ændret. Teknisk set kan de være, men antallet og størrelsen af registre er faktisk grundlæggende for arkitekturen. Det betyder, at alle x86-64 CPU'er har det samme antal registre. De markedsføres ikke, fordi de ikke er et konkurrerende punkt.
Hvad gør et register?
Et register er et hurtigt tilgængeligt lagersted for processoren. Adgang til et register er øjeblikkelig med nul latency, hvorimod selv L1-cachen har en cirka 4-5 cyklus latency i moderne CPU'er. Denne umiddelbare adgang antyder brugen af registre. Registre bruges til at gemme instruktionerne, der aktivt betjenes af CPU'en. De gemmer også datapunkter, der skal behandles. Nogle registre er generelle formål, mens andre har et meget specifikt formål. Et eksempel på et specialformålsregister ville være programtælleren, som er hvor processoren sporer sin position i sin programsekvens.
Mange registre betragtes som brugertilgængelige. Dette betyder dog ikke, at brugeren af en computer kan vælge, hvilken værdi de vil lægge i dem. Det betyder, at den kørende software kan specificere data, der skal indlæses i disse registre. Et mindre antal registre er interne, hvilket betyder, at software slet ikke kan adressere dem. Instruktionsregisteret, som gemmer den instruktion, der aktuelt udføres, er et eksempel på et internt register.
Registrer omdøbning
Mens en CPU-arkitektur kun tillader en enkelt konfiguration af registre, er der faktisk en smule nuance i det. Alle moderne CPU'er gør brug af registeromdøbning. Dette er en teknik, hvor du kan have flere fysiske registre og bruge dem til at forudindlæse data eller gemme data relateret til en ude af drift instruktion, som ellers ville være blevet overskrevet. Når CPU'en kommer til det punkt, at den har brug for dataene i de ekstra registre, omdøber den blot, så den er adresserbar, samtidig med at et tidligere adresserbart register ikke kan adresseres.
Processen med at omdøbe registeret kan være meget nyttig ved udelukket udførelse. For eksempel, hvis en hukommelsesplacering er programmeret til at blive læst fra og derefter skrevet til, og instruktionerne blev udført i den rækkefølge, er dette fint. Hvis instruktionerne imidlertid omorganiseres til at udføre skrivningen først, ville læseinstruktionen få den forkerte værdi. For at forhindre dette, lagres den oprindelige værdi, der skal læses, i et ubrugt register, som derefter omdøbes, når den relevante instruktion behandles.
Konklusion
Registre er det højeste niveau i hukommelseshierarkiet. De er den eneste del, der kan adresseres direkte af CPU'en og har ingen latenstid. Registre bruges til at lagre de data, der aktivt udføres af CPU'en. De bruges også til at gemme andre datapunkter såsom programtælleren, der holder styr på, hvilken instruktion der er den næste, der skal udføres. Meget begrænset antal registre er tilgængelige med x86-64-arkitekturen med 16 generelle registre og enten 16 eller 32 flydende kommaregistre afhængigt af om AVX-512 er understøttet.