CPU Cache Håndtering

### CPU Cache Overblik

For at øge ydelsen er nogle CPU'er i 68k familien i stand til at cache hukommelses adgangen.
Cachen bliver altid refereret ved at bruge logiske adresser, inklusiv adgangens funktions kode. Dette betyder at adgang i bruger mode og supervisor mode vil oprette forskellige Cache opslag (konsulter venligst Motorola dokumentationen for mere info).

Her følger et overblik over mulighederne i caching på 68k CPU'erne:

- 68000 Ingenting
- 68010
  - Instruktions Prehentning
    to ords prehentning, ét ords dekodnings register
  - Loop Mode
    entreres når et en ords instruktion følges a et DBcc, Der hentes ikke flere instruktioner indtil loppet slutter
- 68020
  - Instruktions Prehentning
    et langt ord
  - Instruktions Cache
    16 linier á 16 byte = 256 byte
    kan tændes eller fryses via CACR'en
- 68030
  - Instruktion Prehentning
    et langt ord
  - Instruktions Cache
    16 linier á 16 byte = 256 byte
    kan tændes eller fryses via CACR'en
  - Data Cache
    16 linier á 16 byte = 256 byte
    kan tændes eller fryses via CACR'en
    altid WriteThrough
    valgbar skrive allokerings metode
- 68040
  - Instruktions Prehentning
    et langt ord
  - Instruktions Cache
    256 linier á 16 byte = 4096 byte
    kan tændes eller fryses via CACR'en
  - Data Cache
    256 linier á 16 byte = 4096 byte
    kan tændes eller fryses via CACR'en
    valgbare metoder CopyBack/WriteThrough via MMU
- 68060
  - Instruktions Prehentning
    et langt ord
  - Instruktions Cache
    512 linier á 16 byte = 8192 byte
    Kan startes, fryses eller reduceres til det halve via CACR'en
  - Branch Cache
    kan tændes eller fryses via CACR'en
    bliver ikke berørt af MMU setup!
  - Superscalar Dispatch
    Kan slås til via CARC'en
  - Data Cache
    512 linier á 16 byte = 8192 byte
    kan tændes, fryses eller reduceres til halv størrelse via CACR'en
    valgbare metoder CopyBack/WriteThrough via MMU
  - Push Buffer
    kan slås fra via PCR
  - Store Buffer
    kan slås til via CACR
    Sider må ikke være NonCachable Serialiseret (præcis)

#### Cache håndtering i WHDLoad

Det vigtigste er at forstå at cachen på 68030..68060 kontrolleres af Cache Control Registeret (CACR) og MMU (forudsat at WHDLoad bruger og kontrollerer MMU)!
I CARC bliver cacherne global slået til eller fra. Ved at bruge MMU single Pages (4 KByte with WHDLoad) vil de blive markeret hvordan de kan caches.
På 68030'eren kan en memory page være Cacheable eller NotCacheable. På en 68040/68060 kan den være cachable WriteThrough, cachable CopyBack, NonCachable (upræcis) eller NonCachable Serialized (præcis).

Hvis MMU ikke bruges af WHDLoad, kontrollerer den kun CACR.

#### Default Cache Setup

Ved standard bliver WHDLoad, Slaven og ExpMem områderne markeret som cacheable CopyBack. BaseMem området er markeret som NonCachable, og Data og Instruction Cache er slået til in CACR. Så programmet i BaseMem områderne kører uden Cache men WHDLoad og Slaven bruger Cachen for optimal ydeevne.

#### Programmørernes Cache Control

Der er to resload funktioner til at kontrollere cacherne.: resload_SetCACR og resload_SetCPU. Resload_SetCACR er historiks set den ældste rutine og kan fuld ud erstattes af resload_SetCPU (WHDLoad kæder internt argumenterne fra resload_SetCACR og kalder resload_SetCPU). Alligevel anbefales det at bruge resload_SetCACR hvis man ikke ved alt om cache'r og deres opførsel i et Amiga system. Ved brug af resload_SetCACR kan instruktions og data cachen blive slået til og fra uafhængigt af hinanden. resload_SetCACR berører kun cache muligheden af BaseMem området.

#### Bruger Cache Kontrol

Hvis programmøren har gjort et godt arbejde skal brugeren ikke røre cachen da al nødvendig opsætning allerede er gjort af Slaven.
Ikke desto mindre er der to grunde for manuelt at ændre Cache opsætningen. For det første for at ændre en installation der har problemer fordi den køre for hurtigt (f.eks. genererer grafik fejl) og for det andet for at få et installeret program til at køre hurtigere.

For at få et program der går ned til at virke kan valgmuligheden NoCache bruges. Denne valgmulighed slår alle cache fra og markerer all hukommelse som NonCachable Serialized (præcis). Hvis maskinen har en 32-bit Chip-Memory vil den satdig være hurtigere end en original A500.

For at få et installeret program til at køre hurtigere skal der ændres i nogle opsætningsmuligheder som slar cache til. Dette vil overskrive opsætningen fra Slave'n. På 68020 kan valgmuligheden Cache blive slået til. På 68030 kan valgmuligheden DCache også blive slået til. Denne inkluderer også option Cache. På 68060 er der lidt flere muligheder: BranchCache, StoreBuffer og SuperScalar. Valgmuligheden ChipNoCache/S kan øge ydelsen på 68040 og 68060, se herunder.

#### Chip-Memory mulighed for caching

cache muligheden kan ikke kun sættes af CPU'en selv (CARC) og MMU opsætningen men også a ekstern hardware. CPU'en signalerer på bussen hvis den prøver at cache en tilgang. Og en ekstern hardware kan signalere CPU'en (efter en addresse er tilføjet addresse bussen under en hukkomelses tilgang) at en tilgang ikke må blive cachet.
Mekanismen som hardware signalerer CPU'en at hukommelse ikke er cachebar eller ikke bliver brugt på alle (AFAIK) Amiga'er og CPU-kort indeholdende CPU'erne >= 68030 (fordi de har data cache). Berørt er hele Chip-hukkommelses og IO-Space (Cia/Custom/RTC) som ikke må blive cached af data cachen. Dette er nødvendigt for at forhindre cache inkonsistens, bl.a. p.g.a. DMA activity.
CPU'ens reaktion når et hardware afviser en cache adgang varierer på de forskellige CPU'er. På 68030 berører det ikke tilgangs ydelsen, data vil simpelthen ikke blive cachet. På 68040 vil læse adgang blive udført i fuld hastighed men skrive adgang (CopyBack) vil blive afbrudt og genstartet uden cachmuligheder som resulterer i ca 5 timers (afhængig af hardware og CPU hastighed). Langsommere adgang sammenlignet med en ikke cachemulig adgang. På 68060 vil læse og skrive adgang blive afbrudt og genstartet. Læse adgang vil være omkring 3 gange langsommere og skrive adgang 5 gange.
De nævnte emner er relateret til data adgang. Instruktions adgange er normalt ikke berørt og også cachemulige inde i Chip-Memory. Der er noget (måske ødelagte) hardware som ikke tillader at instruktioner bliver cachet i Chip-Memory. På sådannet hardware bør muligheden ChipNoCache/S blive brugt for at undgå hele systemet bliver langsomt i eksekverings hastighed da instruktions adgang vil være omkring 2 gange så langsom.

Du kan teste denne opførsel ved at køre Speed.Slave som er indeholdt i `src/memory-speed` folderen i udvikler arkivet.

#### Write Allocation

Skrive allokerings kontrollerer cachen på 68030 når en cache fejler sker der en skrive operation. Skrive allokering skal være slået til når dele af det installerede program kører i User Mode. Hvis det installerede program kun kører i Supervisor Mode kan Write Alloction blive slået fra, som måske giver en minimalt ydelses fordel.

#### Branch Cache

Branch Cache er kun tilgængelig på 68060. Det er en form for instruktions cache for branch instruktioner. Men i modsætning til instruktions cache bliver den ikke berørt af MMU opsætningen! Dette gælder også selvom den tilhørende memory Page er markeret som Non Cacheable, branch instructions vil blive caced hvis Branch Cache er slået til.

Læs Motorola Microprocessors Bruger Manualen for videre information. Hvis du har rettelser eller tilføjelser til denne side contact mig.