Обзор кэшов CPU

Для того чтобы увеличить скорость выполнения программ имеется возможность использования кэша для ускорения доступа к памяти.
Кэши используют всегда логичскую адресацию, включая функциональный код доступа. Все доступы в User Mode и Supervisor Mode будут создавать различное состояние кэша (смотрите документацию по CPU фирмы Motorola для дополнительной информации).

вот краткий общий обзор Cache на CPUs семейства 680XX:

Cache managment в WHDLoad

Первая важная вещь состоит в том чтобы понять что кэш на 68030..68060 управляется с помощью (CACR) и MMU (WHDLoad использует для управления MMU)!
С помощью регистра CACR кэш может бать включен или выключен. Используя MMU страница памяти (4 KByte с WHDLoad) может быть помечена каким образом она будет кэшироваться.
На 68030 страница памяти может быть кэшируемой или некэшируемой. На 68040/68060 может быть кэшируемой WriteThrough, кэшируемой CopyBack, некэшируемой (impercise) или некэшируемой Serialized (precise).

Если MMU не используется WHDLoad, то управление возможно с помощью регистра CACR.

Стандартные установки кэша

По умолчанию области WHDLoad, Slave и ExpMem помечены как кэшируемые CopyBack. Область BaseMem помечена как некэшируемая, и Data и Instruction Cache включены с помощью CACR. Так если программа расположенная в BaseMem запускается с отключенными кэшами, но WHDLoad и Slave используют кэш для быстродействия.

Програмное управление кэшом

Имеется две функции в WHDLoad для управления кэшами: resload_SetCACR and resload_SetCPU. Resload_SetCACR довольно старая функция и она может быть полностью заменена с помощью resload_SetCPU (WHDLoad содержит внутреннюю карту аргументов resload_SetCACR и вызовов resload_SetCPU). Во всяком случае рекомендуется использовать функцию resload_SetCACR всем кто не знает как работать с кэшами и их влияния на систему. Использование resload_SetCACR позволяет включать и отключать кэш иструкций и данных. Resload_SetCACR влияет только на кэширование BaseMem области.

Пользовательское управление кэшом

Если программист сделал "чистую работу" , то пользователь ничего не сможет сделать относительно установок кэша, поскольку все установки кэша будут выполняться из Slave-а.
Однако может имется две причины для изменения установок кэша вручную. Первая это проблемы установленной программы, из-за того что она запускается в быстром режиме (например порча графики) и вторая чтобы ускорить работу установленной программы.

Для избежания неправильной работы программы, опция NoCache может быть установлена. Эта опция выключает все кэши и помечает всю память как некэшируемая Serialized (precise). Если компьютер имеет 32-битную Chip-память то это будет работать быстрее чем A500.

Для того чтобы ускорить работу установленной программы, некоторые опции могут быть установлены чтобы активировать кэш. Эти опции могут быть перезаписаны внутренними установками Slave-а. На 68020 опция Cache может быть установлена. На 68030 опция DCache также может быть использована т.к. она включает в себя опцию управления кэшом. На 68060 имеется несколько опций управления кэшами: BranchCache, StoreBuffer and SuperScalar. Опция NoChipCache/S может увеличить скорость на 68040 и 68060, смотри ниже.

Cachebility of Chip-Memory

The cachebility может производиться не только через CPU (CACR) и MMU но и внешними аппаратными средствами. CPU выдает сигнал шине если возникают попытки кэшировать доступ. И внешние аппаратные средства могут сигнализировать CPU (после того как адрес был выставлен на шине адреса во время доступа к памяти) что доступ не должен кэшироваться.
Механизм работы таков, что аппаратные средства сообщают CPU что память некэшируемая или не используется на всех (AFAIK) Амигах и CPU-картах содержащих CPU's >= 68030 (потому что они имеют Кэш данных). Воздействие происходит на всю Chip-память и IO-пространство (Cia/Custom/RTC) которые не должны кэшироваться кэшом данных. Это необходимо для того, чтобы избежать противоречий, например из-зи работы DMA.
Реакция CPU на различных аппаратных средствах на кэшированный доступ - различно - на различных типах CPU. На 68030 - никакой реакции на доступ, данные просто не будут кэшироваться. На 68040 доступ на чтение будет выполняться с максимальной скоростью но доступ на запись (CopyBack) будет отменен и начат сначала без кэширования и как результат доступ будет в 5 раз (зависит от аппаратных средств и скорости CPU) медленнее по сравнению с некэшируемым доступом. На 68060 доступы на чтение и запись будут отменены и запущены снова. Доступ на чтение будет в 3 раза медленнее а доступ на запись около 5 раз.
Упомянутые выше проблемы связаны с доступом к данным. Доступ к иструкциям обычно не вызывает проблем и также кэшируется в Chip-памяти. Это некоторые аппаратные средства которые не допускают кэширования команд в Chip-памяти. На некоторых системах опция NoChipCache/S должна использоваться чтобы избежать замедления в работе установленной программы поскольку доступ к инструкциям будет в 2 раза медленнее.

Вы можете проверить скорость вашего компьютера путем выполнения Speed.Slave находящегося в src/memory-speed директории в девелоперском архиве.

Write Allocation

Write Allocation управляет обработкой кэша на 68030 когда происходит игнорирование кэша на операции записи. Write Allocation должно быть активировано, когда программа запущена в режиме User Mode. Если установленная программа запускается только в Supervisor режиме , то Write Alloction может бать отключен, которое может дать небольшое преимущество в скорости выполнения.

Branch Cache

Branch Cache доступен только на 68060. Это своего рода кэш команд для команд перехода. Но в отличие от кеша инструкций не изменяет установки MMU! Это позволяет то, что когда страница памяти помечается как не кэшируемая, а команды перехода будут кэшироваться если Branch Cache активен.


Читайте справочник по микропроцессорам Motorola для дополнительной информации. Если у вас есть поправки или добавления которые надо сделать на этой странице, пожалуйста напишите мне .