Rekisterin uudelleennimeäminen

Tietokonetekniikassa rekisterien uudelleennimeämisellä tarkoitetaan tekniikkaa, jota käytetään välttämään ohjelman ohjeiden tarpeetonta sarjamuotoista suorittamista, koska kyseiset ohjeet käyttävät samoja rekistereitä uudelleen.

 

Ongelman määritelmä

Ohjelmat koostuvat ohjeista, jotka toimivat arvoilla. Ohjeiden on nimettävä nämä arvot, jotta ne voidaan erottaa toisistaan. Tyypillinen käsky voisi kuulua seuraavasti: Lisää X ja Y ja laita tulos paikkaan Z. Tässä käskyssä X, Y ja Z ovat tallennuspaikkojen nimiä.

Kompaktin käskykoodauksen aikaansaamiseksi useimmissa prosessorin käskykokonaisuuksissa on pieni joukko erikoispaikkoja, jotka voidaan nimetä suoraan. Esimerkiksi x86-käskykokonaisuusarkkitehtuurissa on 8 kokonaislukurekisteriä, x86-64:ssä 16, monissa RISC-järjestelmissä 32 ja IA-64:ssä 128. Pienemmissä prosessoreissa näiden paikkojen nimet vastaavat suoraan rekisteritiedoston osia.

Eri ohjeet voivat kestää eri aikaa (esim. CISC-arkkitehtuuri). Prosessori voi esimerkiksi pystyä suorittamaan satoja käskyjä, kun yksi lataus keskusmuistista on käynnissä. Lyhyemmät ohjeet, jotka suoritetaan latauksen ollessa kesken, valmistuvat ensin, jolloin ohjeet valmistuvat alkuperäisestä ohjelmajärjestyksestä poiketen. Järjestyksen ulkopuolista suoritusta on käytetty uusimmissa huipputehokkaissa suorittimissa joidenkin nopeusetujen saavuttamiseksi.

Ajattele tätä ohjeiden sekvenssiä, joka suoritetaan epäjärjestyksessä olevalla suorittimella:

1.LOAD R1, LOC MEM[1024] 2.R1 = R1 + 2 3.STORE R1, LOC MEM[1024+8] 4.LOAD R1, LOC MEM[2048] 5.R1 = R1 + 4 6.STORE R1, LOC MEM[2048+8]


 Käskyt 4, 5 ja 6 ovat riippumattomia käskyistä 1, 2 ja 3, mutta prosessori ei voi suorittaa käskyä 4
loppuun ennen kuin käsky 3 on valmis, koska 3 kirjoittaisi silloin väärän arvon.

Ongelman ratkaisu

Voimme poistaa tämän rajoituksen muuttamalla joidenkin rekisterien nimiä:

1.LOAD R1, LOC MEM[1024] 2.R1 = R1 + 2 3.STORE R1, LOC MEM[1024+8] 4.LOAD R2, LOC MEM[2048] 5.R2 = R2 + 4 6.STORE R2, LOC MEM[2048+8]

Nyt ohjeet 4, 5 ja 6 voidaan suorittaa rinnakkain ohjeiden 1, 2 ja 3 kanssa, jolloin ohjelma voidaan suorittaa nopeammin.

Mahdollisuuksien mukaan kääntäjät tekevät tämän uudelleennimeämisen. Kääntäjiä rajoittaa kuitenkin suorittimen rekisterien määrä. Monissa suorituskykyisissä suorittimissa on enemmän fyysisiä rekistereitä kuin mitä voidaan nimetä suoraan käskykokonaisuudessa, ja ne voivat nimetä rekisterit uudelleen laitteistossa parempien käskytason rinnakkaistoimintojen saavuttamiseksi.

Kaikki luettava ja kirjoitettava voidaan nimetä uudelleen. Yleiskäyttö- ja liukulukurekisterit ovat yleisimpiä, mutta myös lippu- ja tilarekistereitä tai jopa yksittäisiä tilabittejä nimetään yleisesti uudelleen.

Muistipaikkoja voidaan myös nimetä uudelleen, vaikkakaan sitä ei yleensä tehdä samalla tasolla kuin rekisterien uudelleen nimeämistä.

Vaarat Ongelma

Kun useampi kuin yksi käsky viittaa tiettyyn operandin paikkaan joko lukemalla sitä (syötteenä) tai kirjoittamalla sitä (tulosteena), näiden käskyjen suorittaminen alkuperäisestä ohjelmajärjestyksestä poikkeavassa järjestyksessä voi aiheuttaa kolmenlaisia ongelmia, joita kutsutaan myös vaaratekijöiksi:

  • Kirjoituksen jälkeinen lukeminen (RAW)

Rekisteristä tai muistipaikasta luettaessa on palautettava arvo, joka on asetettu sinne ohjelman järjestyksessä viimeisellä kirjoituksella, ei jollain muulla kirjoituksella. Tätä kutsutaan todelliseksi riippuvuudeksi tai virtausriippuvuudeksi, ja se edellyttää, että ohjeet suoritetaan ohjelmajärjestyksessä.

  • Kirjoituksen jälkeinen kirjoitus (WAW)

Tietyn rekisterin tai muistipaikan peräkkäisten kirjoitusten on jätettävä kyseinen paikka sisältämään toisen kirjoituksen tulos. Tämä voidaan tarvittaessa ratkaista puristamalla (synonyymit: peruuttamalla, mitätöimällä, poistamalla) ensimmäinen kirjoitus. WAW-riippuvuuksia kutsutaan myös tulostusriippuvuuksiksi.

  • Lukemisen jälkeinen kirjoitus (WAR)

Rekisteristä tai muistipaikasta luetun arvon on palautettava viimeisin kyseiseen paikkaan kirjoitettu arvo, ei lukemisen jälkeen ohjelmallisesti kirjoitettua arvoa. Tällainen väärä riippuvuus voidaan ratkaista nimeämällä uudelleen. WAR-riippuvuuksia kutsutaan myös antiriippuvuuksiksi.

Sen sijaan, että kirjoitusta viivytettäisiin, kunnes kaikki lukukerrat on suoritettu, voidaan säilyttää kaksi kopiota sijainnista, vanha arvo ja uusi arvo. Uuden arvon kirjoitusta ohjelmajärjestyksessä edeltävät lukukerrat voivat saada vanhan arvon, vaikka muut kirjoitusta seuraavat lukukerrat saavat uuden arvon. Väärä riippuvuus katkeaa ja luodaan lisää mahdollisuuksia järjestyksen ulkopuoliseen suoritukseen. Kun kaikki vanhaa arvoa tarvitsevat lukukerrat on tyydytetty, se voidaan hylätä. Tämä on rekisterien uudelleennimeämisen keskeinen käsite.  

Aiheeseen liittyvät sivut

  • Rinnakkaislaskenta
  • Käskytason rinnakkaisuus
 

AlegsaOnline.com - 2020 / 2023 - License CC3