Suorittimen välimuistin käsittely

### 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)

#### Välimuistin hallinta WHDLoadissa

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ä.