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

CPU Cache Oversigt

For at forbedre ydelsen, er nogle CPU'er i 68k-familien i stand til at cache hukommelsestilgange.
Caches bliver altid refereret til vha. logiske adresser, inklusiv tilgangens funktionskode. Det betyder, at tilgange i Brugermodus og Supervisormodus vil oprette forskellige Cache-indgange (konsultér venligst Motorola-dokumentationerne for mere info).

Følgende er et overblik over mulighederne for caching på 68k-CPU'erne:

Cache-styring i WHDLoad

Den vigtigste ting at forstå er, at cache'erne på 68030..68060 bliver kontrolleret af Cache Kontrol-registrene (CACR) og MMU'en!
I CACR'en vil cache'erne blive aktiveret eller deaktiveret globalt. Vha. MMU vil enkeltsider (4 KiB med WHDLoad) blive markeret mht. hvordan de kan caches.
På 68030'eren kan en hukommelsesside være cachebar eller Ikke-cachebar. På en 68040/68060 kan den være cachebar WriteThrough, cachebar CopyBack, Ikke-cachebar (Upræcis) eller Ikke-cachebar Serialiseret (Præcis).
Hvis MMU'en ikke bliver brugt af WHDLoad, kontrollere den kun CACR'en.

Standard Cache Setup

Som standard er områderne i WHDLoad, Slaven og ExpMem markeret som cachebar CopyBack. BaseMem-området er markeret som Ikke-Cachebar og Data- og Instruktionscache'en er aktiveret i CACR'en. Så programmet placeret i BaseMem-området kører uden caches, men WHDLoad, Slaven og ExpMem bruger cache'erne for bedst ydelse. Hvis MMU'en ikke er i brug af WHDLoad, vil denne opsætning resultere i, at begge caches bliver deaktiverede, fordi uden MMU'en kan en anderledes opsætning for forskellige hukommelsesregioner ikke konfigureres, og hvis nogen region er markeret som Ikke-cachebar, er det nødvendigt at deaktivere alle caches.

Programmørs Cache-control

Der er to resload-funktioner til at kontrollere cache'erne: resload_SetCACR og resload_SetCPU. The resload_SetCACR is the historical older routine and can be fully replaced by resload_SetCPU (WHDLoad internally maps the arguments of resload_SetCACR and calls resload_SetCPU). Anyway the usage of resload_SetCACR is recommended for all people which do not know all about Caches and their behavior in a Amiga system. Using resload_SetCACR the instruction and data cache can seperately enabled or disabled. resload_SetCACR does only affect the cacheability of the BaseMem area.

Brugercache Kontrol

Hvis programmøren har udført et rent job, er der ikke noget, brugeren skal gøre mht. cache'erne, fordi al påkrævet opsætning allerede er udført af Slaven.
Ikke desto mindre kan der være to grunde til at ændre cache-opsætningen manuelt. For det første for at få en install til at virke, hvilket ellers har problemer, fordi den kører for hurtigt (f.eks. ved at skabe grafikfejl) og for det andet få et installeret program til at køre hurtigere.

For at få et crashende program til at virke, kan optionen NoCache benyttes. Denne option deaktiverer alle caches og markerer al hukommelse som værende Ikke-Cachebar Serialiseret (Præcis). Hvis maskinen har 32-bit Chip-hukommelse vil den stadig være hurtigere end en original A500.

For at gøre et installeret program hurtigere, kan nogle optioner blive sat for at aktivere Caches. Dette vil overskrive opsætningen af Slaven. På 68020'eren kan optionen Cache indstilles. På 68030 kan optionen DCache også benyttes, hvilket inkluderer optionen Cache. På 68060'eren er der nogle flere optioner: BranchCache, StoreBuffer og SuperScalar. Optionen ChipNoCache/S kan forbedre ydelsen på 68040 og 68060, se nedenfor.

Cachebarhed af Chip-hukommelse

Cachebarheden kan ikke blot sættes af CPU'en selv (CACR) og MMU-opsætningen, men også af ekstern hardware. CPU'en signalerer på bussen, hvis den prøver at cache en tilgang. Ekstern hardware kan signalere til CPU'en (efter en adresse er blevet sat på adressebussen under en hukommelsesadgang), at en tilgang ikke må caches.
Den mekanisme, at hardware signalerer til CPU'en, at hukommelse ikke er cachebar eller i det hele taget ikke er i brug, benyttes (så vidt jeg ved) af Amiga'er og CPU-Boards indeholdende CPUs >= 68030, fordi disse har en data-cache. Påvirket af dette er hele Chip-hukommelsen og I/O-rummet (CIA/bruger/RTC), hvilket ikke må caches af data-cachen. Dette er nødvendigt for at undgå cache-inkonsistens, fordi DMA-aktivitet eller hardware-registre er flygtige.
CPU'ens reaktion på en hardware-afvisning af en cachebar tilgang varierer på de forskellige CPU'er. På 68030'eren er der ingen påvirkning af ydelsen på tilgangen; de pågældende data vil ganske enkelt bare ikke blive cachet. På 68040'eren vil læsetilgange blive udført med fuld hastighed, men skrivetilgange vil blive annulleree og genstartet uden cacebarhed, hvilket resulterer i omkring 5 gange (afhænger af hardware og CPU-hastighed) langsomere tilgang, sammenlignet med en ikke-cachebar tilgang. På 68060'eren vil læse- og skrivetilgange blive annulleret og genstartet. Læsetilgange vil være omkring 3 gange langsommere og skrivetilgange omkring 5 gange.
De nævnte problemer er relateret til datatilgange. Instruktionstilgange er som regel ikke påvirket og endvidere også cachebare inde i Chip-hukommelsen. Der er nogle (måske fejlbehæftede) typer hardware, der ikke tillader instruktioner at blive cachet i Chip-hukommelse. På slige hardware bør optionen ChipNoCache/S bruges for at undgå en kraftig nedgang i eksekveringshastigheden, fordi instruktionstilgange andre steder vil være omkring to gange langsommere.
Denne adfærd kan checkes ved at eksekvere Speed.Slave indeholdt i src/memory-speed-biblioteket i udvikler-arkivet.

Burst-Modus

Burst-modus'et på 68030'eren fortæller CPU'en, at den altid skal læse en fuld cache-linje (16 bytes) hvis en cache-forbier finder sted i stedet for kun det lange ord, der blev forespurgt om. Burst-moduset skal være understøttet af hardwaren; hvis det ikke er dét, vil ingen Burst finde sted uden en tidsstraf. Burst-moduset kan aktiveres særskilt for instruktionen og data-cachen. Fordi en Burst-tilgang tager længere tid end en enkelt tilgang, giver Burst-moduset kun en ydelsesfordel, hvis størstedelen af indgangen i cache-linjerne også bliver brugt, før cache-linjen bliver tømt. For instruktions-cachen forbedrer Burst-moduset som regel ydelsen. For data-cachen ofte kun i scenarier, hvor efterfølgende hukommelseslæsninger finder sted. WHDLoad aktiverer instruktions-Burstet sammen med instruktions-cachen fra og med version 18.0. Data-Burstet vil ikke blive aktiveret af WHDLoad.

Skriveallokering

Skriveallokeringen kontrollerer cache-håndteringen på 68030'eren, når en cache-forbier optræder ved en skriveoperation. Skriveallokering skal være aktiveret når dele af det installerede program kører i brugermodus. Hvis det installerede program kun kører i Supervisor-modus kan Skriveallokering deaktiveres, hvilket kan give en begrænset ydelsesfordel.

Forgreningscache

Forgreningscache'en er kun tilgængelig i 68060'eren. Det er en form for instruktionscache for forgreningsinstruktioner. Men i modsætning til instruktionscachen er den ikke påvirket af MMU-opsætningen! Dette betyder, at selv når den pågældende hukommelsesside er markeret som Ikke-cachebar, vil forgreningsinstruktioner blive cachet, hvis forgreningscachen er aktiveret.


Læs Motorola Microprocessor-Brugermanualerne for yderligere information. Hvis du har rettelser eller tilføjelser til denne side, kontakt mig da venligst.
[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]