[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]
Przegląd buforów procesorów
Uwaga od tłumacza! "Bufor" jest tutaj odpowiednikiem angielskiego słowa
"Cache"!
Aby przyspieszyć prędkość działania, niektóre procesory z rodziny 68k są zdolne do
buforowania dostępu do pamięci.
Odwołania do buforów wykonywane są zawsze przy użyciu adresów logicznych, włączając w to
kod funkcji dostępu. Oznacza to, iż dostęp w Trybie Użytkownika i w Trybie
Nadzorcy tworzy inne wpisy w buforach (więcej informacji na ten temat
znajdziesz w dokumentacjach firmy Motorola).
Poniżej znajduje się przegląd możliwości buforowania procesorów z rodziny 68k:
- 68000
brak
- 68010
- Instruction Prefetch
dwa słowa prefetch, jedno słowo dekodujące rejestr
- Tryb Pętli
uruchamiany jest, gdy za instrukcją składającą się z jednego słowa występuje instrkcja
DBcc zapętlająca do poprzedniej instrukcji, nie są pobierame kolejne instrukcje aż do zakończenia pętli
- 68020
- Instruction Prefetch
jedno długie słowo
- Instruction Cache
16 linii po 16 bajtów = 256 bajtów
może zostać włączony lub zamrożony przez CACR
- 68030
- Instruction Prefetch
jedno długie słowo
- Instruction Cache
16 linii po 16 bajtów = 256 bajtów
może zostać włączony lub zamrożony przez CACR
- Data Cache
16 linii po 16 bajtów = 256 bajtów
może zostać włączony lub zamrożony przez CACR
zawsze WriteThrough
wybierany tryb Write Allocation aby wymusić nieważność wpisów innych użytkowników/nadzorców
Tryb Burst wymusza orczytywanie całych linii bufora za jednym razem o ile tylko sprzęt to obsługuje
- 68040
- Instruction Prefetch
jedno długie słowo
- Instruction Cache
256 linii po 16 bajtów = 4096 bajtów
może zostać włączony przez CACR
- Data Cache
256 linii po 16 bajtów = 4096 bajtów
może zostać włączony przez CACR
wybierane tryby CopyBack/WriteThrough przez MMU
- 68060
- Instruction Prefetch
jedno długie słowo
- Instruction Cache
512 linii po 16 bajtów = 8192 bajtów
może zostać włączony, zamrożony i zmniejszony o połowę przez CACR
- Branch Cache
może zostać włączony przez CACR
nie wpływają na niego ustawienia MMU!
- Superscalar Dispatch
może zostać włączony przez CACR
- Data Cache
512 linii po 16 bajtów = 8192 bajtów
może zostać włączony, zamrożony i zmniejszony o połowę przez CACR
wybierane tryby CopyBack/WriteThrough przez MMU
- Push Buffer
może zostać wyłączony przez PCR
- Store Buffer
może zostać włączony przez CACR
Strony pamięci nie mogą być szeregowane "bezbuforowo" (dokładnie)
Najważniejszą rzeczą jest zrozumienie, że bufory procesorów 68030-68060
są kontrolowane przez Rejestr Kontroli Buforów (Cache Control Register (CACR))
i MMU
W CACR bufory zostają globalnie włączone lub wyłączone. Używając
pojedynczych stron MMU (4 kilobajty z WHDLoad) zostanie zaznaczone jak mają być
buforowane.
Na 68030 strona pamięci może być buforowalna lub nie. Na
68040/68060 może być buforowalna w trybach WriteThrough, buforowalnym
CopyBack, niebuforowalnym
(niedokładnym) lub niebuforowalnym szeregowym (dokładnym).
Jeżeli MMU nie jest wykorzystywane przez WHDLoad, bufory kontrolowane są tylko przez CACR.
Domyślne ustawienia buforów
Domyślnie obszary WHDLoad, .slave i ExpMem oznaczone są jako buforowalne
poprzez CopyBack. Obszar BaseMem oznaczony jest jako niebuforowalny, a
Data i Instruction Cache są włączone w CACR. Program umieszczony w obszarze
BaseMem uruchamia się bez buforów, lecz WHDLoad i pliki .slave wykorzystują
bufory w celu zwiększenia efektywności. Jeśli MMU nie jest używane przez
WHDLoad ustawienie to skutkuje wyłączeniem obu typów buforowania, ponieważ
bez układu MMU różne ustawienia dla różnych obszarów pamięci nie jest możliwe,
dlatego jeśli jakiś obszar pamięci zostanie ustwaiony jako "NonCacheable"
wszystkie bufory muszą zostać wyłączone.
Kontrola buforów z poziomu Programisty
Występują dwie funkcje resload kontrolujące bufory: resload_SetCACR i resload_SetCPU. Resload_SetCACR to starsza
procedura i może być w pełni zastąpiona przez resload_SetCPU (WHDLoad wewnętrznie
mapuje argumenty resload_SetCACR i wywołuje resload_SetCPU).
Zalecane jest korzystanie z resload_SetCACR dla wszystkich tych, którzy nie
wiedzą wszystkiego o buforach i ich zachowaniu się w systemie Amigi.
Wykorzystując resload_SetCACR Instruction i Data Cache mogą zostać osobno
włączone lub włączone. resload_SetCACR wpływa tylko na buforowalność obszaru BaseMem.
Kontrola buforów z poziomu Użytkownika
Jeżeli programista wykonał wszystko prawidłowo, użytkownik nie musi nic
zmieniać odnośnie ustawień buforów, gdyż zostało to dokonane przez plik .slave.
Niemniej jednak, mogą wystąpić dwie sytuacje, gdy konieczna jest ręczna zmiana ustawień buforów.
Pierwsza z nich, aby spowolnić program (na przykład, może się to objawiać
błędami w grafice) oraz druga, aby przyspieszyć program.
Aby tego dokonać, można wykorzystać opcję NoCache. Wyłącza ona wszystkie bufory
i zaznacza całą pamięć jako niebuforowalną szeregową (dokładną). Jeżeli
komputer posiada 32-bitową pamięć Chip, nadal wszystko będzie szybsze niż
na oryginalnej A500.
Aby przyspieszyć zainstalowany program, niektóre opcję mogą zostać uaktywnione,
aby włączyć bufory. Powodują one nadpisanie ustawień dokonanych przez plik .slave.
Na 68020 opcja
Cache może zostać ustawiona. Na 68030 opcja DCache może zostać użyta (zawiera ona już w sobie opcję
Cache). Na 68060 istnieje więcej opcji BranchCache,
StoreBuffer i
SuperScalar. Opcja ChipNoCache/S może wpłynąć na poprawę efektywności na
68040 i 68060.
Buforowalność pamięci Chip
Buforowalność może zostać ustawiona nie tylko przez sam procesor (CACR) i
ustawienia MMU, ale również przez zewnętrzne urządzenia. Na szynie adresowej
procesor sygnalizuje próbę zbuforowania obszaru. Urządzenia zewnętrzne
mogą sygnalizować procesorowi (jeżeli adres został nałożony na adres szyny
podczas próby dostępu do pamięci), że dany obszar nie może zostać zbuforowany.
Mechanizm, podczas którego urządzenie zewnętrzne sygnalizuje procesorowi,
że pamięć nie może zostać zbuforowana, wykorzystywany jest (ZTCW) na wszystkich
Amigach i we wszystkich kartach procesorowych od 68030 wzwyż (z racji, że
posiadają Data Cache). Wpływ ma to na całą pamięć Chip oraz przestrzeń IO
(Cia/Custom/RTC), która nie może zostać zbuforowana przez Data Cache.
Istotne jest, aby unikać niezgodności buforów, z powodu, dla przykładu, aktywności
DMA.
Reakcja procesora na sprzęt, który odmawia zbuforowania obszaru jest różna
na różnych procesorach. Na 68030 nie wpływa na efektywność pracy - dane nie
zostaną zbuforowane. Na 68040 odczyt obszaru zostanie wykonany na pełnej prędkości, lecz
zapis obszaru (CopyBack) zostanie usunięty i uruchomiony ponownie bez
buforowalności, co spowoduje około pięciokrotne (w zależności od procesora i innych
urządzeń) spowolnienie dostępu (w porównaniu do niezbuforowanego dostępu).
Na 68060 odczyt i zapis zostanie usunięty i uruchomiony ponownie. Odczyt
będzie około 3 razy wolniejszy, a zapis do około 5 razy.
Wspomniane rzeczy odnoszą się do dostępu do danych. Dostęp do instrukcji
zazwyczaj pozostaje bez zmian i jest buforowalny wewnątrz pamięci Chip.
Istnieją pewne urządzenia (prawdopodobnie uszkodzone), które nie zezwalają
instrukcjom na bycie buforowanymi w pamięci Chip. Na takich urządzeniach
opcja ChipNoCache/S powinna zostać użyta, aby
uniknąć największych spowolnień.
Można sprawdzić to zachowanie poprzez uruchomienie Speed.Slave
znajdującego się katalogu src/memory-speed w archiwum dla developerów.
Burst Mode
Tryb Burst w 68030 nakazjue procesorowi zawsze odczytywać całą linię
bufora (16 znaków), jeśli występują braki w buforze zamiast tylko jednego żądanego słowa.
Tryb Burst musi być obsługiwany przez sprzęt, jeśli nie jest, nie jest możliwe odczytanie
zawartości bufora bez poświęcenia na to dodatkowego czasu. Tryb Burst może być włączony
oddzielnie zarówno dla bufora instrukcji jak i danych. Ponieważ dostęp w trybie Burst
zabiera więcej czasu niż pojednyczy dostęp, tryb Burst daje tylko przyspieszenie działania
jeśli większość wpisów z linii bufora zostanie także wykorzystana przezd opróżnieniem
linii bufora. Dla bufora instrukcji tryb Burst zazwyczaj poprawia wydajność. Dla bufora danych
często tylko w scenariuszach, gdzie występują następujące po sobie odczyty pamięci.
WHDLoad włącza tryb Burst instrukcji razem z buforowaniem instrukcji zaczynając od wersji 18.0.
Tryb Burst dla bufora danych nie będzie włączany przez WHDLoad.
Write Allocation
Write Allocation kontroluje bufory na procesorze 68030 w sytuacji, gdy występuje
utrata buforów podczas operacji zapisu. Write Allocation musi zostać włączony,
gdy fragmenty zainstalowanego programu uruchomione są w trybie Użytkownika.
Jeżeli zainstalowany program uruchomiony jest w trybie Supervisor Mode Write Allocation,
Write Allocation może zostać wyłączony, co może wpłynąć na minimalną poprawę
efektywności.
Branch Cache
Branch Cache (bufor gałęziowy) dostępny jest tylko na 68060. Jest to
rodzaj Instruction Cache dla tzw. instrukcji gałęziowych. W odróżnieniu
od Instruction Cache ustawienia MMU nie mają wpływu na Branch Cache!
Oznacza to, że nawet jeżeli odpowiednia strona pamięci zaznaczona jest jako
niebuforowalna, instrukcje gałęziowe będą buforowane (jeżeli tylko Branch Cache
jest włączony).
W celu uzyskania dalszych informacji przeczytaj Motorola Microprocessors User Manuals.
Jeżeli masz jakieś uwagi dotyczące tego tematu skontaktuj się ze mną.
[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]