Ovládání CPU Cache

### Přehled CPU Cache

(autor překladu se omlouvá za hrůznost některých technických slov v českém znění) Aby se zlepšil výkon, některá CPU z řádu 68k jsou schopna cachovat přístup k paměti.
Cache se vždycky používají přes logické adresy, včetně funkčního kódu pro přístup. To znamená, že přístupy v uživatelském módu a supervizoru vytvoří odlišné vstupy do Cache (pro více informací vyhledejte dokumentace Motoroly).

Následuje přehled CPU 68k:

- 68000 žádná
- 68010
  - Instruction Prefetch
    dvouwordový prefetch, jednowordový dekódovací register
  - Loop Mode
    vzniká, pokud jednowordová instrukce následuje smyčkou DBcc, žádná další instrukce není prefetchována dokud smyčka neskončí.
- 68020
  - Instruction Prefetch
    jeden longword
  - Instruction Cache
    16 lines á 16 byte = 256 bytes
    může být aktivována nebo vypnuta přes CACR
- 68030
  - Instruction Prefetch
    jeden longword
  - Instruction Cache
    16 lines á 16 byte = 256 byte
    může být aktivována nebo vypnuta přes CACR
  - Data Cache
    16 lines á 16 byte = 256 byte
    může být aktivována nebo vypnuta přes CACR
    vždy WriteThrough
    volitelný Write Allocation mod
- 68040
  - Instruction Prefetch
    jeden long word
  - Instruction Cache
    256 lines á 16 byte = 4096 byte
    může být aktivována přes CACR
  - Data Cache
    256 lines á 16 byte = 4096 byte
    může být aktivována přes CACR
    volitelné módy CopyBack/WriteThrough via MMU
- 68060
  - Instruction Prefetch
    jeden long word
  - Instruction Cache
    512 lines á 16 byte = 8192 byte
    může být aktivována, vypnuta nebo redukována na půl přes CACR
  - Branch Cache
    může být aktivována přes CACR
    neovlivňována MMU setupem!
  - Superscalar Dispatch
    může být aktivována přes CACR
  - Data Cache
    512 lines á 16 byte = 8192 byte
    může být aktivována, vypnuta nebo redukována na půl přes CACR
    volitelné módy CopyBack/WriteThrough přes MMU
  - Push Buffer
    může být vypnuta přes PCR
  - Store Buffer
    může být aktivována přes CACR
    Stranky nesmi byt NonCachable Serialized (precise)

#### Cache management ve WHDLoad

První důležitá věc je pochopit, že cache na 68030..68060 jsou ovládány přes Cache Control Register (CACR) a the MMU (berte v úvahu, že WHDLoad používá a ovládá MMU)!
V CACR budou cache globálně zapnuty nebo vypnuty. Používáním stránkování MMU (4 KBytes s WHDLoadem) bude určeno, jak mají pracovat.
Na 68030 může být paměťová stránka Cacheable nebo NotCacheable. Na 68040/68060 může být cachable WriteThrough, cachable CopyBack, NonCachable (impercise) nebo NonCachable Serialized (precise).

#### Standartní setup cache

Ve WHDLoad jsou standartně slave a ExpMem označeny jako cachovatelná CopyBack. BaseMem oblast je označena jako necachovatelná a datová a instrukční cache jsou zapnuty v CACR. Takže program v BaseMem oblasti běží bez cache, ale WHDLoad a slave používají cache pro nejlepší výkon.
Jestliže WHDLoad nepoužívá MMU, ovládá Cache jenom přes CACR.

#### Programátorská kontrola cache

Jsou dvě resload funkce na ovládání cache: resload_SetCACR a resload_SetCPU. Resload_SetCACR je stará rutina a resload_SetCPU ji může plně nahradit. (WHDLoad interně mapuje parametry resload_SetCACR a volá resload_SetCPU). Kazdopádně, použití resload_SetCACR se doporučuje pro všechny, kdo nic neví o cache a jejich chování v Amiga systému. Používáním resload_SetCACR mohou být vypnuty nebo zapnuty instrukční a datové cache. resload_SetCACR ovlivňuje pouze cachovatelnost BaseMem paměti.

#### Ovládaní cache uživatelem

Jestliže programátor odvedl dobrou práci, uživatel se nemusí o cache nijak starat, protože všechno zařídí setup slavu.
Ale mohou se vyskytnout dva důvody pro změnu setupu cache. První je zpojízdnit instalačku, která má nějaké problémy, protože běží příliš rychle (např. grafické chyby) a druhý je urychlit nainstalovaný program.

K lepší funkci problematického programu je tu volba NoCache. Tato volba vypne všechny cache a označí pamět jako necachovatelnou Serialized. Pokud má ale stroj 32-bitovou Chip RAM, bude pořád ještě rychlejší než původně na A500.

K urychlení programu můžete nastavit volby pro zapínání cache. Ty mají větší prioritu nad setupem slave. Na 68020 může být použita volba Cache. Pro 68030 je volba DCache, kterou ale volba Cache zahrnuje také. Pro 68060 existuje víc voleb: BranchCache, StoreBuffer a SuperScalar. Volba ChipNoCache/S může vylepšit výkon na 68040 a 68060, viz níže.

#### Write Allocation

Write Allocation kontroluje ovladaní cache na 68030, když se přihodí selhaní cache při zápisu. Write Allocation musí být zapnuta, když části nainstalovaného programu běží v uživatelském módu. Pokud nainstalovaný program běží jenou v supervizor módu, může být Write Allocation vypnuta, což je minimální výhoda pro výkon.

#### Branch Cache

Branch Cache je pouze na 68060. Je to druh instrukční cache pro branch instrukce. Ale narozdíl od instrukční cache není ovlivňovatelná MMu setupem! To znamená, že i když je stránka paměti označena jako necachovatelná, branch instrukce budou cachovány, pokud je zapnuta Branch Cache.

Přečtěte si Motorola Microprocessors User Manualy pro další informace. Jestli protestujete nebo chcete něco dodat, pište mi na e-mail.