Architektura komputerów Tydzień 6 RSC i CSC
Znaczenie terminów CSC Complete nstruction Set Computer komputer o pełnej liście rozkazów. RSC Reduced nstruction Set Computer komputer o zredukowanej liście rozkazów.
Filozofia CSC Złożone listy rozkazów zaprojektowano w celu: ułatwienia tworzenia kompilatorów poprawienia efektywności wykonywania (złożone operacje odpowiadają pojedynczym instrukcjom procesora) wspierania złożonych języków wysokiego poziomu
Filozofia RSC Prosty zbiór rozkazów Duża liczba rejestrów roboczych Optymalizacja wykorzystania rejestrów przez kompilator Akcent na optymalizację potoku rozkazów
Operacje W programach kompilowanych z języków wysokiego poziomu dominują instrukcje: przemieszczenia danych skoków warunkowych i porównania Najbardziej czasochłonne są operacje wywołania podprogramu i powrotu. Te właśnie instrukcje powinny być zoptymalizowane przez procesor.
Argumenty Większość odniesień do danych dotyczy prostych zmiennych skalarnych. Ponad 80% tych skalarów to zmienne lokalne. Dlatego ważny jest szybki dostęp do argumentów. Z badań wynika, że pierwszym kandydatem do optymalizacji jest mechanizm przechowywania i osiągania zmiennych skalarnych.
Wywołania procedur Najbardziej czasochłonne operacje, dlatego korzystne byłoby ich zoptymalizowanie. Badania wykazały, że: 98% procedur używa mniej niż 6 argumentów 92% z nich używa mniej niż 6 lokalnych zmiennych skalarnych. Czyli liczba słów przypadająca na jedno wywołanie nie jest wielka.
Użycie dużej tablicy rejestrów Potrzebny jest szybki dostęp do argumentów. Większość odniesień do argumentów dotyczy lokalnych skalarów, które łatwo możemy przechowywać w rejestrach. Rejestry są najszybszą dostępną pamięcią. Zminimalizowanie operacji dostępu do pamięci pozwala zwiększyć wydajność.
Okna rejestrów Większość odniesień dotyczy lokalnych skalarów, więc najlepiej przechowywać je w rejestrach, z zostawieniem kilku rejestrów na zmienne globalne. Pojęcie lokalności zmienia się z każdym wywołaniem procedury i powrotem. Możemy użyć wielu małych zestawów rejestrów przypisanych do konkretnych procedur.
Okna rejestrów H.loc H.in G.loc G.in A.in w6 w7 F.loc A.loc w5 w0 F.in B.in w4 w1 E.loc B.loc w2 w3 E.in C.in C.loc D.in D.loc wn okno rejestrów dostępnych na raz X.in parametry procedury X X.loc dane lokalne procedury X Okno w0 zawiera parametry wejściowe procedury A (A.in), zmienne lokalne procedury A (A.loc) oraz rejestry na parametry wywołania nowej procedury (B.in). Po wywołaniu procedury B okno bieżące jest zmieniane na w1, udostępniając nowy zestaw rejestrów na zmienne lokalne i do wywołania kolejnej procedury.
Zmienne globalne Opisany wcześniej układ stanowi efektywną organizację do przechowywania zmiennych lokalnych w rejestrach. Nie odpowiada jednak potrzebom przechowywania zmiennych globalnych. Są dwa możliwe rozwiązania: Przypisanie zmiennych globalnych do lokalnych rejestrów dla każdej procedury. Wydzielenie rejestrów globalnych.
Duża tablica rejestrów a pamięć podręczna Tablica rejestrów zorganizowana w postaci okien jest podobna do pamięci cache. Tablica rejestrów może nieefektywnie wykorzystać przestrzeń, ponieważ wiele procedur nie wykorzysta wszystkich przypisanych rejestrów. Pamięć cache wczytuje dane w blokach, z których część nie będzie nigdy wykorzystana.
Porównanie własności Tablica rejestrów Wszystkie skalary lokalne Pojedyncze zmienne Zmienne globalne przypisane przez kompilator Zachowywanie/odtwarza nie oparte na głębokości zagnieżdżenia procedury Adresowanie rejestrów Pamięć podręczna Ostatnio używane skalary lokalne Bloki pamięci Ostatnio używane zmienne globalne Zachowywanie/odtwarza nie oparte na algorytmie wymiany pamięci cache Adresowanie pamięci
Dostęp do lokalnych zmiennych Rozkaz R Rejestry Rozkaz Adres Pamięć podręczna Numer okna Dekoder Dane Znaczniki Dane Dane Porównanie Wybór Tablica rejestrów oparta na oknach Pamięć podręczna Dane
Optymalizacja kompilatorem Celem kompilatora jest maksymalnie długie przechowywanie argumentów w rejestrach i minimalizacja operacji ładowania i zapisu do pamięci. Każda zmienna jest przypisywana do rejestru symbolicznego. Następnie nieograniczona liczba rejestrów symbolicznych jest odwzorowywana na rzeczywiste. stotą optymalizacji jest zdecydowanie które wielkości mają być przypisane rejestrom w określonym punkcie programu.
Powody używania CSC Łatwiejsze tworzenie kompilatorów Oczekiwanie mniejszych programów (mniej instrukcji). Oczekiwanie wydajniejszych programów (jedna złożona instrukcja powinna wykonać się szybciej niż kilka prostszych). Zgodność z istniejącym oprogramowaniem.
Powody używania RSC Prosta konstrukcja procesora zapewnia jego większą wydajność. Jedna instrukcja jest wykonywana w jednym cyklu zegara. Prawie cała optymalizacja wydajności leży po stronie kompilatora. Dzięki temu możliwe jest tworzenie coraz lepszych kompilatorów dla istniejącego już sprzętu.
liczba rozmiarów rozkazów maksymalny rozmiar rozkazu (w bajtach) liczba trybów adresowania adresowanie pośrednie operacje arytmetyczne z dostępem do pamięci maksymalna liczba argumentów pamięci adresowanie nie wyrównane do słowa maksymalna liczba zastosowań MMU liczba bitów numeru rejestru całkowitego liczba bitów numeru rejestru zmiennopozyc. Porównanie własności Złożoność dekodowania Trudność przetwarzania potokowego Wspieranie kompilatora Procesor AMD29000 1 4 1 nie nie 1 nie 1 8 3 SPARC HP PA BM 390 ntel i486 ntel i960 PowerPC Alpha 1 4 2 nie nie 1 nie 1 5 4 1 4 10 nie nie 1 nie 1 5 4 3 6 2 nie tak 2 tak 4 4 2 12 12 15 nie tak 2 tak 4 3 3 2 8 9 nie nie 1 tak 1 5 3 1 4 5 nie nie 1 tak 1 5 5 1 4 1 nie nie 1 tak 1 5 5
Potoki RSC Większość rozkazów jest typu rejestrrejestr i ma dwie fazy: : pobranie rozkazu E: wykonanie rozkazu Operacje ładowania i zapisu mają jeszcze trzecią fazę: D. Operacja dostępu do pamięci (pamięć-rejestr lub rejestr-pamięć). Jeśli rozkaz używa argumentu zmienionego przez poprzedni, potrzebne jest opóźnienie
Przebieg czasowy przetwarzania potokowego Ładuj A M Ładuj B M NOOP Dodaj C A+B E D E D E E Zapisz M C Skok do X E D E Musimy użyć instrukcji NOOP ponieważ w przeciwnym wypadku faza wykonania instrukcji dodawania pokryłaby się z fazą pobierania danych poprzedniej instrukcji ładowania.
Optymalizacja przetwarzania potokowego 100 Ładuj A M 101 NOOP 102 Dodaj A A+ E D E E 100 Ładuj A M 101 Skok do 105 102 Dodaj A A+ E D E E 103 Skok do 106 106 Zapisz M A E E D 105 Zapisz M A E D Rozkaz pusty umożliwia dodawanie Zamieniona kolejność pozwala pominąć rozkaz pusty Dzięki zamianie kolejności rozkazów skoku i dodawania możliwe jest pominięcie pustej instrukcji opóźniającej. Taka zamiana jest jednak możliwa tylko w przypadkach, kiedy nie zmieni to wyniku operacji.
Przyszłość RSC i CSC W ciągu ostatnich lat polemika RSC kontra CSC właściwie zanikła. Stopniowo technologie się przenikają: systemy RSC stały się bardziej złożone, architektury CSC wdrażają wiele rozwiązań związanych z RSC. Np. procesory rodziny Pentium zawierają wewnętrzne jądro w architekturze RSC z układem tłumaczącym instrukcje CSC na sekwencje mikrorozkazów wewnętrznych