Wprowadzenie do architektury komputerów. Budowa jednostki wykonawczej procesora Potokowa jednostka wykonawcza Przetwarzanie wielopotokowe

Podobne dokumenty
Architektura Systemów Komputerowych

Architektura Systemów Komputerowych

Architektura Systemów Komputerowych

Architektura potokowa RISC

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.01 Rok akad. 2011/ / 27

Przetwarzanie potokowe pipelining

Logiczny model komputera i działanie procesora. Część 1.

Architektura komputerów

Budowa i zasada działania komputera. dr Artur Bartoszewski

Architektura typu Single-Cycle

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.02 Rok akad. 2011/ / 35

Organizacja typowego mikroprocesora

Pytania. W obecnie wykorzystywanych komputerach osobistych jest stosowana architektura: jednoszynowa. pamięciowo-centryczna.

Architektura komputerów, Informatyka, sem.iii. Rozwiązywanie konfliktów danych i sterowania w architekturze potokowej

LEKCJA TEMAT: Zasada działania komputera.

Projektowanie. Projektowanie mikroprocesorów

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Architektura komputerów

Programowanie Niskopoziomowe

dr inż. Jarosław Forenc

Programowalne układy logiczne

ARCHITEKTURA PROCESORA,

Architektura mikroprocesorów TEO 2009/2010

Bramki logiczne Podstawowe składniki wszystkich układów logicznych

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Architektura systemów komputerowych. Przetwarzanie potokowe I

Architektura systemów komputerowych

Struktura i działanie jednostki centralnej

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa Wstęp... 11

Architektura mikroprocesorów z rdzeniem ColdFire

UKŁADY MIKROPROGRAMOWALNE

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

organizacja procesora 8086

architektura komputerów w. 4 Realizacja sterowania

Metody optymalizacji soft-procesorów NIOS

Architektura systemów komputerowych. dr Artur Bartoszewski

Architektura komputerów

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Architektura komputerów

PAMIĘCI. Część 1. Przygotował: Ryszard Kijanka

Mikroprocesory rodziny INTEL 80x86

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Technika mikroprocesorowa. Linia rozwojowa procesorów firmy Intel w latach

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH. Klasyczny cykl pracy procesora sekwencyjnego. współczesne architektury. c Dr inż.

Magistrala systemowa (System Bus)

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Układy kombinacyjne. cz.2

Programowanie współbieżne Wykład 2. Iwona Kochańska

Zarządzanie pamięcią w systemie operacyjnym

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Architektura komputerów Wykład 2

Mikroprocesor Operacje wejścia / wyjścia

Zrównoleglenie i przetwarzanie potokowe

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

Budowa komputera Komputer computer computare

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Budowa Mikrokomputera

dwójkę liczącą Licznikiem Podział liczników:

Sławomir Kulesza. Projektowanie automatów asynchronicznych

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

LEKCJA TEMAT: Współczesne procesory.

Lista Rozkazów: Język komputera

Witold Komorowski: RISC. Witold Komorowski, dr inż.

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

Przerwania, polling, timery - wykład 9

Lista tematów na kolokwium z wykładu z Techniki Cyfrowej w roku ak. 2013/2014

Funkcja Boolowska a kombinacyjny blok funkcjonalny

Prezentacja systemu RTLinux

Stronicowanie w systemie pamięci wirtualnej

Architektura Systemów Komputerowych

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

Tranzystor JFET i MOSFET zas. działania

Architektura komputerów

Architektura komputerów

Adam Korzeniewski p Katedra Systemów Multimedialnych

Architektura systemów komputerowych. dr Artur Bartoszewski

Podstawy Techniki Mikroprocesorowej

Podstawy Informatyki Układ sterujący

Architektura komputerów

Budowa systemów komputerowych

Specyfika projektowania Mariusz Rawski

Architektura komputerów

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Metody obsługi zdarzeń

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

POLITECHNIKA WARSZAWSKA Wydział Elektroniki i Technik Informacyjnych. Instytut Telekomunikacji Zakład Podstaw Telekomunikacji

dr inŝ. Jarosław Forenc

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Technika cyfrowa Układy arytmetyczne

Krótkie przypomnienie

Architektura komputera

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

Projekt zespołowy. Część1: Projekt potokowej jednostki przetwarzającej przeznaczonej do realizacji algorytmu FFT. Rok akademicki 2008/2009

Transkrypt:

Wprowadzenie do architektury komputerów Budowa jednostki wykonawczej procesora Potokowa jednostka wykonawcza Przetwarzanie wielopotokowe

Budowa procesora Jednostka wykonawcza Procesor

Procesor jednocykowy 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 rozdzielone pamięci programu i danych pamięć programu jest pamięcią stałą (ROM) czyli układem kombinacyjnym instrukcje o długości 32-bitów zapisane w pamięci o szerokości słowa równej 32 bity adresowanie pamięci bajtowe wymuszone wyrównanie naturalne danych i instrukcji

Format instrukcji Modelowy procesor ma możliwość wykonywania instrukcji MIPS w dwóch spośród trzech formatów R oraz I. W obu formatach występują pola głównego kodu operacyjnego i dwa numery rejestrów. Pozostała część słowa instrukcji jest różna dla obu formatów.

Procesor jednocyklowy pobranie instrukcji PC licznik instrukcji PC_inc inkrementer licznika instrukcji IM pamięć instrukcji nextpc ścieżka zawierająca następną zawartość PC

Procesor jednocyklowy pobieranie instrukcji Licznik instrukcji PC zrealizowany jako rejestr typu D Zawartość licznika instrukcji jest podawana 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 3 numery 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 jest podawana część słowa instrukcji główny kod operacyjny pole OPC (tylko dla instrukcji w formacie R) pole FUN Układ sterujący generuje sygnały sterujące pozostałymi częściami procesora, w tym m,in, sygnały sterujące multiplexerami sygnały zezwolenia na odczyt i zapis pamięci danych sygnały 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 OPC, FUN, Rs, Rt, Rd, offset pola obrazu binarnego instrukcji. RdA1, RdA2 adresy odczytu zestawu rejestrów (numery odczytywanych rejestrów). WrA Numer rejestru zapisywanego. WrD dane zapisywane do rejstru. RdD1, RdD2 dane odczytywane z rejestrów. BrOffset przemieszczenie skoku. StoreData - dane zapisywane do pamięci. Mux_ALU multiplekser wyboru drugiego argumentu źródłowego.

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) uzyskany 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 multiplexer Mux_ALU w zależności od formatu instrukcji Jednostka arytmetyczna otrzymuje na wejściach dwa argumenty 32- bitowe Numer rejestru docelowego pochodzi z pola Rt lub Rd

Procesor jednocyklowy ALU, pamięć danych Br_Add sumator adresów docelowych skoków. MUX_BR multiplekser skoków warunkowych. ALU jednostka arytmetyczno logiczna. Result wynik operacji. Cond warunek skoku. DM pamięć danych. WrData dane zapisywane do rejestru.

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 skoku COND Sumator skoków generuje potencjalny adres docelowy skoku warunkowego adres powstaje przez zsumowanie zinkrementowanej zawartości PC z przeskalowanym (x4) 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 zapisana zawartość rejestru Rt zapis następuje na końcu wykonania instrukcji W instrukcji ładowania następuje odczyt zawartości pamięci

Procesor jednocyklowy zakończenie wykonywania instrukcji Multiplexer wyboru wyniku służy do wybrania wartości, która ma być zapisana do rejestru jest to 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 wykonania instrukcji, sterowane zboczem sygnału zegarowego Zbocze zegara powoduje zapis do PC wartości z wyjścia multipleksera skoków (w instr. arytmetycznych, logicznych i ładowania) zapis wyniku operacji lub danej odczytanej z pamięci do rejestru docelowego (w instrukcjach składowania) zapis danej odczytanej z rejestru Rt do pamięci danych Po zboczu zegara następuje rozpoczęcie wykonania następnej instrukcji

Procesor jednocyklowy studium implementacji Przedstawiony procesor można skonstruować ze standardowych układów logicznych rejestry, bramki, multipleksery, ALU, Pamięć ROM i RAM łatwo dostępne Zestaw rejestrów można zbudować np. z dwóch układów pamięci, które będą miały identyczną zawartość Procesor taki można również zsyntezować w układzie FPGA Realistyczne czasy propagacji układów 5 ns dla prostych układów logicznych oraz tsetup 20 ns dla pamięci i ALU Wydajność procesora wynika z najdłuższej ścieżki przepływu sygnałów podczas wykonywania instrukcji 3 x 20 ns +4 x 5 ns = 80 ns co daje fmax około 12 MHz

Procesor jednocyklowy - problemy Realizacja jednocyklowa nie była i nie jest stosowana w praktyce Wady dawniej oddzielenie pamięci wysoki koszt, duże rozmiary, brak programowalności Nadmiarowość kosztownych bloków trzy sumatory (inkrementacja PC, ALU, sumator skoków) Wady obecnie 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ą roż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 Wspólna pamięć programu i danych architektura Princeton programowalność dwu- lub trzykrotne użycie pamięci podczas wykonania 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 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żny 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 fmax około 30MHz Średni czas wykonania instrukcji 3 x 35 ns = 105 ns realizacja wielocyklowa jest nieco wolniejsza od jednocyklowej niższe koszty rekompensują niższą wydajność

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 utrzymania 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 (zinkrementowana 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 jest zysk?

Od procesora jednocyklowego do potoku 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

Potokowa jednostka wykonawcza MIPS R3000 Jeden z pierwszych mikroprocesorów RISC, ok. 1985 5 stopni potoku IF, RD, ALU, MEM, WB Stopnie IF i WB pracują przez pół cyklu wykonywanie instrukcji zajmuje czas czterech cykli zegra, złożony z połówkowego cyklu IF, pełnych cykli RD, ALU i MEM oraz połówki cyklu WB ma to wpływ na wielkość opóźnień, - omówione dalej Architektura Harvard-Princeton rozdzielone górne warstwy hierarchii pamięci, wspólna pamięć operacyjna

Potok MIPS R3000 Stopień IF pobiera instrukcje z hierarchii pamięci instrukcji (zewnętrznej w stosunku do procesora). Stopień RD odczytuje zawartości rejestrów źródłowych z zestawu rejestrów procesora. Stopień ALU wykonuje operację arytmetyczną i ew. skok. Stopień MEM dokonuje wymiany danych z hierarchią pamięci danych. Stopień WB zapisuje wynik operacji arytmetycznej lub daną odczytaną z pamięci do rejestru.

Budowa i działanie potoku MIPS R3000 Na końcu każdego stopnia (oprócz WB) jest umieszczony rejestr typu D Aktualizacja PC i rejestrów uniwersalnych następuje w połowie cyklu zegara pobranie instrukcji zaczyna się w połowie cyklu zapis wyniku do rejestru następuje w połowie cyklu odczyt danej z rejestru następuje w drugiej połowie fazy RD Wszystkie sygnały potrzebne do dokończenia wykonania instrukcji są zapamiętane w rejestrach i przekazywane do kolejnych stopni potoku, w tym m.in. sygnały sterujące numer rejestru docelowego

Wykonanie sekwencji instrukcji w potoku MIPS R3000 W każdym cyklu procesor rozpoczyna wykonanie nowej instrukcji i kończy wykonanie wcześniejszej instrukcji. W każdym cyklu w potoku przebywa 5 instrukcji w różnych fazach wykonania.

Synchronizacja potoku Rozpatrzmy wykonanie sekwencji instrukcji addu $4, $3, $2 addu $6, $5, $4 druga instrukcja korzysta z argumentu źródlłowego w rejestrze $4 rejestr ten jest rejestrem docelowym pierwszej instrukcji instrukcja zapisuje wynik w stopniu WB odczyt argumentów następuje w stopniu RD kiedy druga instrukcja znajduje się w stopniu RD, pierwsza przebywa w stopniu ALU Zapis wyniku przez pierwszą instrukcję nastąpi w dwa cykle później Problem: jaką wartość $4 pobierze druga instrukcja? byłaby to wartość nie zaktualizowana przez pierwszą instrukcję nie ma pewności, czy wykonanie programu użytkowego nie zostanie przerwane pomiędzy 1 i 2 instrukcją, a następnie wznowione w takiej sytuacji pierwsza instrukcja zakończy się i zapisze wynik

Hazard R-A-W Nie da się jednoznacznie określić, jaką wartość rejestru pobierze druga instrukcja jeżeli pomiędzy pierwszą i druga instrukcją nastapi np. przełączenie procesów, druga instrukcja pobierze wartość zaktualizowaną przez pierwszą Zachowanie programu jest niedeterministyczne sytuacje taka nazywamy HAZARDEM Ponieważ hazard wynika z umieszczenia w programie instrukcji odczytującej rejestr po instrukcji zapisującej rejestr, ten typ hazardu jest określany jako odczyt po zapisie (RAW hazard tj. read-afterwrite) Konieczne jest wprowadzenie determinizmu w zachowaniu procesora, czyli usunięcie hazardu

Usuwanie hazardu R-A-W (1) Metoda administarcyjna skutek wykonania instrukcji korzystającej z danego rejestru jako źródłowego wcześniej niż w 3 instrukcje po instrukcji zapisującej rejestr zostaje opisany w dokumentacji procesora jako nieokreślony programiście nie wolno użyć takiej sekwencji instrukcji wada: bardzo często trzeba w programie wstawiać instrukcje puste Metoda ta jest niepraktyczna, gdyż na ogół instrukcje programów tworzą sekwencje łańcuchy, w których kolejne instrukcje korzystają z wyników instrukcji poprzedzających.

Usuwanie hazardu R-A-W (2) Wstrzymanie potoku po wykryciu hazardu układ kombinacyjny (komparator) porównuje numery rejestrów źródłowych instrukcji w stopniu RD z numerami rejestrów docelowych instrukcji w stopniu ALU i MEM (stopień RD może oczytać rejestr zapisywany w tym samym cyklu w stopniu WB). w przypadku wykrycia zgodności, instrukcja zostaje zatrzymana w stopniu RD stopnie IF i RD stoją pozostałe stopnie pracują normalnie, ze stopnia RD do ALU jest wstrzykiwana instrukcja pusta program wykonuje się poprawnie, bez konieczności dodania instrukcji pustych zależności między instrukcjami powodują opóźnienia w programach często występują sekwencje instrukcji zależnych

Usuwanie hazardu R-A-W (3) - obejścia Najbardziej efektywna metoda usuwania hazardu RAW wymaga nieco większych nakładów sprzętowych, w postaci rozbudowy stopnia odczytu i przeprowadzenia dodatkowych ścieżek danych ze stopni ALU i MEM do stopnia RD Wynik operacji arytmetycznej jest dostępny już w stopniu ALU Wartość wyniku instrukcji jest gotowa gdy następna instrukcja przebywa w stopniu RD Obejścia to szyny (ścieżki) poprowadzone ze stopni ALU i MEM do stopnia RD po obejściu jest przesyłany numer rejestru docelowego i wynik instrukcji W ten sposób w stopniu RD można pobrać jako argumenty źródłowe wartości rejestrów, zanim zostaną one zapisane do rejestrów procesora. Logika odczytu w stopniu RD Numer rejestru źródłowego jest porównywany z numerami rejestrów na obejściach priorytety: obejście z ALU, obejście z MEM, fizyczny rejestr procesora Obejście ze stopnia WB jest zbędne Obejścia eliminują hazard RAW bez wprowadzenia opóźnień w R3000 zastosowano obejścia wg opisanego schematu

Obejścia - działanie W przedstawionym przykładzie obejścia ze stopni ALU i MEM zawierają wartości, które w przyszłości zostaną zapisane do rejestrów $5 i $4. Instrukcja przebywająca w stopniu RD specyfikuje jako argumenty źródłowe właśnie te rejestry. Logika stopnia RD spowoduje, że wartości argumentów zostaną pobrane nie z rejestrów $4 i $5, a z obejść.

Opóźnienie wynikające z dostępu do pamięci Zakładamy, że procesor został wyposażony w obejścia eliminujące hazard RAW Rozważmy sekwencję instrukcji lw $4 add $6, $5, $4 tym razem hazard RAW wynika z odwołania do pamięci dana odczytana z pamięci będzie dostępna w stopniu MEM obejścia redukują opóźnienie, ale go nie eliminują dana ze stopnia MEM może być przekazana obejściem kiedy instrukcja używająca danej jest w stopniu RD, instrukcja ładowana jest dopiero w stopniu ALU Dostęp do pamięci nastąpi w stopniu MEM. Obejście ze stopnia ALU nie może więc zawierać wyniku instrukcji ładowania. Wynik ten będzie dostępny na obejściu ze stopnia MEM, kiedy instrukcja ładowania znajdzie się w stopniu MEM. Nie ma możliwości przyspieszenia tej operacji, a obejścia nie są w stanie usunąć hazardu. Problem ten jest nazywany opóźnieniem pomiędzy załadowaniem danej z pamięci i jej użyciem (load-use penalty)

Opóźnienie wynikające z dostępu do pamięci Hazard wynikający z opóźnienia nie może zostać wyeliminowany bez opóźnień W MIPS R3000 instrukcja korzystająca z danej pobranej z pamięci nie może być umieszczona bezpośrednio za instrukcja ładowania Eliminacja hazardu wymaga wprowadzenia opóźnienia pomiędzy instrukcją ładowania i instrukcją korzystającą z załadowanych danych. zastosowano metodę administracyjną W późniejszych wersjach MIPS, w tym w architekturze MIPS32 hazard jest usuwany sprzętowo, poprzez wstrzymanie początku potoku

Instrukcje skoków w potoku Określenie warunku skoku i obliczenie adresu docelowego następuje w stopniu ALU, w połowie cyklu W tym czasie w stopniu RD przebywa już instrukcja zapisana w programie za instrukcją skoku Zmiana PC dokonana w stopniu ALU wpływa natychmiast na działanie stopnia IF, który pobiera instrukcję spod adresu docelowego skoku. W potoku znalazła się jednak już jedna instrukcja za instrukcją skoku. Instrukcja skoku może mieć wpływ dopiero na pobranie kolejnej instrukcji instrukcja pobrana po instrukcji skoku może zostać anulowana, ale zajmuje czas procesora Opóźnienie skoków w architekturze potokowej wynika z odległości pomiędzy stopniem, w którym następuje skok (ALU) i stopniem pobrania instrukcji W przypadku R3000 opóźnienie to wynosi jeden cykl.

Redukcja opóźnienia skoków w potoku Technika redukcji opóźnienia używana w krótkich potokach polega na zdefiniowaniu instrukcji skoku Skok opóźniony (delayed branch) - wykonaj instrukcję umieszczoną za skokiem i skocz Za skokiem można umieścić dowolną instrukcję, która ma być wykonana przed skokiem i od której nie zależy wykonanie skoku Miejsce za instrukcją skoku, zawierające instrukcje wykonywane niezależnie od realizacji skoku, nazywa się slotem opóźnienia (delay slot) Przy slocie opóźnienia o rozmiarze jednej instrukcji prawdopodobieństwo wypełnienia slotu przez kompilator użyteczną instrukcją jest rzędu 90% w razie braku takiej instrukcji w slocie umieszcza się instrukcję pustą

Wydajność potoku Teoretyczna wydajność potoku jeden cykl na instrukcję Czynniki powodujące opóźnienia wewnątrz potoku hazardy usuwane inaczej niż przez obejścia ładowanie danych z pamięci skoki na zewnątrz potoku dostępy do hierarchii pamięci, których realizacja wymaga > 1 cyklu Praktyczna wydajność osiągana przez procesory potokowe ok. 1,2 cyklu na instrukcję

Przyspieszenie potoku Wraz z ulepszaniem technologii półprzewodnikowej wzrasta dopuszczalna częstotliwość pracy układów. Przy wzroście częstotliwości pracy odwołania do pamięci nie mogą być wykonane w jednym cyklu każde odwołanie powoduje wstrzymanie potoku, przez co potok działa wolniej niż przy mniejszej częstotliwości Złożoności niektórych stopni potoku uniemożliwia podniesienie częstotliwości pracy Każda architektura potoku, wraz z otoczeniem (hierarchią pamięci) ma określoną częstotliwość graniczną, powyżej której albo procesor przestaje działać, albo stopnie wymiany z pamięcią muszą czekać dodatkowy cykl na zakończenie operacji. W efekcie przyspieszenie zegara jest albo niemożliwe, albo przynosi spadek wydajności zamiast jej wzrostu. Rozwiązaniem jest przebudowanie potoku poprzez zwiększenie liczby stopni i zmianę szczegółów współpracy z pamięcią Potok wydłużony o długości powyżej 6 stopni jest nazywany superpotokiem

Budowa super potoku MIPS R4000 MIPS R4000 posiada potok wydłużony do ośmiu stopni. Dwie najistotniejsze zmiany w stosunku do R3000 to rozbicie stopni współpracujących z hierarchiami pamięci na dwa stopnie w przypadku pobrania instrukcji i trzy stopnie dla odwołań do danych.

Superpotok MIPS R4000 R4000 1989 pierwszy mikroprocesor 64-bitowy Zgodny programowo na poziomie binarnym z R3000 Superpotok 8-stopniowy IF Instruction First początek pobierania Instrukcji IS Instruction Second zakończenie pobierania instrukcji RD read -odczyt argumentów EX Execute odpowiednik ALU w R3000 DF Data first początek odwołania do danych DS data second Zakończenie transakcji z pamięcią danych DTC Data Tag Check finalizacja odwołania WB Write Back zapis wyniku do rejestru

Wydajność superpotoków Większe i częstsze opóźnienia powodują, że wydajność wyrażona w cyklach na instrukcję jest gorsza niż w przypadku krótkich potoków typowa wydajność wynosi ok. 1,5 cyklu na instrukcję Większa wartość CPI jest kompensowana wzrostem częstotliwości pracy Przyrost wydajności wynikający z wydłużenia potoku przy zachowaniu parametrów technologicznych wynosi ok. 50%

Potokowa realizacja procesora CISC Architektura potokowa daje się łatwo zastosować, gdy: Sekwencja czynności jest stała dla wszystkich instrukcji niektóre fazy niektórych instrukcji mogą być puste Instrukcje maja stała długość i ich dekodowanie jest proste Instrukcja realizuje co najwyżej jedno odwołanie do pamięci danych Instrukcja ma jeden argument docelowy Postulaty te nie są spełnione w modelach programowych CISC Aby procesory CISC mogły konkurować z procesorami RISC pod względem wydajności, konieczne stało się opracowanie potokowych realizacji procesorów CISC. Możliwości realizacji potokowej CISC Budowa potoku zdolnego do wykonania instrukcji CISC podział procesora na dwie części jednostka pobierająca instrukcje CISC i transkodująca je na prymitywy RISC Jednostka wykonawcza RISC

Potok CISC Potok przebudowany tak, by mógł wykonywać instrukcje CISC kilka stopni na początku potoku zajmuje się pobraniem instrukcji dekodowaniem ich i wyliczaniem adresu efektywnego instrukcje o zmiennych długościach wymagają skomplikowanego dekodera, niekiedy działającego w kilku cyklach Stopień odczytu argumentów pobiera je z rejestrów lub pamięci Stopień wykonani o skomplikowanej budowie wykonuje poszczególne instrukcje w rożnej liczbie cykli stopień zapisu zapisuje wyniki do rejestru lub pamięci skomplikowany interfejs pamięci z dwiema ścieżkami dostępu Wydajność: średni czas wykonani instrukcji ok. 2 cykli potok często zatrzymuje się Przykłady: Intel i486, Motorola MC68040 koniec lat 80-tych

Potok CISC- Intel i486 Struktura poszczególnych stopni jest w tym przypadku dużo bardziej złożona, a poszczególne instrukcje mogą spędzać w niektórych stopniach po kilka, a nawet kilkadziesiąt cykli (dotyczy to zwłaszcza stopnia EX).

Procesor z transkodowaniem instrukcji Jednostka transkodująca pobiera instrukcje CISC i zamienia je na sekwencje instrukcji podobnych do RISC Dla prostych instrukcji translacja 1:1 nieco bardziej złożone instr. - zamieniane na 2:4 instr. RISC Instrukcje skomplikowane wykonywane jako procedury pobierane z pamięci ROM umieszczonej w procesorze Jednostka wykonawcza wykonuje instrukcje typu RISC różnice w stosunku do czystego RISC występujące w niektórych realizacjach instrukcje arytmetyczne z jednym odwołaniem do argumentu w pamięci Operacje stosowe (dwa argumenty docelowe w tym SP) Przykłady: pierwsze realizacje : NezGen Nx586, IDT C6 (1995..97) procesory x86 też działają na tej zasadzie

Procesor z transkodowaniem instrukcji IDT C6 Procesor IDT C6 jest najprostszym przykładem procesora x86 z transkodowaniem instrukcji. Proste instrukcje CISC są zamieniane w jedną lub kilka instrukcji RISC w stopniu translatora. Bardziej skomplikowane instrukcje są zamieniane na RISCową instrukcję wywołania procedury z wbudowanej pamięci ROM. Zwykłe instrukcje trafiają wprost z kolejki instrukcji do pamięci. Wywołania procedur powodują uruchomienie pobierania instrukcji RISCowych z pamięci ROM.

Od potoku do superskalara Idealna teoretyczna wydajność procesorów potokowych wynosi 1 CPI Procesor nie może wykonać instrukcji w ułamku cyklu, ale może wykonać więcej niż jedna instrukcję w czasie jednego cyklu Procesor taki musi mieć więcej niż jeden potok wykonawczy Procesory wielopotokowe są nazywane procesorami superskalarnymi lub superskalarami

Struktura procesora superskalarnego

Budowa i działanie procesora superskalarnego Pierwsze stopnie pobierają i dekodują równocześnie kilka instrukcji Stopień inicjujący wykonanie kieruje instrukcje do indywidualnych potoków wykonawczych każdy z potoków wykonuje po jednej instrukcji nie zawsze udaje się skierować instrukcje do każdego potoku Potoki wykonawcze wykonują pojedyncze instrukcje Stopień porządkujący decyduje o zatwierdzeniu wykonania instrukcji i modyfikacji widocznego programowo rejestru PC nieobecny w prostych superskalarach Stopień zapisu dokonuje nieodwracalnej modyfikacji kontekstu programowego (rejestrów i pamięci) w prostych superkalarach, bez stopnia porządkującego, stopnie zapisu są oddzielne dla poszczególnych potoków

Rodzaje procesorów superskalarnych Pseudosuperskalar np. Intel 860 1989 Superskalar z kolejnym wykonaniem instrukcji (in-order execution) np. Intel Pentium 1993 Superskalar z kolejnym rozpoczynaniem i niekolejnym kończeniem instrukcji (in-order issue, out-of-order completion) np. Cyrix Cx8x86 1994 Superskalar z niekolejnym wykonywaniem instrukcji (out-of-order execution) np. Intel Pentium Pro 1995 niemal wszystkie współczesne procesory uniwersalne

Pseudosuperskalar Procesor pseudosuperskalarny nie ma możliwości decydowania o równoczesnym wykonaniu instrukcji decyzję podejmuje programista lub kompilator informacja o możliwości równoczesnego wykonania zawarta w kodzie operacyjnym instrukcji Przykład - Intel 860 dwa potoki wykonawcze stałopozycyjny i zmiennopozycyjny instrukcje o długości 32 bitów, pobierane parami równoczesne wykonanie obu instrukcji w parze jest możliwe gdy: pierwsza jest stałopozycyjna, z druga -zmiennopozycyjna instrukcja zmiennopozycyjna na w kodzie operacyjnym ustawiony bit zezwolenia na równoległe wykonanie obie instrukcje wykonują się równocześnie nie występuje sytuacja, gdy jeden z potoków wykonawczych zatrzymuje się, a drugi kontynuuje pracę

Superskalar z kolejnym wykonaniem instrukcji Procesor decyduje o możliwości równoległego wykonania instrukcji wykonanie jest możliwe, gdy instrukcje nie zależą od instrukcji poprzedzających kierowanych do wykonania w tym samym cyklu liczba instrukcji kierowanych do wykonania zależny ponadto od liczby i rodzajów dostępnych potoków Poszczególne potoki mogą być identyczne, podobne bądź różne jeden potok wykonuje wszystkie instrukcje, drugi tylko prostsze (Intel Pentium) Oddzielne potoki dla różnych instrukcji, np. stałopozycyjnych, zmiennopozycyjnych, wymiany z pamięcią, skoków (np. SuperSPARC I, Alpha 21064) Potoki pracują synchronicznie - wstrzymanie jednego powoduje równoczesne wstrzymanie wszystkich

Superskalar z kolejnym wykonaniem instrukcji Kierowanie instrukcji do wykonania po równoległym pobraniu grupy kilku (2 lub 4) instrukcji są one kierowane do wykonania równocześnie lub jedna po drugiej, do czasu rozpoczęcia wykonywania wszystkich instrukcji z grupy, następnie rozpoczyna się kierowanie do wykonania instrukcji z następnej grupy np. Alpha 21064 wydajność zależy od ustawienia instrukcji w grupy łatwa konstrukcja stopnia szeregującego tzw. okno instrukcji w każdym cyklu stopień szeregujący ma do dyspozycji kilka instrukcji, z których co najmniej pierwsze kieruje do wykonania, w następnym cyklu następuje dobieranie instrukcji tak że w każdym cyklu można potencjalnie rozpocząć taką samą liczbę instrukcji np. Intel Pentium (P5) SuperSPARC I Większa wydajność opłacona komplikacja stopnia szeregującego

Superskalar z kolejnym rozpoczynaniem i niekolejnym kończeniem Instrukcje są pobierane i dekodowane po kilka sztuk w kolejności programowej Stopień szeregujący rozpoczyna wykonywanie w kolejności programowej Po skierowaniu instrukcji do potoków wstrzymanie jednego potoku nie powoduje wstrzymania pozostałych instrukcje mogą być kończone w innej kolejności od programowej Wzrost wydajności dzięki lepszemu wykorzystaniu potoków Przykład Cyrix 6x86 (1995) wydajność o ok. 30% wyższa od Intel P5 przy podobnej strukturze Problem Zmiana kolejności kończenia instrukcji może wprowadzać problemy synchronizacyjne O nich później

Superskalar z niekolejnym wykonaniem instrukcji Zdekodowane instrukcje są gromadzone w stopniu szeregującym Skierowanie instrukcji do wykonania zachodzi wtedy, gdy są gotowe argumenty źródłowe wykonanie może być rozpoczynane w kolejności innej niż programowa Dwa rozwiązania szeregowania centralny bufor instrukcji przed rozejściem na indywidualne potoki kosztowny w realizacji zapewnia równe obciążenie przy kilku identycznych potokach np. Intel P3, AMD k6 bufory w pierwszych stopniach potoków wykonawczych (tzw. stacje rezerwacyjne- algorytm Tomasulo) proste w realizacji ale powoduje suboptymalne wykorzystanie potoków np. AMD K5

Superskalar z niekolejnym wykonaniem instrukcji Procesor w każdej chwili musi mieć ważną wartość PC i tym samym instrukcję do której program został wykonany instrukcję uznaje się za ostatecznie wykonaną jeśli również wszystkie instrukcje ja poprzedzające zostały wykonane instrukcja po przejściu przez potoki wykonawcze trafia do stopnia RETIRE, gdzie oczekuje na zakończenie instrukcji poprzedzających przed ostatecznym zakończeniem wykonania instrukcja nie może w sposób trwały modyfikować kontekstu procesora ani pamięci Dwa ostatnie stopnie superskalara Oczekiwanie na zakończenie wykonania instrukcji poprzedzający nieodwracalna modyfikacja kontekstu Niemal wszystkie współczesne procesory do komputerów uniwersalnych wykonują instrukcje nie w kolejności np. AMD K8, Intel Pentium 4, Intel core