Обзор кэшов CPU
Для того чтобы увеличить скорость выполнения программ имеется возможность
использования кэша для ускорения доступа к памяти.
Кэши используют всегда логичскую адресацию, включая функциональный код
доступа. Все доступы в User Mode и Supervisor
Mode будут создавать различное состояние кэша (смотрите документацию по CPU фирмы Motorola
для дополнительной информации).
вот краткий общий обзор Cache на CPUs семейства 680XX:
- 68000 nothing
- 68010
- Prefetch инструкций
two words prefetch, one word decoding register
- Loop Mode
is entered when a one word instruction is followed by a DBcc, no more instruction
fetches occur until loop end
- 68020
- Prefetch инструкций
длинное слово
- Кэш команд
16 линий по 16 байт = 256 байт
может быть активирован или остановлен через регистр CARC
- 68030
- Prefetch инструкций
длинное слово
- Кэш команд
16 линий по 16 байт = 256 байт
может быть активирован или остановлен через регистр CARC
- Кэш данных
16 линий по 16 байт = 256 байт
может быть активирован или остановлен через регистр CARC
всегда WriteThrough
выбор режима Write Allocation
- 68040
- Prefetch инструкций
длинное слово
- Кэш команд
256 линий по 16 байт = 4096 байт
может быть активирован через регистр CARC
- Кэш данных
256 линий по 16 байт = 4096 байт
может быть активирован через регистр CARC
возможность выбора режима CopyBack/WriteThrough через MMU
- 68060
- Prefetch инструкций
длинное слово
- Кэш команд
512 линий по 16 байт = 8192 байт
может быть активирован, остановлен и изменен размер в 2 раза меньше через регистр CARC
- Branch Cache
может быть активирован через регистр CARC
не изменяется установками MMU!
- Superscalar Dispatch
может быть активирован через регистр CARC
- Кэш данных
512 линий по 16 байт = 8192 байт
может быть активирован, остановлен и изменен размер в 2 раза меньше через регистр CARC
возможность выбора режима CopyBack/WriteThrough через MMU
- Push Buffer
может быть отключен через регистр PCR
- Store Buffer
может быть активирован через регистр CARC
Страница не должна быть некэшируемой Serialized (precise)
Первая важная вещь состоит в том чтобы понять что кэш на 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 для дополнительной информации.
Если у вас есть поправки или добавления которые надо сделать на этой странице,
пожалуйста напишите мне .