[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

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 on yleiskatsaus 68k-suoritinten välimuistikyvyistä:

Välimuistin hallinta WHDLoadissa

Ensimmäinen tärkeä asia on ymmärtää se, että 68030–68060:ssä välimuisteja ohjaavat Cache Control Register (CACR) ja MMU!
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, Slave ja ExpMem käyttävät välimuistia suorituskyvyn parantamiseksi. Jos MMU ei ole WHDLoadin käytössä, tämä asetus kytkee molemmat välimuistit pois, koska ilman MMU:ta eri muistialueille ei voida tehdä erilaisia asetuksia; jos jokin alue on merkitty tilaan NonCacheable, on kaikki välimuistit kytkettävä pois.

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 rresload_SetCACR:n käyttöä suositellaan kaikille, jotka eivät tiedä kaikkea välimuisteista ja niiden käytöksestä Amiga-järjestelmässä. Käyttämällä resload_SetCACR:ää voidaan instruction- ja data-välimuistit kytkeä päälle tai pois erikseen. Funktio resload_SetCACR vaikuttaa vain BaseMem-alueen välimuistiin tallennettavuuteen.

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. synnyttää 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 DMA-toiminnan tai laitteiston rekisterien muuttumisen vuoksi.
Suorittimen reagointi siihen, että laitteisto estää kopioinnin välimuistiin, vaihtelee eri suorittimien välillä. 68030:llä kutsun nopeus ei muutu; tietoja ei vain tallenneta 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.

Burst-tila

68030:n Burst-tila käskee suorittimen lukea aina täyden välimuistirivin (16 tavua) välimuistin ohituksen jälkeen, eikä vain pyydettyä long wordia. Laitteiston pitää tukea Burst-tilaa; jos näin ei ole, Burst-toimintoa ei suoriteta, eikä tästä tule aikaseuraamusta. Burst-tila voidaan ottaa erikseen käyttöön instruction- ja data-välimuisteille. Koska Burst-kutsu kestää kauemman kuin yksittäinen kutsu, Burst-tilasta on hyötyä vain, jos useimmat välimuistirivin kirjaukset käytetään ennen kuin välimuistirivi tyhjenee. Burst-tila parantaa yleensä instruction-välimuistin suorituskykyä. Data-välimuistin suorituskyky paranee vain tilanteissa, joissa tehdään peräkkäisiä muistin lukuja. Versiosta 18.10 alkaen WHDLoad ottaa instruction-välimuistin Burst-tilan käyttöön yhdessä välimuistin kanssa. WHDLoad ei ota data-välimuistin Burst-toimintoa käyttöön.

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ä.
[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]