Architektura Systemów Komputerowych Wykład 6: Budowa jednostki centralnej - CPU Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie
Plan Procesor jednocyklowy Procesor wielocyklowy z jednostką sterującą Procesor potokowy
Procesor jednocyklowy Procesory o prostym modelu programowym można zrealizować w postaci układu sekwencyjnego, który podczas każdej instrukcji zmienia stan tylko jeden raz na końcu instrukcji Całe wykonanie instrukcji odbywa się w układzie kombinacyjnym Założenia dla modelu procesora: Model programowy MIPS (RISC) z uproszczeniami Architektura Harvard rozdzielona pamięć programu (ROM układ kombinacyjny) i danych Instrukcje 32-bitowe zapisane w pamięci o długości słowa 32 bity Bajtowe adresowanie pamięci wymuszone wyrównywanie naturalne danych i instrukcji
Formaty instrukcji 6 5 5 5 5 6 R: op rs rt rd shamt func 6 5 5 16 I: op rs rt offset op główny kod operacyjny rs rejestr źródłowy rt rejestr źródłowy przeznaczenia rd rejestr przeznaczenia shamt wartość przesunięcia bitowego dla instrukcji przesunięć func rozszerzenie kodu operacyjnego offset stała 16-bitowa argument operacji, przemieszczenie pamięci lub przemieszczenie skoku
Procesor jednocyklowy pobranie instrukcji nextpc 4 PC_Inc incpc PC IM instrukcja
Procesor jednocyklowy pobranie instrukcji Licznik rozkazów PC zrealizowany jako rejestr typu D Zawartość licznika rozkazów podawana jest na: Wejście adresowe pamięci programu IM Wejście inkrementera PC-inc układu kombinacyjnego generującego wartość PC+4 (potencjalny adres następnej instrukcji) Na wyjściu pamięci instrukcji pojawia się binarny obraz instrukcji w postaci słowa 32-bitowego Poszczególne części tego słowa zawierają (w zależności od formatu): kod operacyjny instrukcji (jedno lub dwa pola) 0, 1, 2 lub trzy oznaczenia rejestrów (docelowy, źródłowe) 16-bitową stałą natychmiastową, używaną jako argument operacji lub przemieszczenie adresu 5-bitową wartość przesunięcia bitowego
Procesor jednocyklowy układ sterujący Na wejście układu sterującego podawana jest część słowa instrukcji Główny kod operacyjny pole OP (tylko dla instrukcji w formacie R) pole FUNC Układ sterujący generuje sygnały sterujące pozostałymi częściami procesora, w tym m.in.: Sygnały sterujące multiplekserami Sygnały zezwolenia na odczyt i zapis pamięci danych Sygnał zezwolenia na zapis rejestru docelowego Kod operacji dla jednostki arytmetyczno-logicznej Sygnał zezwolenia na skok warunkowy Sygnał sterujący pracą układu rozszerzania danej natychmiastowej
Procesor jednocyklowy przygotowanie argumentów
Procesor jednocyklowy przygotowanie argumentów Argumenty rejestrowe: Pierwszy argument rejestr o numerze Rs Drugi argument rejestr o numerze Rt (tylko w formacie R) Argument natychmiastowy (format I) uzyskiwany przez rozszerzenie 16-bitowego pola stałej do 32 bitów w układzie rozszerzenia Ext Instrukcje arytmetyczne, skoki warunkowe, odwołania do pamięci rozszerzenie bitem znaku Instrukcje logiczne rozszerzenie zerami Wybór drugiego argumentu realizowany przez multiplekser Mux_ALU, w zależności od instrukcji Jednostka arytmetyczna otrzymuje na wejściach dwa argumenty 32-bitowe Numer rejestru docelowego pochodzi z pola Rt lub Rd
Procesor jednocyklowy ALU, układ skoków, pamięć danych
Procesor jednocyklowy ALU, układ skoków Jednostka arytmetyczno-logiczna wykonuje na argumentach wejściowych operację określoną przez wykonywaną instrukcję Przy instrukcjach odwołań do pamięci jest to sumowanie zawartości rejestru bazowego z przemieszczeniem, którego wynikiem jest adres odwołania Przy instrukcjach skoków warunkowych ALU porównuje dwa argumenty sprawdzając określoną relację, a wartość logiczną relacji wystawia na wyjście warunku COND Sumator skoków generuje potencjalny adres docelowy skoku warunkowego Adres powstaje przez zsumowanie zinkrementowanej zawartości PC z przeskalowanym ( 4) przemieszczeniem zawartym w kodzie instrukcji Multiplekser skoków względnych MUX_BR wybiera adres następnej instrukcji
Procesor jednocyklowy wymiana danych z pamięcią Moduł wymiany danych z pamięcią jest bezczynny podczas instrukcji innych niż ładowanie i składowanie danych Wartość z wyjścia ALU jest używana jako adres odczytu lub zapisu pamięci W instrukcjach składowania do pamięci jest zapisywana zawartości rejestru Rt Zapis następuje na końcu wykonania instrukcji W instrukcjach ładowania następuje odczyt zawartości pamięci
Procesor jednocyklowy zakończenie wykonania instrukcji Multiplekser wyboru wyniku służy do wybrania wartości, która ma być zapisana do rejestru Albo wartość z wyjścia ALU Albo dana odczytana z pamięci Po przepropagowaniu sygnałów przez wszystkie układy procesora następuje zakończenie wykonywania instrukcji sterowane zboczem sygnału zegarowego Zbocze zegara powoduje: Zapis wartości z wyjścia multipleksera skoków do PC Zapis wyniku operacji (arytmetycznej, logicznej) lub danej odczytanej z pamięci (instrukcja ładowania) do rejestru docelowego Zapis danej odczytanej z rejestru Rt (instrukcje składowania) do pamięci danych Po zboczu zegara następuje rozpoczęcie wykonywania następne instrukcji
Procesor jednocyklowy - ograniczenia Przedstawiony model procesora nie wykonuje wszystkich instrukcji MIPS32, w tym: Skoków ze śladem Skoków w formacie J Operacji na pamięci danych z argumentami krótszymi niż 32 bity Model można uzupełnić, umożliwiając wykonanie wszystkich instrukcji MIPS
Procesor jednocyklowy studium implementacji Przedstawiony procesor można skonstruować ze standardowych układów logicznych Rejestry, bramki, multipleksery, ALU, pamięci ROM i RAM (łatwo dostępne) Zestaw rejestrów można zbudować np. z dwóch układów pamięci o identycznej zawartości Procesor taki można również zsyntetyzować w układzie FPGA (Field Programmable Gate Array) Realistyczne czasy propagacji układów: 5 ns dla prostych układów logicznych oraz t setup 20 ns dla pamięci i dla ALU Wydajność procesora Wynika z najdłuższej ścieżki przepływu sygnałów podczas wykonywania instrukcji 3 20 ns + 4 5 ns = 80 ns f max około 12 MHz
Procesor jednocyklowy - problemy Realizacja jednocyklowa nie była i nie jest stosowana w praktyce Wady dawne: Oddzielenie pamięci wysoki koszt, duże rozmiary, brak programowalności Nadmiarowość kosztownych bloków trzy sumatory (inkrementer PC, ALU, sumator skoków) Wady obecne: Niska wydajność Rozwiązanie inna budowa procesora Dawniej procesor wielocyklowy Obecnie architektury potokowe
Procesor wielocyklowy Architektura wielocyklowa minimalizuje liczbę bloków funkcjonalnych poprzez wielokrotne wykorzystanie bloków podczas każdej instrukcji Implikuje to konieczność rozbicia wykonania instrukcji na kilka faz cykli w każdej fazie każdy blok wykonuje jedną czynność liczba faz wynosi od dwóch do kilkunastu, w zależności od budowy procesora i złożoności danej instrukcji poszczególne instrukcje mają różne czasy wykonania Do sterowania wykonaniem służy skomplikowany układ sterujący, będący złożonym automatem synchronicznym Komplikacja dróg przepływu danych implikuje wzrost liczby multiplekserów
Procesor wielocyklowy c.d. Wspólna pamięć programu i danych architektura Princeton Programowalność dwu- lub trzykrotne użycie pamięci podczas wykonywania instrukcji Wielokrotne wykorzystanie sumatora do inkrementacji PC do wykonania operacji arytmetycznej do wyliczenia adresu docelowego skoku Wielofazowe wykonanie powoduje konieczność zapamiętania pobranej instrukcji służy do tego tzw. rejestr instrukcji (IR instruction register), umieszczony w jednostce sterującej w fazie pobrania rejestr ten jest ładowany obrazem instrukcji pobranym z pamięci
Procesor wielocyklowy studium implementacji Każda instrukcja wykonuje się w kilku cyklach zegara przyjmijmy średnią liczbę cykli równą 3 Czas cyklu zależy od najdłuższej ścieżki propagacji sygnałów przyjmując parametry analogiczne jak dla modelu procesora jednocyklowego: 20 ns + 3 x 5 ns = 35 ns f max około 30 MHz Średni czas wykonania instrukcji 3 x 35 ns = 105 ns realizacja wielocyklowa jest nieco wolniejsza od jednocyklowej niższe koszty rekompensują niższą wydajność
Procesor wielocyklowy - analiza Wykonanie każdej instrukcji wymaga wykonania sekwencji operacji niektóre operacje mogę być puste dla niektórych instrukcji Przyjmijmy sekwencję faz wykonania: pobranie instrukcji zdekodowanie instrukcji pobranie argumentów wykonanie operacji zapis wyniku Procesory wielocyklowe maję modele programowe CISC argumenty mogą pochodzić z rejestrów lub z pamięci danych wynik zapisywany do rejestru lub pamięci instrukcje mają różne długości pobieranie i dekodowanie ma charakter iteracyjny
Procesor wielocyklowy - budowa W praktyce pamięć jest umieszczona na zewnątrz procesora i jest ona połączona z procesorem tzw. szyną (magistralą, ang. bus) Do współpracy procesora z pamięcią służy jednostka interfejsu szyny, umieszczona wewnątrz Bloki procesora (przykład): Jednostka sterująca zestaw rejestrów jednostka arytmetyczno logiczna jednostka interfejsu szyny
Procesor wielocyklowy działanie W poszczególnych fazach wykonania instrukcji pracuje tylko część bloków wykonawczych procesora: pobranie instrukcji interfejs szyny dekodowanie instrukcji tylko jednostka sterująca odczyt argumentów rejestry lub interfejs szyny wykonanie operacji jednostka arytmetyczno-logiczna zapis wyniku rejestry lub interfejs szyny Przez większość czasu większość bloków procesora jest bezczynna
Procesor wielocyklowy - optymalizacja struktury Liczba faz potrzebnych do wykonania instrukcji zależy od możliwości przesyłania danych wewnątrz procesora Przy jednej ścieżce danych samo pobranie dwóch argumentów z rejestrów zajmuje dwie fazy, a wykonanie prostej instrukcji min. 6 faz Liczbę faz można zwiększyć poprzez zwiększenie liczby niezależnych ścieżek danych wewnątrz procesora Np. przez bezpośrednie połączenie rejestrów z jednostką arytmetyczną Przy trzech ścieżkach danych wykonanie instrukcji z argumentami w rejestrach zajmuje 3 fazy: pobrania, dekodowania i wykonania Większa liczba ścieżek oznacza możliwość szybkiego wykonania bardziej złożonych instrukcji z wieloma argumentami (np. ze złożonymi trybami adresowania)
Procesor wielocyklowy optymalizacja pobrania instrukcji W każdej instrukcji w fazie wykonania bloki wykonawcze są bezczynne W fazie wykonania, a w większości instrukcji również w fazie odczytu argumentów lub zapisu wyniku jest bezczynny interfejs szyny Dekodowanie instrukcji wymaga wcześniejszego jej pobrania Wykonanie instrukcji można przyspieszyć poprzez wcześniejsze pobieranie instrukcji podczas wykonania poprzedniej instrukcji
Pobranie z wyprzedzeniem - prefetch Realizacja pobierania z wyprzedzeniem dodatkowe elementy procesora: dodatkowy rejestr PC, zwany scanpc i umieszczony w jednostce interfejsu szyny rejestr instrukcji pobieranej na zapas (ang. prefetch register) w jednostce interfejsu szyny Działanie: w fazie, w której interfejs szyny byłby bezczynny (zwykle faza dekodowania), samoczynnie wykonuje on cykl pobrania instrukcji spod adresu zawartego w scanpc i zapisania jej do rejestru prefetch jednocześnie inkrementowany jest rejestr scanpc. jednostka sterująca może zwykle pominąć fazę pobrania, pobierając następną instrukcję z rejestru prefetch nie wymaga to oddzielnej fazy Efekt: pominięcie fazy pobrania instrukcji
Prefetch implementacja, problemy Mechanizm prefetch zrealizowano m.in. w mikroprocesorach MC68000 (rok 1979) przed rozpoczęciem wykonania instrukcji procesor pobiera następną instrukcję W procesorach CISC instrukcje mają różne długości mechanizm prefetch pobiera do rejestru tylko jedno słowo z pamięci przy dłuższych instrukcjach konieczna jest kontynuacja pobierania Po wykonaniu skoku scanpc różni się od nextpc, a w rejestrze prefetch znajduje się instrukcja położona za instrukcją skoku należy skopiować wartość nextpc do scan PC i unieważnić zawartość rejestru prefetch przy wykonywaniu następnej instrukcji po skoku nie można pominąć fazy pobrania jednostka sterująca musi czekać na pobranie instrukcji z pamięci
Kolejka instrukcji Instrukcje procesorów CISC mają różne długości Podczas wykonania instrukcji jednostka interfejsu szyny może być bezczynna przez kilka faz mogłaby ona pobrać kilka kolejnych słów, o ile byłoby gdzie je przechować Rozwiązanie zastąpienie pojedynczego rejestru prefetch buforem FIFO tzw. kolejką instrukcji (ang. instruction queue) jeśli w kolejce jest wolne miejsce. jednostka interfejsu szyny pobiera do niej kolejne słowo w każdym cyklu bezczynności i inkrementuje scanpc Po wykonaniu skoku należy unieważnić zawartość kolejki i skopiować nextpc do scanpc Kolejki instrukcji stosowano m.in. W procesorach MC68010, Intel8086, 80286, i386
Opóźnienie skoków w procesorach z kolejką instrukcji Niemożność pominięcia fazy pobrania po wykonaniu skoku oznacza, że instrukcja skoku wykonuje się dłużej, niż instrukcje niemodyfikujące PC Różnica pomiędzy czasem wykonania instrukcji skoku i czasem wykonania innych instrukcji nazywa się opóźnieniem skoku (ang. branch penalty) Statystycznie skoki stanowią od 7 do 14% wszystkich instrukcji wykonywanych przez procesor opóźnienie skoków jest poważnym problemem obniżającym wydajność procesora Należy dążyć do redukcji opóźnienia wynikającego z wykonywania skoków
Redukcja opóźnienia skoków w procesorach wielocyklowych Opóźnienie skoków wynika z konieczności przeładowywania kolejki instrukcji Opóźnienie można ograniczyć przez ograniczenie liczby skoków w programie odpowiednie techniki programowania użycie instrukcji iteracyjnych Wykrywanie krótkich pętli (M C68010) seria M68k nie ma instrukcji iteracyjnych krótkie pętle mieszczą się w trzech słowach 16-bitowych jedno słowo instrukcji zawartej w pętli dwa słowa instrukcji zamknięcia pętli po wykryciu w kolejce krótkiej pętli kolejka zmienia się w bufor cykliczny i wykonanie pętli następuje bez pobierania instrukcji z pamięci. Inne rozwiązania zostaną omówione później
Praca procesora jednocyklowego Podczas wykonywania pojedynczej instrukcji następuje propagacja sygnałów przez połączone układy kombinacyjne Po jednokrotnej zmianie stanu wyjścia każdego układu, stan wyjścia pozostaje stały do zakończenia wykonywania instrukcji Każdy układ aktywnie pracuje tylko przez krótki czas, przez pozostały czas utrzymuje ustaloną wartość na wyjściu Do utrzymywania ustalonych wartości można użyć rejestrów Procesor jednocyklowy można podzielić na fragmenty o podobnych czasach propagacji sygnałów, np.: PC i pamięć programu zestaw rejestrów i układ rozszerzania danej ALU i sumator skoków pamięć danych układ zapisu wyniku
Od procesora jednocyklowego do potoku W miejscach linii cięcia umieszczamy rejestry typu D Wykonanie instrukcji po zmianie PC, po czasie potrzebnym na propagację sygnałów przez pamięć programu, zapamiętujemy stan wszystkich sygnałów (zinkrementowaną wartość PC i wyjście pamięci programu) w rejestrze, poprzez podanie zbocza zegara po przepropagowaniu sygnałów przez każdy kolejny fragment procesora zapamiętujemy wszystkie sygnały wychodzące z tego bloku w rejestrze umieszczonym na końcu danego bloku po przepropagowaniu sygnałów z ostatniego bloku na wejścia PC i zestawu rejestrów podajemy zbocze zegara kończące wykonanie instrukcji Przepływ sygnałów pozostał bez zmian, dodano 4 rejestry Wykonanie instrukcji zajmuje 5 faz, czas wykonania instrukcji nieco wzrósł, potrzeba 5 przebiegów synchronizujących gdzie tu jest zysk?
Od procesora jednocyklowego do potoku c.d. Po zapamiętaniu stanu wyjść fragmentu procesora, fragment ten staje się bezczynny nie jest już potrzebny do wykonania danej instrukcji, a wynik jego pracy jest zapamiętany w rejestrze Zwolniony fragment można wykorzystać do wykonania następnej instrukcji Wystarczy w tym celu użyć jednego. wspólnego przebiegu zegarowego do sterowania wszystkich rejestrów Wykonanie pojedynczej instrukcji zajmuje 5 cykli zegarowych czas tych cykli jest znacznie krótszy niż w wariancie jednocyklowym W każdym cyklu procesor rozpoczyna wykonanie nowej instrukcji W każdym cyklu procesor kończy wykonanie kolejnej instrukcji Widziana na zewnątrz wydajność - jedna instrukcja na cykl
Struktura przykładowego potoku stopnie IF (instruction fetch) pobranie instrukcji RD (read) dekodowanie i odczyt argumentów z rejestrów ALU (arithmetic-logic unit) obliczenie wyniku w jednostce arytmetyczno-logicznej MEM (memory) wymiana danych z pamięcią WB (write back) zwrotny zapis wyniku do rejestrów
Wykonanie instrukcji w potoku Instrukcja Cykl T1 T2 T3 T4 T5 T6 T7 T8 T9 I1 IF RD ALU MEM WB I2 IF RD ALU MEM WB I3 IF RD ALU MEM WB I4 IF RD ALU MEM WB I5 IF RD ALU MEM WB I6 IF RD ALU MEM I7 IF RD ALU
Procesor potokowy Uzyskaną strukturę nazywamy procesorem potokowym lub potokiem Efektywna teoretyczna wydajność procesora potokowego wynosi jeden cykl na instrukcję Przyjmując wcześniejsze wartości parametrów czasowych: czas cyklu wynosi ok 30 ns czas wykonania pojedynczej instrukcji to150 ns częstotliwość wykonywania instrukcji ok. 33 MHz Niemal wszystkie procesory budowane od połowy lat 80- tych XX wieku bazują na potokowych jednostkach wykonawczych Zrównoleglenie wykonania instrukcji oprócz podwyższenia wydajności powoduje również pojawienie się problemów synchronizacyjnych, którymi zajmiemy się w następnym wykładzie
DZIĘKUJĘ ZA UWAGĘ!