Suorittimen välimuistin yleiskatsaus
Suorituskykyä parantaakseen jotkin 68k-perheen suorittimet osaavat tallentaa muistihakuja välimuistiin.
Välimuistiin viitataan aina loogisella osoitteella, sisältäen haun funktiokoodin. Tämä tarkoittaa, että User- ja Supervisor-tilan haut tuottavat erilaiset välimuistikirjaukset (lisätietoa Motorolan ohjekirjoista).
Seuraavassa yleiskatsaus 68k-suoritinten välimuistikyvyistä:
- 68000 ei mitään
- 68010
- Instruction Prefetch
kaksi sanaa (word) esihaku, yksi sana dekoodausrekisteri
- Loop Mode
siirrytään, kun yhden sanan käskyä seuraa DBcc, ei käskyhakuja ennen silmukan päättymistä
- 68020
- Instruction Prefetch
yksi long word
- Instruction Cache
16 riviä á 16 tavua = 256 tavua
voidaan ottaa käyttöön tai jäädyttää CACR:n kautta
- 68030
- Instruction Prefetch
yksi long word
- Instruction Cache
16 riviä á 16 tavua = 256 tavua
voidaan ottaa käyttöön tai jäädyttää CACR:n kautta
- Data Cache
16 riviä á 16 tavua = 256 tavua
voidaan ottaa käyttöön tai jäädyttää CACR:n kautta
aina WriteThrough
valittava Write Allocation -tila
- 68040
- Instruction Prefetch
yksi long word
- Instruction Cache
256 riviä á 16 tavua = 4096 tavua
voidaan ottaa käyttöön tai jäädyttää CACR:n kautta
- Data Cache
256 riviä á 16 tavua = 4096 tavua
voidaan ottaa käyttöön tai jäädyttää CACR:n kautta
valittavana tilat CopyBack/WriteThrough via MMU
- 68060
- Instruction Prefetch
yksi long word
- Instruction Cache
512 riviä á 16 tavua = 8192 tavua
voidaan ottaa käyttöön, jäädyttää tai alentaa puoleen kokoon CACR:n kautta
- Branch Cache
voidaan ottaa käyttöön CACR:n kautta
MMU-asetus ei vaikuta!
- Superscalar Dispatch
voidaan ottaa käyttöön CACR:n kautta
- Data Cache
512 riviä á 16 tavua = 8192 tavua
voidaan ottaa käyttöön, jäädyttää tai alentaa puoleen kokoon CACR:n kautta
valittavana tilat CopyBack/WriteThrough via MMU
- Push Buffer
voidaan kytkeä pois PCR:n kautta
- Store Buffer
voidaan ottaa käyttöön CACR:n kautta
Sivujen oltava NonCachable Serialized (tarkka)
Ensimmäinen tärkeä asia on sen ymmärtäminen, että 68030 - 68060:ssa välimuistia ohjaavat Cache Control Register (CACR) ja MMU (olettaen, että WHDLoad käyttää ja ohjaa MMU:ta)!
CACR:ssä välimuistit otetaan yleisesti käyttöön tai pois käytöstä. MMU:ta käytettäessä yksittäisten sivujen (WHDLoadissa 4 Kt) kohdalle merkitään, miten ne voi tallentaa välimuistiin.
68030:ssä muistisivu voi olla Cacheable tai NotCacheable. 68040/68060:ssä se voi olla tallennettavissa WriteThrough-välimuistiin, tallennettavissa CopyBack-välimuistiin, NonCachable (epätarkka) tai NonCachable Serialized (tarkka).
Jos WHDLoad ei käytä MMU:ta, se ohjaa vain CACR:ää.
Välimuistin oletusasetukset
WHDLoadin alueet, Slave sekä ExpMem on oletuksena merkitty tallennettaviksi CopyBack-välimuistiin. BaseMem-alue on merkitty tilaan NonCachable ja CACR:stä on otettu käyttöön Data ja Instruction Cache. Näin BaseMem-alueella sijaitseva ohjelma suoritetaan ilman välimuistia, mutta WHDLoad ja Slave käyttävät välimuistia suorituskyvyn parantamiseksi.
Ohjelmoijan välimuistin ohjaus
Välimuistien ohjaukseen on kaksi resload-funktiota: resload_SetCACR ja resload_SetCPU. Näistä resload_SetCACR on vanhempi rutiini, joka voidaan täysin korvata resload_SetCPU:lla (WHDLoad kohdistaa resload_SetCACR:n argumentit sisäisesti ja kutsuu resload_SetCPU:ta). Joka tapauksessa resload_SetCACR:n käyttöä suositellaan kaikille, jotka eivät tiedä kaikkea välimuisteista ja niiden käytöksestä Amiga-järjestelmässä. Funktiolla resload_SetCACR voidaan erikseen kytkeä käyttöön tai pois käsky- ja tietovälimuisti. resload_SetCACR vaikuttaa vain BaseMem-alueen välimuistiin kopioitavuuteen.
Käyttäjän välimuistin ohjaus
Jos ohjelmoija on työskennellyt selkeästi, käyttäjän ei tarvitse tehdä välimuisteille mitään, sillä Slave tekee kaikki tarvittavat asetukset.
Välimuistin asetusten muuttamiseen käsin saattaa kuitenkin olla kaksi syytä. Joko liian nopeasti toimivan asennusohjelman korjaaminen (esim. grafiikkavirheitä) tai asennetun ohjelman toiminnan nopeuttaminen.
Jos ohjelma kaatuu, se voidaan saada toimimaan NoCache-valinnalla. Tämä valinta poistaa kaikki välimuistit ja merkitsee kaiken muistin tilaksi NonCachable Serialized (tarkka). Jos koneessa on 32-bittistä Chip-muistia, se on edelleen nopeampi kuin alkuperäinen A500.
Asennetun ohjelman toimintaa voidaan nopeuttaa asettamalla valintoja, jotka
ottavat välimuistit käyttöön. Tämä ylikirjoittaa Slaven asetukset.
68020-suorittimella voidaan asettaa valinta Cache.
68030:llä voidaan käyttää valintaa DCache, joka
sisältää myös valinnan Cache. 68060:llä on lisävalintoja: BranchCache, StoreBuffer ja SuperScalar. Valinta ChipNoCache/S voi parantaa suorituskykyä 68040-
ja 68060-suorittimilla, ks. alla.
Chip-muistin
kopiointi välimuistiin
Kopioitavuuden välimuistiin voi asettaa, paitsi
suoritin itse (CACR) ja MMU, myös ulkoinen laitteisto. Suoritin viestittää
väylää pitkin, jos se yrittää kopioida toimenpiteen välimuistiin. Ulkoinen
laite voi ilmoittaa suorittimelle (kun osoite on asetettu osoiteväylään muistin
käytön aikana), että toimenpidettä ei saa kopioida välimuistiin.
Mekanismia, jolla laitteisto ilmoittaa suorittimelle, onko muisti
kopioitavissa välimuistiin ei (tietääkseni) käytetä kaikissa Amigoissa ja
suoritinkorteissa, joiden suoritin >= 68030 (koska niissä on
datavälimuisti). Vaikutusaluetta ovat koko Chip-muisti ja IO-avaruus
(Cia/Custom/RTC), joita ei saa kopioida datavälimuistiin. Tämä on tarpeen jotta
vältetään välimuistin epäjatkuvuudet mm. DMA-toiminnan vuoksi.
Suorittimien
suhtautuminen siihen, että laitteisto estä kopioinnin välimuistiin, vaihtelee.
68030:llä kutsun nopeus ei muutu, tietoja ei vain kopioida välimuistiin.
68040:llä lukutoiminnot tehdään täydellä nopeudella, mutta kirjoitukset
(CopyBack) peruutetaan ja aloitetaan uudestaan ilman välimuistia, jolloin
toiminnot ovat noin 5 kertaa hitaampia (riippuen laitteistosta ja
suoritusnopeudesta) kuin ilman välimuistia. 68060:llä luku- ja
kirjoitustoiminnot peruutetaan ja käynnistetään uudelleen. Luku on noin 3
kertaa hitaampaa ja kirjoitus noin 5 kertaa hitaampaa.
Mainitut asiat
liittyvät datan käsittelyyn. Käskyjen käsittely ei yleensä muutu ja se voidaan
kopioida välimuistiin myös Chip-muistissa. Jotkin (mahdollisesti rikkinäiset)
laitteistot eivät salli käskyjen kopiointia välimuistiin Chip-muistissa.
Tällaisilla laitteilla tulee käyttääChipNoCache/S-valintaa, jotta estetään
suoritusnopeuden merkittävä hidastuminen, sillä muuten käskyjen käsittely on
noin 2 kertaa hitaampaa.
Voit tarkistaa toiminnan suorittamalla Speed.Slave-tiedoston, joka on kehittäjäpaketin src/memory-speed -hakemistossa.
Write Allocation
Write Allocation ohjaa välimuistin käsittelyä 68030:llä, kun kirjoitustoiminnon aikana tapahtuu välimuistin ohitus. Write Allocation on otettava käyttöön, kun asennetusta ohjelmasta osa toimii User Modessa. Jos asennettu ohjelma toimii vain Supervisor Modessa voidaan Write Alloction kytkeä pois, jolloin saadaan hyvin pieni nopeusetu.
Branch Cache
Branch Cache on käytettävissä vain 68060:lla. Se on eräänlainen käskyvälimuisti haarakäskyille. Erona käskyvälimuistiin siihen ei kuitenkaan vaikuta MMU:n asetus! Tämä tarkoittaa, että vaikka muistin sivu on merkitty tilaan Non Cacheable, kopioidaan haarakäskyt välimuistiin jos Branch Cache on käytössä.
Lisätietoja on Motorola-suorittimien käyttöohjeissa. Jos sinulla on korjattavaa tai lisättävää tähän sivuun, ota minuun yhteyttä.