Mikä on rekisteri?

Jos et ole erityisen kiinnostunut tietokoneista, saat anteeksi oletuksen, että tietokoneen ainoat muistimuodot olivat kiintolevy ja RAM. Ne teistä, jotka ovat kiinnostuneita tietokoneista, tietävät todennäköisesti, että näin ei ole, ja että CPU: ssa on myös joukko välimuistia, joita käytetään tietojen tallentamiseen RAM-muistista, jotta CPU voi käyttää niitä nopeammin. Kaikki nämä ovat mainostettuja ominaisuuksia, pääasiassa siksi, että nopeus ja/tai kapasiteetti ovat kunnollinen myyntivaltti ja vaikuttavat yleensä suorituskykyyn.

Todellisuudessa on kuitenkin yksi toinen muistikerros. Niin paljon kuin luulisi, että L1-välimuisti on mahdollisimman lähellä varsinaista käsittelyydintä, muistihierarkiassa on toinen korkeampi kerros. Nämä ovat CPU-rekistereitä. Syy, miksi näitä ei todellakaan mainosteta tai mainita, on se, että niitä ei oikeastaan ​​muuteta ollenkaan. Teknisesti ne voisivat kuitenkin olla, mutta rekisterien määrä ja koko on itse asiassa arkkitehtuurin perusta. Tämä tarkoittaa, että kaikilla x86-64-suorittimilla on sama määrä rekistereitä. Niitä ei markkinoida, koska ne eivät ole kilpaileva piste.

Mitä rekisteri tekee?

Rekisteri on nopeasti saatavilla oleva tallennuspaikka prosessorille. Pääsy rekisteriin on välitön nollaviiveellä, kun taas jopa L1-välimuistilla on noin 4-5 syklin latenssi nykyaikaisissa prosessoreissa. Tämä välitön pääsy vihjaa rekisterien käyttötapaukseen. Rekisterejä käytetään CPU: n aktiivisesti käyttämien ohjeiden tallentamiseen. Ne tallentavat myös datapisteitä, jotka on tarkoitus käsitellä. Jotkut rekisterit ovat yleiskäyttöisiä, kun taas toisilla on hyvin erityinen tarkoitus. Esimerkki erikoisrekisteristä olisi ohjelmalaskuri, jossa prosessori seuraa sijaintiaan ohjelmasekvenssissään.

Monet rekisterit katsotaan käyttäjien käytettävissä. Tämä ei kuitenkaan tarkoita, että tietokoneen käyttäjä voi valita, mitä arvoa niille antaa. Se tarkoittaa, että käynnissä oleva ohjelmisto voi määrittää näihin rekistereihin ladattavat tiedot. Pienempi määrä rekistereitä on sisäisiä, joten ohjelmisto ei pysty käsittelemään niitä ollenkaan. Käskyrekisteri, joka tallentaa parhaillaan suoritettavan käskyn, on esimerkki sisäisestä rekisteristä.

Rekisteröi uudelleennimeäminen

Vaikka CPU-arkkitehtuuri saattaa sallia vain yhden rekisterien konfiguroinnin, siinä on itse asiassa hieman vivahteita. Kaikki nykyaikaiset prosessorit käyttävät rekisterien uudelleennimeämistä. Tämä on tekniikka, jossa sinulla voi olla enemmän fyysisiä rekistereitä ja käyttää niitä tietojen esilataamiseen tai tallentamaan tietoja, jotka liittyvät epäjärjestyksessä olevaan käskyyn, joka muuten olisi ylikirjoitettu. Kun prosessori pääsee siihen pisteeseen, että se tarvitsee ylimääräisten rekistereiden dataa, se yksinkertaisesti nimeää ne uudelleen osoitteelliseksi, samalla kun tekee aiemmin osoitteellisesta rekisteristä osoitteettomaksi.

Rekisterin uudelleennimeämisprosessi voi olla erittäin hyödyllinen epäjärjestyksessä suoritettaessa. Jos esimerkiksi muistipaikka on ohjelmoitu luettavaksi ja kirjoitettavaksi, ja ohjeet suoritettiin tässä järjestyksessä, se on hyvä. Jos käskyt kuitenkin järjestetään uudelleen suorittamaan kirjoitus ensin, lukukäsky saa väärän arvon. Tämän estämiseksi alkuperäinen luettava arvo tallennetaan käyttämättömään rekisteriin, joka sitten nimetään uudelleen, kun vastaavaa käskyä käsitellään.

Johtopäätös

Rekisterit ovat muistihierarkian korkein taso. Ne ovat ainoa osa, jonka suoritin voi suoraan osoittaa, eikä niissä ole latenssia. Rekisterejä käytetään CPU: n aktiivisesti suorittamien tietojen tallentamiseen. Niitä käytetään myös muiden tietopisteiden tallentamiseen, kuten ohjelmalaskuriin, joka seuraa, mikä käsky on seuraava suoritettava. Hyvin rajallinen määrä rekistereitä on saatavilla x86-64-arkkitehtuurissa, jossa on 16 yleiskäyttöistä rekisteriä ja joko 16 tai 32 liukulukurekisteriä riippuen siitä, onko AVX-512 tuettu.