[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:

Zarządzanie buforami w WHDLoad

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]