background image

Zestaw A

1. Omówić podstawową strukturę i działanie mikroprogramowanej jednostki sterującej.

 

 

Zbiór mikrorozkazów jest przechowywany w pamięci sterującej. Rejestr adresów sterowanie zawiera adres następnego mikrorozkazu, który 

ma być odczytany. Po odczytaniu mikrorozkazu z pamięci sterującej jest on przenoszony do buforowego rejestru sterowania. Lewa część tego  

rejestru jest połączona z liniami sterowania wychodzącymi z jednostki sterującej. Odczytanie mikrorozkazu z pamięci sterującej jest więc tym  

samym, co wykonanie tego mikrorozkazu. Trzecim elementem jest jednostka szeregująca, która ładuje rejestr adresu sterowania i wydaje 

rozkaz odczytu. Jednostka sterująca działa następująco: 

1. W celu wykonania rozkazu szeregująca jednostka logiczna wydaje rozkaz READ (odczyt) odnoszący się do pamięci sterującej.

2. Słowo, którego adres jest określony w rejestrze adresu sterowania jest wczytywane do buforowego rejestru sterowania.

3. Zawartość buforowego rejestru sterowania generuje sygnały sterujące oraz informacje o następnym adresie skierowaną do logicznej 

jednostki szeregowania.

4.

Logiczna jednostka szeregowania ładuje nowy adres do rejestru sterowania na podstawie informacji o następnym adresie uzyskanej z 

buforowego rejestru sterowania i na podstawie znaczników stanu ALU. 

2. Budowa mikrorozkazu w mikroprogramowanej jednostce sterującej. Metody realizacji rozgałęzień w mikroprogramie.

Mikrorozkaz poziomy: występuje w nim po jednym bicie na każdą wewnętrzną linię sterowania procesora i po jednym bicie na każdą linię 

sterowania magistrali systemowej. Występuje też pole warunku wskazujące warunek rozgałęzienia oraz pole adresu następnego mikrorozkazu,  

który ma być wykonywany, jeśli nastąpi rozgałęzienie. 

Schemat: 1. Adres mikrorozkazu, 2. Warunek stosu(bezwarunkowy, zero, przepełnienie, bit pośredniości), 3. Sygnały sterujące magistrali  

systemowej, 4. Wewnętrzne sygnały sterujące CPU

Mikrorozkaz pionowy schemat: 1. Adres mikrorozkazu, 2. Warunek skoku 3. Kody funkcji

Interpretacja: 1. W celu wykonania mikrorozkazu należy włączyć wszystkie linie sterowania wskazane przez bity 1 i pozostawić wyłączone 

wszystkie linie sterowania wskazane przez 0. Wynikające stąd sygnały sterujące spowodują wykonanie jednej lub wielu mikrooperacji. 2. Jeśli  

warunek wskazany przez bity warunku nie jest spełniony, to należy wykonać następny mikrorozkaz w sekwencji. 3. Jeśli warunek wskazany  

przez bity warunku jest spełniony, to następny mikrorozkaz przewidziany do wykonania jest wskazany w polu adresowym.

3. Zasady potokowego wykonywania rozkazów. Jakie problemy utrudniają wykonywanie rozkazów w potoku.

Przetwarzanie potokowe jest jednym ze sposobów sekwencyjnego (szeregowego) przetwarzania danych. Sposób działania: cykl przetwarzania 

dzieli się na odrębne bloki przetwarzania, z których każdy oprócz ostatniego jest połączony z następnym. Dane po przejściu przez jeden blok 

trafiają

 

do

 

następnego,

 

 

osiągną

 

ostatni

 

blok.

Potokowość –   technika   budowy   procesorów   polegająca  na   podziale   logiki   procesora   odpowiedzialnej  za   proces   wykonywania   programu 

(instrukcji procesora) na specjalizowane grupy w taki sposób, aby każda z grup wykonywała część pracy związanej z wykonaniem rozkazu. 

Grupy te są połączone sekwencyjnie – potok– i wykonują pracę równocześnie, pobierając dane od poprzedniego elementu w sekwencji. W 

każdej z tych grup rozkaz jest na innym stadium wykonania. Można to porównać do taśmy produkcyjnej.

Zasady potokowego wykonywania rozkazów:

Pobranie instrukcji z pamięci 

Zdekodowanie instrukcji 

Wykonanie instrukcji 

Dostęp do pamięci 

Zapisanie wyników działania instrukcji 

Podstawowym mankamentem techniki potoku są rozkazy skoku, powodujące w najgorszym wypadku potrzebę przeczyszczenia całego potoku i 

wycofania  rozkazów, które następowały zaraz po  instrukcji skoku  i rozpoczęcie zapełniania  potoku  od początku  od adresu, do  którego  

następował skok. Taki rozkaz skoku może powodować ogromne opóźnienia w wykonywaniu programu – tym większe, im większa jest długość  

background image

potoku. Dodatkowo szacuje się, że dla modelu programowego x86 taki skok występuje co kilkanaście rozkazów. Z tego powodu niektóre 

architektury programowe (np. SPARC) zakładały zawsze wykonanie jednego lub większej ilości rozkazów następujących po rozkazie skoku,  

tzw. skok opóźniony. Stosuje się także skomplikowane metody predykcji skoku lub metody programowania bez użycia skoków.

4. Omówić metody przewidywania rozgałęzień w przetwarzaniu potokowym rozkazów.

 1. Przewidywanie nigdy nienastępującego rozgałęzienia, rozwiązanie statyczne, przewiduje się że nigdy nie nastąpi rozgałęzienie i są pobierane 

kolejne rozkazy ( sekwencja)

2. Przewidywanie zawsze następującego rozgałęzienia - statyczne rozwiązanie, przewiduje się że zawsze nastąpi rozgałęzienie i pobiera się  

rozkaz w celu rozgałęzienia

3. Przewidywanie za pomocą kodu operacji - rozwiązanie statyczne, podejmuje się decyzje czy pobrać rozkaz w celu rozgałęzienia czy kolejny 

rozkaz z sekwencji na podstawie kodu operacji, to przy jakim kodzie ma być nacisk na rozgałęzienie jest z góry ustalone ( przez projektanta(?) )

4. Przełącznik nastąpiło/nie nastąpiło - dynamiczne rozwiązanie, przechowuje się w pamięci tymczasowej bit związany z danym rozkazem, na  

podstawie historii ( wyniku poprzedniego  uruchomienia tego  rozkazu ) podejmuje się odpowiednia decyzje(, z czasem udoskonalono to 

rozwiązanie stosując dwa bity)

5. Tablica historii rozgałęzień - dynamiczne rozwiązanie, tablica złożona z 3 kolumn ( adres rozkazu, pewna liczba bitów historii, informacja o  

rozkazie docelowym lub adres rozkazu docelowego, ewentualnie sam rozkaz docelowy) umieszczona w malej pamięci podręcznej.

5. Omówić cechy procesorów RISC w porównaniu z procesorami CISC.

 Podstawowe cechy architektury RISC to:

Zredukowana liczba rozkazów do niezbędnego minimum. Ich liczba wynosi kilkadziesiąt, podczas gdy w procesorach CISC sięga setek. 

Upraszcza to znacznie dekoder rozkazów.

Redukcja trybów adresowania, dzięki czemu kody rozkazów są prostsze, bardziej zunifikowane, co dodatkowo upraszcza wspomniany 

wcześniej dekoder rozkazów. Ponadto wprowadzono tryb adresowania, który ogranicza ilość przesłań

Zwiększenie liczby rejestrów (np. 32, 192, 256, podczas gdy np. w architekturze x86 jest zaledwie 8 rejestrów), co również ma wpływ na 

zmniejszenie liczby odwołań do pamięci.

Dzięki rozbiciu przetwarzania rozkazu na kilka prostych etapów, które mogą być wykonywane przez stosunkowo proste i w znacznym stopniu 

autonomiczne jednostki, bardziej nadające się do zrealizowania w nowocześniejszej technologii niż złożona i bardziej związana struktura 

procesora CISC, łatwiej można skonstruować CPU z większą częstotliwością zegara taktującego. Dlatego procesory RISC są dużo wydajniejsze od 

procesorów CISC

6. Omówić argumenty przemawiające za stosowaniem procesorów CISC.

- łatwiejszy proces kompilacji

- długość kodu jest niewielka, wiec nie potrzeba dużej ilości pamięci RAM do przechowywania instrukcji

- niewielka liczba instrukcji potrzebna do wykonania określonego zadania, co pozwala na wydajniejsze zarządzanie pamięcią

- kompatybilność w gore , nowy procesor będzie zawierał zestaw instrukcji poprzednika

7. Omówić argumenty przemawiające za stosowaniem procesorów RISC.

 - Przez zastosowanie architektury potokowej uzyskujemy w procesorach RISC możliwość wykonywania rozkazów w jednym cyklu zegara

- Zastosowanie architektury load/store (ładuj/zapisz), czyli rozdzielenie rozkazów operujących na pamięci od reszty rozkazów

- Zwiększenie liczby rejestrów

- Szybsze wykonywanie instrukcji

- Łatwiejsza realizacja sterowania

- Możliwość osiągnięcia wyższego taktowania , co przekłada sie na wyższą wydajność

8. Na czym polega optymalizacja wykorzystania rejestrów w procesorach RISC.

 Optymalizacja wykorzystania rejestrów wykonywana na etapie kompilacji:

- Gdy rejestrów jest niewiele (16-32)

- Przyporządkowanie wybranych zmiennych do symbolicznych rejestrów

- Odwzorowanie symbolicznych rejestrów w fizyczne rejestry

- Symboliczne rejestry, których czas życia nie nakłada się mogą być odwzorowane w jeden rejestr fizyczny

- Gdy brakuje fizycznych rejestrów, niektóre symboliczne rejestry musza być odwzorowane w pamięci

W skrócie: Optymalizowane za pomocą kolorowania grafu(Jeden rejestr przypisany do wielu zmiennych które nie są wykorzystywane w tym  

samym czasie)

9. Zasada przetwarzania superskalarnego. Problemy utrudniające realizację superskalarnego wykonywania programów.

 Technika przetwarzania superskalarnego polega na zastosowaniu kilku działających równolegle potoków przetwarzających dane skalarne, co 

pozwala

 

na

 

wykonywanie

 

więcej

 

niż

 

jednego

 

rozkazu

 

w

 

jednym

 

cyklu

 

zegara.

Dzięki równoległemu wykonywaniu rozkazów, możliwe jest wykonywanie instrukcji całkowitoliczbowych w obu potokach w jednym cyklu  

rozkazowym.

Podstawową   trudnością   w   realizacji   przetwarzania   superskalarnego   jest   wzajemna   współzależność   rozkazów   wykonywanych   w 

poszczególnych potokach, wynikająca m.in. z rozgałęzień oraz uzależnień i konfliktów w dostępie do zasobów.

10. Omówić zasady szeregowanie rozkazów w przetwarzaniu superskalarnym.

 Ogólnie   rzecz   biorąc   superskalarne   strategie   wydawania   rozkazów   możemy   podzielić   na   następujące   kategorie:  

·         kolejne wydawanie połączone z kolejnym kończeniem;

·         kolejne wydawanie połączone z kończeniem w zmienionej kolejności;

·         wydawanie w zmienionej kolejności połączone z kończeniem w zmienionej kolejności.

Najprostszą strategią wydawania rozkazów jest wydawanie ich w dokładnej kolejności zgodnej z wykonywaniem sekwencyjnym (kolejne 

wydawanie) i zapisywanie wyników w tej samej kolejności (kolejne kończenie). Nawet skalarne potoki nie dopuszczają tak uproszczonej  

strategii.   Jest   jednak   użyteczne   rozważenie   tej   strategii   jako   podstawy   do   porównywania   bardziej   wyrafinowanych   rozwiązań  

Przy zmienionej kolejności kończenia w określonym czasie na etapie wykonywania może się znajdować dowolna liczba rozkazów, aż do  

osiągnięcia   maksymalnego   stopnia   paralelizmu   maszynowego   we   wszystkich   jednostkach   funkcjonalnych.   Wydawanie   rozkazów   jest 

zatrzymywane   w   wyniku   konfliktu   dotyczącego   zasobów,   zależności   danych   lub   zależności   proceduralnej.

 

W przypadku kolejnego wydawania rozkazów procesor jedynie dekoduje rozkazy aż do wystąpienia zależności lub konfliktu. Żadne nowe 

rozkazy nie są dekodowane, dopóki konflikt nie jest rozstrzygnięty. W rezultacie procesor nie może wyprzedzić punktu konfliktu w celu 

background image

znalezienia następnych rozkazów, które mogą być niezależne od rozkazów znajdujących się już w potoku i które mogą być z pożytkiem 

wprowadzone   do   potoku.   Aby   umożliwić   wydawanie   rozkazów   w   zmienionej   kolejności,   konieczne

 

jest rozłączenie etapów dekodowania i wykonywania w potoku. Czyni się to za pomocą bufora nazywanego oknem rozkazu. Przy takiej 

organizacji, rozkaz po zdekodowaniu przez procesor jest umieszczany w oknie rozkazu. Dopóki bufor ten nie jest zapełniony, procesor może  

kontynuować pobieranie i dekodowanie nowych rozkazów. Gdy jednostka funkcjonalna na etapie wykonywania staje się osiągalna, rozkaz może  

być wydany z okna rozkazu do etapu wykonywania. Może być wydany dowolny rozkaz pod warunkiem, że (a) potrzebuje on określonej  

jednostki funkcjonalnej, która jest osiągalna, oraz (b) żaden konflikt lub zależność nie blokuje tego rozkazu. 

11. Omówić klasyfikację Flynna architektur komputerowych.

Taksonomia Flynna jest klasyfikacją architektur komputerowych, zaproponowaną w latach sześćdziesiątych XX wieku przez Michaela Flynna, 

opierająca się na liczbie przetwarzanych strumieni danych i strumieni rozkazów. W taksonomii tej wyróżnia się cztery grupy:

SISD (Single Instruction, Single Data) - przetwarzany jest jeden strumień danych przez jeden wykonywany program - komputery skalarne 

(sekwencyjne).

SIMD (Single Instruction, Multiple Data) - przetwarzanych jest wiele strumieni danych przez jeden wykonywany program - tzw. komputery 

wektorowe.

MISD (Multiple Instruction, Single Data) - wiele równolegle wykonywanych programów przetwarza jednocześnie jeden wspólny strumień 

danych. W zasadzie jedynym zastosowaniem są systemy wykorzystujące redundancję (wielokrotne wykonywanie tych samych obliczeń) do 

minimalizacji błędów.

MIMD (Multiple Instruction, Multiple Data) - równolegle wykonywanych jest wiele programów, z których każdy przetwarza własne strumienie 

danych - przykładem mogą być komputery wieloprocesorowe, a także klastry i gridy.

12. Na czym polega przetwarzanie wektorowe? Podać przykładowe zastosowania. Jak jest to realizowane w procesorach.

Superkomputery służą do wykonywania przetwarzań wektorowych. Program, który powtarzalnie wykonuje zmiennopozycyjne operacje na  

arytmetyczne na dużych tablicach liczb. Symulacja pola ciągłego. Sytuacja fizyczna może być opisana przez powierzchnię lub obszar w trzech 

wymiarach. Powierzchnia ta jest aproksymowana przez siatkę punktów. Zbiór równań różniczkowych określa fizyczne zachowanie powierzchni  

w każdym punkcie. Równania są reprezentowane jako tablice wartości i współczynników, a rozwiązanie polega na powtarzaniu operacji 

arytmetycznych na tablicach danych.

Zastosowanie:   rzeczywiste   problemy   w   procesach   aerodynamicznych,   sejsmologicznych,   meteorologicznych,   fizyce   atomowej,   jądrowej, 

plazmowej.

Założenie   przetwarzania:   jest   możliwe   operowanie   na   jednowymiarowych   wektorach   danych.   Notacja   (J=1,N)   wskazuje,   że   operacje   na 

wszystkich elementach J w danym przedziale powinny być przeprowadzone jako jedna operacja. 

Przykład:

DO 100 I = 1,N

C(I,J) = 0,0 (J=1,N)

DO 100K = 1,N

C(I,J)=C(I,J)+A(I,K)+B(K,J)(J=1,N)

100 CONTINUE

Realizacja w procesorach: 1. ALU z przetwarzaniem potokowym, 2. Równolegle ALU 3. Równoległe procesory

13. Cechy i możliwe organizacje architektury SMP

W   klasycznych   wieloprocesorowych   serwerach   wykorzystuje   się   tzw.   architekturę   SMP   (Symmetric   MultiProcessing),   która   pozwala   na 

symetryczne przetwarzanie danych jednocześnie na kilku procesorach. Procesory te współdzielą ze sobą zasoby pamięci (pamięć operacyjną 

RAM i pamięć masową – np. dyski twarde) oraz interfejsy I/O. Co ważne, procesory w architekturze SMP komunikują się ze sobą za pomocą 

wspólnej magistrali systemowej, a przydział procesorów dla poszczególnych zadań (wątków, ang. thread) realizowany jest przez system 

operacyjny. Oznacza to, że system musi być przystosowany do dzielenia zadań na fragmenty i rozdzieleniem ich na wiele procesorów. Zaletą  

architektury SMP jest jej prosta sprzętowa implementacja i prosty model programowy.

Największymi ograniczeniami wielordzeniowej architektury  SMP jest skończona skalowalność, wynikająca z "rywalizacji" poszczególnych  

rdzeni o zasoby pamięci operacyjnej i zasoby I/O, a także fizyczną przepustowość magistrali systemowej, za pomocą której komunikują się  

rdzenie ze sobą i wykorzystywaną wspólnie pamięć cache.

SMP (ang. Symmetric Multiprocessing, przetwarzanie symetryczne) - architektura komputerowa, która pozwala na znaczne zwiększenie mocy  

obliczeniowej   systemu   komputerowego   poprzez   wykorzystanie   2   lub   więcej   procesorów   do   jednoczesnego   wykonywania   zadań.

Cechy:

Procesory o porównywalnych możliwościach

Procesory współdzielą pamięć i urządzenia we/wy

Procesory połączone wspólna szyna lub innymi wewnętrznym połączeniami

Wszystkie procesory maja zbliżony czas dostępu do pamięci

Wszystkie procesory mogą wykonywać takie same funkcje (tzn.sa symetryczne)

Komputer jest sterowany przez zintegrowany system operacyjny

Możliwe organizacje:

Magistrala z podziałem czasu

Pamięć wieloportowa

Z centralna jednostka sterującą

14. Na czym polega problem spójności pamięci podręcznej. W jakich architekturach występuje. Jak się ten problem rozwiązuje.

Na czym polega:

We współczesnych systemach wieloprocesorowych z każdym procesorem jest zwykle związana jedno lub dwupoziomowa pamięć podręczna. 

Organizacja taka ma zasadnicze znaczenie dla uzyskania rozsądnej wydajności. Powoduje ona jednak powstanie problemu  znanego  jako  

problem spójności pamięci podręcznych. Istota tego problemu jest następująca: wiele kopii tych samych danych może jednocześnie występować 

w rożnych pamięciach podręcznych i jeśli procesory mogą swobodnie aktualizować własne kopie, to w rezultacie może powstać niespójny  

obraz pamięci.

W jakich architekturach występuje:

-Występuje w architekturach SMP

background image

Jak się ten problem rozwiązuje

Rozwiązania programowe:

-Obsługa przez kompilator i system operacyjny: 

(polegają na analizie programów wykonywanych przez układy wieloprocesorowe już w fazie kompilacji i określaniu, które przetwarzane przez  

nie dane są narażone na niespójność. System operacyjny i sam program zapobiega kierowaniu takich danych do pamięci podręcznych - każdy 

procesor musi je odczytywać zawsze z pamięci głównej (pomijając cache) i tam zapisywać ich zmiany)

Rozwiązania sprzętowe:

-Protokoły spójności cache:

-Protokoły katalogowe - to jedno z rozwiązań sprzętowych. Polega na wprowadzeniu tak zwanego katalogu pamięci i specjalnego sterownika,  

który   zapisuje   w   nim   aktualne   informacje   o   kopiach   danych   przechowywanych   przez   różne   procesory

-Protokoły podglądania - stanowią kolejne rozwiązanie sprzętowe, w którym odpowiedzialność za utrzymanie spójności danych rozkłada się na  

wszystkie sterowniki pamięci podręcznych.

15. Klastry: cechy, wady i zalety oraz możliwe organizacje.

Klaster (ang. cluster) – grupa połączonych jednostek komputerowych, które współpracują ze sobą w celu udostępnienia zintegrowanego  

środowiska pracy. Komputery połączone taką siecią stanowią więc zazwyczaj jeden spójny system udostępniający usługi użytkownikom.  

Określenie kompletny komputer oznacza system zdolny do pracy samodzielnej - po za klastrem; w literaturze każdy komputer w kastrze jest  

zwykle określany jako węzeł.

Zalety

- skalowalność bezwzględna ( jest możliwe tworzenie wielkich klastrów, które daleko przekraczają możliwości nawet największych maszyn 

samodzielnych.   Klaster   może   zawierać   dziesiątki   komputerów,   z   których   każdy   jest   wieloprocesorem.

- Skalowalność przyrostowa ( klastry są konfigurowane tak, ze jest możliwe dodawanie do nich nowych systemów w postaci niewielkich 

przyrostów.   Użytkownik   może   zatem   rozpocząć   od   systemu   o   umiarkowanych   rozmiarach   i   poszerzać   go   stosownie   do   potrzeb,   bez 

konieczności dokonywania poważnej modernizacji polegającej na zastępowaniu niewielkiego systemu większym)

- wysoka dostępność (odporność na uszkodzenia) (ponieważ każdy węzeł klastra jest samodzielnym komputerem, uszkodzenie jednego węzła  

nie oznacza utraty możliwości obsługi. W wielu produktach odpowiednie zmiany są dokonywane automatycznie dzięki oprogramowaniu)

-   korzystny   stosunek   koszt/wydajność   (dzięki   stosowaniu   typowych   składników   dostępnych   w   handlu,   jest   możliwe   złożenie   klastra   o  

zdolności   obliczeniowej   co   najmniej   takiej   samej,   jak   pojedynczego,   dużego   komputera,   przy   znacznie   mniejszym   koszcie)

Wady

-Większa podatność na awarie

-Większa złożoność i pracochłonność projektu

Organizacje klastrow

- Rezerwa bierna (dodatkowy serwer przejmuje zadania w przypadku uszkodzenia serwera podstawowego)

- Dodatkowy serwer czynny (dodatkowy serwer również służy do przetwarzania)

- Odrębne serwery (odbrebne serwery dysponują własnymi dyskami. Dane są ciągle kopiowane z serwera podstawowego do dodatkowego)

- Serwery połączone z dyskami (serwery są połączone z tymi samymi dyskami, jednak każdy z nich ma własne dyski. Gdy jeden serwer ulega  

uszkodzeniu, dyski są przejmowane przez drugi serwer)

- Serwery współużytkujące dyski (wiele serwerów jednocześnie ma dostęp do dysków)

16. Zadania i cechy oprogramowania zarządzającego klastrem.

 W każdym komputerze zainstalowana jest warstwa oprogramowania pośredniego, umożliwiająca działanie w klastrze. Oprogramowanie to 

zapewnia   użytkownikowi   obraz   jednolitego   systemu.   Jest   ono   również   odpowiedzialne   za   zapewnianie   wysokiej   dostępności   przez 

równoważenie obciążenia i reagowanie na uszkodzenia poszczególnych składników.

Pożądane funkcje i usługi

- Pojedynczy punkt wejściowy (użytkownik loguje sie do klastra, a nie do pojedynczego komputera)

- Pojedyncza hierarchia plików (użytkownik postrzega jedna hierarchie katalogów, należącą do tego samego katalogu głównego)

-   Pojedynczy   punkt   sterowania   (istnieje   domyślna   stacja   robocza   służąca   do   zarządzania   klastrem   i   sterowania   nim)

- Pojedyncza sieć wirtualna (dowolny węzeł ma dostęp do dowolnego punktu klastra, jeśli nawet rzeczywista konfiguracja klastra może sie  

składacz

 

wielu

 

połączonych

 

ze

 

sobą

 

sieci.

 

Działanie

 

wirtualnej

 

sieci

 

jest

 

jednolite)

- Pojedyncza przestrzeń pamięci (rozproszona pamięć współużytkowana umożliwia wspólne używanie zmiennych przez rożne programy)

- Pojedynczy system zarządzania zadaniami (dzięki klastrowemu  programowi szeregującemu użytkownik  może przedkładać zadanie bez  

określania komputera, który ma je wykonać)

-   Pojedynczy   interfejs   użytkownika   (wspólny   interfejs   graficzny   obsługuje   wszystkich   użytkowników,   niezależnie   od   stacji   roboczej,   za  

pośrednictwem której posługują sie oni klastrem)

- Pojedyncza przestrzeń we/wy (dowolny węzeł może dysponować zdalnym dostępem do dowolnego urządzenia peryferyjnego lub dysku bez  

znajomości jego lokalizacji fizycznej)

- Pojedyncza przestrzeń procesów (używany jest jednolity system identyfikowania procesów. Proces realizowany w jednym węźle może sie  

komunikowac z dowolnym procesem w wezle odleglym)

- Wprowadzanie punktów kontrolnych (polega na okresowym zapisywaniu stanu procesu i pośrednich wyników obliczeń w celu umożliwienia  

przywracania stanu po uszkodzeniu)

- Migracja procesów (funkcja ta umożliwia równoważenie obciążenia)

17. Cechy architektury CC-NUMA.

 Charakteryzuje   się   niejednorodnym   dostępem   do   pamięci,   ze   spójną   pamięcią   podręczną,   udostępnia   użytkownikowi   spójną   logicznie 

przestrzeń adresową, pomimo tego, że pamięć jest fizycznie podzielona.

W   CC-NUMA   pamięci   podręczne   muszą   być   spójne.   Spójność   ta   jest   zrealizowana   za   pomocą   dodatkowego   sprzętu   oraz   protokołu. 

Wykorzystywany do tego jest katalog czyli dodatkowa pamięć, która służy do zapamiętywania faktu pobrania danych z pamięci i przesłania ich  

do węzła lub w bardziej skomplikowanych przypadkach miejsca pobytu wszystkich kopii danych.

18. Omówić cechy architektury wspierające system operacyjny.

   Cechy sprzętowe:

 

 

-Ochrona pamięci 

background image

(Wykorzystanie programu użytkownika nie może powodować zmian w obszarze pamięci zajętym przez program zarządzający. Jeśli występują  

takie usiłowanie , to procesor wykrywa błąd i przekazuje sterowanie programowi zarządzającemu. Program ten porzuca zadanie , drukuje 

komunikat o bledzie i ładuje następne zadanie

-Czasomierz  

(Czasomierz jest używany do zapobiegania monopolizacji systemu przez pojedyncze zadanie. Jest on ustawiany na początku każdego zadania.  

Po dojściu do określonego wskazania, następuje przerwanie i sterowanie wraca do programu zarządzającego.

-Rozkazy uprzywilejowane 

(Pewne rozkazy są oznaczone jako uprzywilejowane i mogą być wykonywane tylko  przez program zarządzający. Nałęża do nich rozkazy  

wyjścia-wejścia.   Zapobiega   to   na   przykład   temu,   żeby   program   użytkownika   przypadkowo   przyjął   rozkazy   sterowania   pochodzące   z 

następnego   zadania.   Jeśli   z   programu   użytkownika   wynika   potrzeba   operacji   wyjścia-wejścia,   to   musi   on   zwrócić   sie   do   programu  

zarządzającego, aby ten wykonał w jego imieniu te operacje. Jeśli procesor napotka rozkaz uprzywilejowany podczas wykonywania programu 

użytkownika, to traktuje to jako błąd i przekazuje sterowanie programowi zarządzającemu.

-Przerwania

(Wczesne modele komputerów nie dysponowały ta zdolnością. Właściwość ta daje systemowi operacyjnemu większa elastyczność, jeśli chodzi  

o rezygnowanie ze sterowania i przejmowanie go od programów użytkowych)

 

background image

Zestaw B

1. Mikroprogramowanie poziome a mikroprogramowanie pionowe. Metody minimalizacji długości słowa mikrorozkazu.

 

2. Metody wyznaczania adresu następnej mikroinstrukcji w mikroprogramowanej jednostce sterującej.

Trzy kategorie metod: 1. Dwa pola adresowe. 2. Jedno pole adresowe. 3. Format zmienny.

Najprostszym rozwiązaniem jest uwzględnienie dwóch pól adresowych w każdym mikrorozkazie. Np. rys. 17.6 Występuje multiplekser służący 

jako miejsce docelowe obu pól adresowych i zawartości rejestru rozkazu. Na podstawie wejścia wyboru adres multiplekser przekazuje do  

rejestru sterowania CAR albo kod operacji, albo jeden z dwóch adresów. Zawartość rejestru CAR jest następnie dekodowana w celu utworzenia 

adresu następnego mikrorozkazu. 

Jedno pole adresowe, opcje: pole adresowe, kod rejestru rozkazu, następny adres w sekwencji. Sygnały wyboru adresu określają, która z tych 

pozycji zostanie wybrana. Rozwiązanie to powoduje zredukowanie liczby pól adresowych do jednego. 

 Innym rozwiązaniem jest przyjęcie dwóch całkowicie różnych formatów mikrorozkazu. Za pomocą jednego bitu określa się, który format  

będzie używany. W jednym formacie pozostałe bity są używane do aktywowania sygnałów sterujących. W drugim formacie niektóre bity sterują  

modułem logicznym rozgałęzienia, a pozostałe dostarczają adres. 

3. Omówić i porównać metody optymalizacji rozgałęzień w potokowym wykonywania rozkazów.

   1. Zwielokrotnienie strumienia

 

 

W przypadku prostego potoku występują straty spowodowane przez rozkaz rozgałęzienia, ponieważ konieczne jest wybranie jednego z dwóch  

możliwych rozkazów i wybór ten może się okazać niewłaściwy. Rozwiązaniem jest powielenie początkowych części potoku i umożliwienie  

równoczesnego pobrania obu rozkazów za pomocą dwóch strumieni. 

2. Pobieranie docelowego rozkazu z wyprzedzeniem

Gdy   rozpoznawszy   jest   rozkaz   rozgałęzienia   warunkowego,   następuje   wyprzedzające   pobranie   rozkazu   docelowego   razem   z   rozkazem 

następującym po rozgałęzieniu. Rozkaz docelowy jest następnie zachowywany aż do czasu wykonania rozkazu rozgałęzienia. W momencie 

rozgałęzienia rozkaz docelowy jest już pobrany.

3. Bufor pętli

Jest mała, bardzo szybką pamięcią związaną z etapem pobierania rozkazów potoku. Zawiera on kolejno n ostatnio pobieranych rozkazów. Jeśli  

ma nastąpić  rozgałęzienie, sprawdza się najpierw, czy cel rozgałęzienia znajduje się wewnątrz bufora. Jeśli tak, to następny rozkaz jest  

pobierany z bufora. Stosowanie bufora pętli ma trzy zalety: 

a) Dzięki pobieraniu z wyprzedzaniem buforu pętli zawiera pewne rozkazy następujące po kolei po adresie pobrania bieżącego rozkazu. 

Wobec tego kolejno pobierane rozkazy będą dostępne bez straty czasu wymaganego na dostęp do pamięci.

b) Jeśli następuje rozgałęzienie do rozkazu znajdującego się o kilka pozycji dalej od adresu rozgałęzienia, to rozkaz docelowy będzie się 

już znajdował w buforze . 

c) Taki sposób postępowania jest szczególnie przydatny w operowaniu pętlami. Jeżeli bufor jest dostatecznie pojemy, aby zmieścić  

wszystkie rozkazy składające się na pętlę, to rozkazy te musza być pobrane tylko raz, przy pierwszej iteracji. W przypadku następnej  

iteracji wszystkie potrzebne rozkazy będą się już tam znajdowały w buforze.

4. Przewidywanie rozgałęzień

Metody: przewidywanie nigdy nie następującego rozgałęzienia, przewidywanie zawsze następującego rozgałęzienia, przewidywanie za pomocą  

kodu operacji, przełącznik nastąpiło/nie nastąpiło, tablica historii rozgałęzień.

Pierwsze trzy – stateczne, nie zależą one od historii poprzedzającej rozkaz rozgałęzienia warunkowego. Ostatnie dwa są dynamiczne: zależą od  

historii. 

5. Opóźnione rozgałęzienie

Możliwe jest poprawienie wydajności potoku za pomocą automatycznej zmiany porządku rozkazu wewnątrz rozkazu wewnątrz programu, tak 

żeby rozkazy rozgałęzienia występowały później.

4. Omówić zasadę działania okien rejestrów.

Koncepcja ta jest zilustrowana na rysunku 13.1. W dowolnej chwili widzialne i adresowalne jest tylko jedno okno rejestrów, tak jak gdyby  

istniał tylko jeden zestaw rejestrów (o adresach np. od – do N-1). Okno jest podzielone na trzy obszary o stałych rozmiarach. W rejestrach  

parametrów przechowuje się parametry przekazane przez procedurę, która spowodowała wywołanie bieżącej procedury, oraz wyniki, które 

mają być przekazane z powrotem. Rejestry lokalne są używane do przechowywania zmiennych lokalnych przypisanych przez kompilator. 

Rejestry tymczasowe służą do wymiany parametrów i wyników z następnym niższym poziomem (z procedurą wywołaną przez procedurę  

bieżącą). Rejestry tymczasowe jednego poziomu są fizycznie tymi samymi rejestrami co rejestry parametrów następnego niższego poziomu. To 

nakładanie się umożliwia przekazywanie parametrów bez rzeczywistego przenoszenia danych. 

 

Wydawałoby się, że w celu sprostania dowolnym możliwym układom wywołań i powrotów liczba okien rejestrów powinna być nieograniczona. 

W rzeczywistości okna rejestrów  mogą być  używane do  przechowywania argumentów  kilku  ostatnio  wywołanych procedur.  Argumenty  

starszych procedur musza być zapisywane w pamięci oraz odtwarzane później, gdy maleje głębokość zagnieżdżenia. Wobec tego rzeczywista 

organizacja tablicy rejestrów ma charakter cyklicznego bufora złożonego z nakładających się częściowo okien. 

5. Omówić zadania optymalizacyjne kompilatora dla procesorów RISC.

 

6. Omówić cechy architektury RISC ułatwiające stosowanie przetwarzania potokowego.

background image

Większość   rozkazów   jest   typu   rejestr-rejestr,   a   cykl   rozkazu   ma   następujące  dwie   fazy:  I.  Pobranie   rozkazu.  E.  Wykonanie   rozkazu. 

Wykonywania jest operacja ALU, przy czym dane wejściowe pobierane z rejestrów i do rejestrów są kierowane wyniki. 

W przypadku operacji ładowania i zapisu są  trzy fazy:  I.  Pobranie rozkazu.  E. Wykonanie rozkazu. Obliczenie adresu pamięci.  D.  Pamięć. 

Operacja rejestr-pamięć lub pamięć-rejestr.

Nawet bardzo  proste przetwarzania potokowe może istotnie zwiększyć  wydajność. Na rysunku  13.6b jest pokazany 2-etapowy schemat  

przetwarzania potokowego, w którym fazy I oraz E dwóch różnych rozkazów są realizowane równocześnie. Rozwiązanie to może umożliwić  

niemal dwukrotne zwiększenie szybkości wykonywania rozkazów w porównaniu ze schematem szeregowym. Dwa problemy uniemożliwiające  

osiągniecie maksymalnego przyspieszenia. Po pierwsze zakładamy, że jest stosowana pamięć z jednym portem i w określonej fazie jest możliwy 

tylko jeden dostęp do pamięci. Wymaga to uwzględnienia stanu oczekiwania w przypadku niektórych rozkazów. Po drugie, rozkaz rozgałęzienia  

przerywa szeregowy proces wykonywania. W celu dostosowania się do tych ograniczeń przy minimalnej rozbudowie układów, za pomocą 

kompilatora lub asemblera w strumieniu rozkazów można umieścić rozkaz NOOP. Dalszą poprawę przetwarzania potokowego można uzyskać  

przez umożliwienie dwóch dostępów do pamięci w ciągu tej samej fazy. Prowadzi to do sekwencji pokazanej na rys. 13.6c. Teraz możę  

występować nakładanie się do 3 rozkazów, a poprawa wydajności może być nawet 3-krotna. I znów rozkazy rozgałęziania powodują niepełne  

wykorzystanie możliwości przyspieszenia. Zauważmy, że zależność między danymi również wywierają pewien wpływ. Jeśli rozkaz wymaga  

argumentu, który został zmieniony przez poprzedni rozkaz, jest potrzebne opóźnienie. Podobne jak poprzednio, można się do tego dostosować  

za pomocą rozkazu NOOP. Przetwarzanie potokowe przedstawione wcześniej funkcjonuje najlepiej, jeśli trzy fazy trwają w przybliżeniu tyle 

samo. Ponieważ faza E obejmuje zwykle operacje ALU, może być ona dłuższa. Możemy ją podzielić na podfazy: E1. Odczyt pliku z rejestru. E2. 

Operacja ALU i zapis w rejestrze. 

Ze względu na prostotę i regularność listy rozkazów, zaprojektowanie schematu 3- lub 4-fazowego jest łatwe. W określonej chwili w trakcie 

wykonywania może się znajdować do 4 rozkazów, co daje maksymalny potencjalny czynnik przyspieszenia równy 4. W celu dostosowania się  

do opóźnień, spowodowanych przez rozgałęzienie i zależność danych, znów są potrzebne rozkazy NOOP.

 

7. Jak rozwiązać problem prawdziwej zależności danych w przetwarzaniu superskalarnym. Podać przykład.

 Rozważmy następującą sekwencję rozkazów:

add rl, r2 ;

ładuj rejestr r l zawartością rejestru r2 plus zawartość r l

move r3, rl ;

ładuj rejestr r3 zawartością rl

Drugi rozkaz może być pobrany i zdekodowany, jednak nie może być wykonany, zanim nie zostanie wykonany pierwszy rozkaz. Powodem jest  

to, że drugi rozkaz potrzebuje danych tworzonych za pomocą pierwszego rozkazu.

Sytuacja taka jest określana jako prawdziwa zależność danych (nazywana również zależnością przepływu lub zależnością zapis-odczyt).

Na rysunku 13.2 jest zilustrowana ta zależność w maszynie superskalarne stopnia 2. Gdy nie występuje zależność, oba rozkazy mogą być 

pobierane i wykonywane równolegle. Jeśli natomiast istnieje zależność danych między pierwszym a drugim rozkazem, to drugi rozkaz ulega  

opóźnieniu o tyle cykli zegara, ile jest wymaganych do usunięcia zależności. Ogólnie rzecz biorąc, dowolny rozkaz musi być opóźniony, aż 

zostaną utworzone jego wszystkie wartości wejściowe. 

Prawdziwa zależność danych ogranicza wydajność każdego rodzaju potoku. W prostym potoku skalarnym powyższy ciąg rozkazów nie wywoła  

opóźnienia. Rozważmy jednak następującą sekwencję:

load rl.eff ; 

ładuj rejestr rl zawartością efektywnego adresu pamięci eff

move r3, rl ;

ładuj rejestr r3 zawartością rl

Typowy procesor RISC potrzebuje dwóch lub więcej cykli w celu przeprowadzenia ładowania z pamięci ze względu na opóźnienie dostępu do  

pamięci znajdującej się poza mikroukładem. Jednym ze sposobów skompensowania tego

opóźnienia jest zmiana kolejności rozkazów przez kompilator, dzięki czemu jeden lub więcej kolejnych rozkazów nie zależących od ładowania z  

pamięci może rozpocząć przepływ przez potok. Schemat ten jest mniej efektywny w przypadku potoku superskalarnego. Niezależne rozkazy 

wykonywane podczas ładowania najprawdopodobniej zostaną wykonane podczas pierwszego cyklu ładowania, pozostawiając procesor bez 

zajęcia do zakończenia ładowania.

8. Jak rozwiązać problem zależności proceduralnej w przetwarzaniu superskalarnym. Podać przykład.

 Jak   stwierdziliśmy   w   rozdziale   11,   obecność   rozgałęzień   w   sekwencji   rozkazów   komplikuje   działanie   potoku.   Rozkazy   następujące   po 

rozgałęzieniu   (dokonanym   lub   nie   dokonanym)   wykazują   zależność   proceduralną   od   rozgałęzienia   i   nie   mogą   być   wykonywane   przed 

zakończeniem rozgałęzienia. Na rysunku 13.2 jest pokazany wpływ rozgałęzienia na potok superskalarny stopnia 2. Jak widzieliśmy, ten rodzaj 

zależności   proceduralnej   oddziałuje   także   na   potok   skalarny.   Jednak   podobnie   jak   poprzednio,   konsekwencje   w   odniesieniu   do   potoku 

superskalarnego są poważniejsze, ze względu na większe możliwości tracone przy każdym opóźnieniu. Jeśli są używane rozkazy o zmiennej  

długości, to powstaje inny rodzaj zależności proceduralnej. Ponieważ długość określonego rozkazu nie jest znana,

musi   on   być   przynajmniej   częściowo   zdekodowany,   zanim   będzie   mógł   być   pobrany   następny   rozkaz.   Nie   jest   potrzebne   jednoczesne  

pobieranie wymagane przez potok superskalarny. Jest to jeden z powodów, dla których metody superskalarne są łatwiejsze do zastosowania w 

architekturach RISC lub zbliżonych do RISC, które mają ustalone długości rozkazów.

9. Jak rozwiązać problem konfliktu dostępu do zasobów w przetwarzaniu superskalarnym. Podać przykład takiego konfliktu.

Konflikt dotyczący zasobów polega na jednoczesnym rywalizowaniu dwóch lub wielu rozkazów o te same zasoby. Przykładami takich zasobów  

są pamięci, pamięci podręczne, magistrale, porty tablic rejestrów i jednostki funkcjonalne (np.

sumator ALU).

W odniesieniu do potoku konflikt dotyczący zasobów wygląda podobnie jak w przypadku zależności danych (rys. 13.2). Istnieją jednak pewne 

różnice. Po pierwsze, problemy dotyczące zasobów mogą być przezwyciężone przez powielenie zasobów, podczas gdy prawdziwa zależność 

danych nie może być wyeliminowana. Po drugie, gdy czas trwania operacji jest długi, konflikt dotyczący zasobów może być zminimalizowany  

przez   zastosowanie   przetwarzania   potokowego   w   odpowiedniej   jednostce   funkcjonalnej.   Na   przykład   we   wszystkich   jednostkach 

funkcjonalnych w procesorze Motorola 88000 zastosowano przetwarzanie potokowe.

10. Jak rozwiązać problem antyzależności w przetwarzaniu superskalarnym. Podać przykład.

Polityka zmienionej kolejności wydawania i zmienionej kolejności kończenia podlega tym samym ograniczeniom, które opisaliśmy wyżej. 

Rozkaz nie może być wydany, jeśli narusza to zależność lub powoduje konflikt. Różnica polega na tym, że więcej rozkazów jest dostępnych do  

wydawania, co zmniejsza prawdopodobieństwo zatrzymania potoku. Powstaje ponadto nowego rodzaju zależność, którą określiliśmy wcześniej 

jako antyzależność (nazwana także zależnością odczyt-zapis). Zależność tę ilustruje fragment programu:

I1:

R3 <- R3 op R5

I2:

R4 <- R3 + 1

I3:

R3 <- R5 +1

background image

I4:

R7 <- R3 op R4

Wykonywanie rozkazu I3 nie może być zakończone, zanim nie zostanie rozpoczęte wykonywanie rozkazu I2 i nie zostaną pobrane jego  

argumenty. Dzieje się tak, ponieważ rozkaz I3 aktualizuje rejestr R3, który jest źródłem argumentu dla rozkazu I2. Stosowany jest termin 

antyzależności, ponieważ ograniczenie jest podobne do prawdziwej zależności danych, jednak jest odwrócone: to nie pierwszy rozkaz tworzy 

wartość używaną przez drugi rozkaz, lecz drugi rozkaz niszczy wartość używaną przez pierwszy rozkaz.

 11. Jak rozwiązać problem zależności wyjściowej w przetwarzaniu superskalarnym. Podać przykład.

Zależność wyjściowa (zależność odczyt-zapis). 

I1:

R3 <- R3 op R5

I2:

R4 <- R3 + 1

I3:

R3 <- R5 +1

I4:

R7 <- R3 op R4

Rozkaz I2 nie może być wykonany przed rozkazem I1, ponieważ potrzebuje wyniku w rejestrze R3 tworzonego przez rozkaz I1; jest to przykład  

prawdziwej zależności danych. Podobnie rozkaz I4 musi czekać na I3, ponieważ używa wyniku tworzonego przez I3. Co można powiedzieć o  

zależności między rozkazami I1 a I3? Jeśli wykonywanie rozkazu I3 zakończy się przed I1, to do wykonania I4 zostanie pobrana niewłaściwa  

zawartość rejestru R3. Wobec tego wykonywanie  rozkazu I3 musi zakończyć się po rozkazie I1, żeby otrzymać prawidłowe wartości wyjściowe. 

Aby to zapewnić, wydawani trzeciego rozkazu musi zostać wstrzymane, jeśli jego wynik może być później skasowany przez starszy rozkaz  

wymagający dłuższego czasu do zakończenia. 

Zmieniona kolejność kończenia wymaga bardziej złożonych układów logicznych wydawania rozkaz niż kończenie kolejne. Ponadto trudniejsze  

jest postępowanie z przerwaniami i wyjątkami. Gdy następuje przerwanie, wykonywanie rozkazu w bieżącym punkcie jest zawieszane, a w  

późniejszym  czasie wznowione.  Procesor,  musi  zapewnić,  żeby  przy  wznawianiu  było   wzięte  pod uwagę  to,  że wykonywanie  rozkazów 

znajdujących się przed rozkazem powodującym przerwanie mogło już być zakończone.

 12.  Na czym polegają obliczenia spekulatywne? Podać przykład i zastosowania.

 Wykonywanie   spekulatywne (ang. speculative   execution)   -   zdolność mikroprocesorów przetwarzających   instrukcje potokowo do 

wykonywania instrukcji znajdujących się za skokiem warunkowym, co do którego jeszcze nie wiadomo, czy nastąpi, a więc czy (formalnie) 

kolejne instrukcje zostaną wykonane. Ostatecznie wyniki wyliczone z wyprzedzeniem zostaną albo uwzględnione, albo odrzucone, zależnie od 

tego, czy skok się wykona.

Tego typu przetwarzanie jest możliwe w mikroprocesorach mogących zmieniać kolejność wykonywania instrukcji, aby najpełniej wykorzystać 

dostępne jednostki wykonawcze.

Mechanizmy redukcji opóźnień mają charakter heurystyczny. Oznacza to, że procesor próbuje „zgadywać” przebieg wykonania programu i na 

tej podstawie pobiera i wykonuje kolejne instrukcji. Procesor nie ma pewności, czy „zgadywanie” dało właściwy efekt aż do czasu wykonania 

instrukcji skoku. Wszystkie  instrukcje wykonywane w  tym  czasie muszą być  wykonywane w  taki  sposób,  aby  ich   wyniki mogły  zostać  

anulowane. 

Taki sposób wykonania instrukcji nazywamy spekulatywnym. Współczesne procesory praktycznie przez cały czas pracują spekulatywnie.

13. Omówić główne cechy architektury SIMD.

  SIMD   Single   Instruction   stream,   Multiple   Data   stream   -   pojedynczy   strumień   rozkazów,   wielokrotny   strumień   danych.

Architektura SIMD charakteryzuje się zwielokrotnieniem jednostek przetwarzających. Każda z nich realizuje ten sam, pojedynczy strumień 

rozkazów, dekodowany przez pojedynczą, wspólną jednostkę sterującą. Praca jednostek przetwarzających ma charakter synchroniczny: w  

danym momencie każda z nich wykonuje ten sam rozkaz, choć na innych danych, dostarczanych jej oddzielnym strumieniem ze wspólnej PaO.  

Często tylko niektóre z jednostek wykonują rozkaz - dokonuje się to przez maskowanie wybranych jednostek za pomocą informacji w rozkazie.  

Praktyczną implementacją architektury SIMD są procesory macierzowe (array procesor).

Pojedynczy strumień instrukcji dzielony między procesory. Do każdego procesora podłączony inny strumień danych. Te same instrukcje na  

różnych danych. Przykład - multiprocesory wektorowe

14. Omówić protokoły katalogowe zapewniające spójność pamięci podręcznej.

Protokoły katalogowe polegają na zbieraniu i przechowywaniu informacji o tym, gdzie rezydują kopie bloków danych. Zwykle istnieje centralny  

sterownik będący częścią sterownika pamięci głównej, a katalog jest przechowywany w pamięci głównej. Katalog zawiera globalną informację o  

stanie zawartości różnych lokalnych pamięci podręcznych. Gdy sterownik określonej pamięci podręcznej zgłasza zapotrzebowanie, sterownik 

centralny sprawdza i wydaje niezbędne rozkazy zapewniające przesyłanie danych między pamięcią główną, a pamięciami podręcznymi lub 

miedzy pamięciami podręcznymi. Jest on także odpowiedzialny za utrzymanie i ciągłe aktualizowanie informacji o stanie; informacja o każdym  

działaniu lokalnym, które może wpłynąć na globalny stan bloku danych, musi trafić do sterownika centralnego. 

Sterownik zachowuje zwykle informacje o tym , które procesy mają kopię których bloków. Zanim procesor będzie mógł dokonać operacji zapisu  

w lokalnej kopii bloku, musi zgłosić do sterownika centralnego zapotrzebowanie na wyłączny dostęp do tego bloku. Przed udzieleniem zgody na 

wyłączony dostęp, sterownik wysyła wiadomość do wszystkich procesów przechowujących w pamięci podręcznej kopię tego bloku, zmuszając  

każdy procesor do unieważnienia kopii. Po otrzymaniu potwierdzeń unieważnia od każdego procesora, sterownik udziela prawa wyłącznego  

dostępu procesorowi zgłaszającemu zapotrzebowanie. Gdy inny procesor próbuje odczytać blok udostępniony na zasadzie wyłączności innemu  

procesorowi, wysyła zawiadomienie o chybieniu do sterownika. Sterownik wydaje wtedy procesorowy dysponującemu blokiem rozkaz zapisu  

do pamięci głównej. Teraz blok może być jednocześnie odczytywany przez oba procesory. 

Wadą rozwiązań katalogowych jest wąskie gardło, jakie może wystąpić w centralnym sterowaniu, oraz obciążenie komunikacją między różnymi 

sterownikami pamięci podręcznych a sterownikiem centralnym. Są one jednak efektywne w dużych systemach magistralnych lub z innym  

złożonym układem połączeń.

 15. Omówić protokół podglądania zapewniający spójność pamięci podręcznej.

W protokołach podglądania odpowiedzialność za utrzymywanie spójności pamięci podręcznych jest rozkładana na wszystkie sterowniki tych 

pamięci w wieloprocesorze. Pamięć podręczna musi rozpoznać sytuację, w której przechowywany przez nią   blok występuje również w innych 

pamięciach   podręcznych.   Gdy   jest   aktualizowany   blok   wspólny,   muszą   być   o   tym   powiadomione   pozostałe   pamięci   podręczne   za 

background image

pośrednictwem   pewnego   mechanizmu   rozgłaszania.   Każdy   sterownik   pamięci   podręcznej   może   przeglądać   sieć   w   poszukiwaniu   takich  

powiadomień i odpowiednio reagować. 

Protokoły podglądania są idealne dostosowane do wielorprocesorów o organizacji magistralowej, gdyż wspólna magistrala stanowi idealny  

ośrodek rozgłaszania i podglądania. Ponieważ jednym z celów stosowania lokalnych pamięci podręcznych jest unikanie dostępów do magistrali,  

trzeba zadbać o to, żeby zwiększony ruch na magistrali wywołany przez rozgłaszani i podglądanie nie skompensował korzyści z używania 

lokalnych pamięci podręcznych. 

Zbadane   zostały   dwa   podstawowe   rozwiązania   protokołów   podglądania:   zapis   z   unieważnieniem   i   zapis   z   aktualizacją.     W   pierwszym 

przypadku w danej chwili może występować wiele jednostek odczytujących, ale jedna zapisująca. 

W drugim przypadku może występować zarówno wiele jednostek zapisujących jak i wiele odczytujących. 

16. Metody programowego zapewnienia spójności pamięci podręcznej w architekturach wieloprocesorowych.

 Mechanizmy   spójności   oparte   na   kompilatorze   polegają   na   analizowaniu   programu   w   celu   stwierdzenia,   które   dane   mogą   stanowić 

niebezpieczeństwo   przy   wprowadzaniu   ich   do   pamięci   podręcznych,   oraz   na   odpowiednim   znakowaniu   tych   danych.   Następnie   system 

operacyjny lub sprzęt zapobiegają kierowaniu tych danych do pamięci podręcznych.

Najprostszym rozwiązaniem jest zapobieganie temu, żeby jakiekolwiek wspólne zmienne były kierowane do pamięci podręcznych. Jest to  

jednak   rozwiązanie   zbyt   konserwatywne,   ponieważ   wspólne   struktury   danych   mogą   być   w   pewnych   okresach   używane   na   zasadzie 

wyłączności, natomiast w pozostałych okresach mogą być efektywnie odczytywane. Spójność pamięci podręcznych stanowi problem tylko  

wówczas, gdy przynajmniej jeden proces może aktualizować zmienną i przynajmniej jeden inny proces może sięgać po tę zmienną.

W   bardziej   efektywnych   rozwiązaniach   program   jest   analizowany   w   celu   określenia   okresów   bezpiecznych   dla   wspólnych   zmiennych. 

Następnie   kompilator   umieszcza   w   generowanym   programie   rozkaz,   który   wymusza   spójność   pamięci   podręcznych   podczas   okresów  

krytycznych. Opracowano wiele metod przeprowadzania takiej analizy i wymuszania spójności; opisano je w [LILJ93] i w [STEN90].

17. Metody przetwarzania równoległego w klastrach. Podać przykłady praktycznych zastosowań.

 

18. Cechy architektury COMA.

Migracja danych do pamięci lokalnej procesora, który z nich korzysta

Pamięć lokalna w węźle jest traktowana jak duża pamięć podręczna procesora (attraction memory)

Każdy blok pamięci ma swój adres (tag) i może się znajdować w dowolnym węźle

Organizacja hierarchiczna

Struktura drzewiasta

Liscie: procesory + AM

Wezły: katalogi

 Organizacja płaska

Katalog zawiera informacje o wszystkich lokalnych blokach

Bloki migruja, a katalog jest stały

Architektura   COMA   (Cache   Only   Memory   Architecture)   -   Pamięć   podręczna   dla   tego   typu   architektury   została   powiększona   w   celu  

zminimalizowania czasu dostępu do pamięci w przypadku odległych do niej odwołań, a w przeciwieństwie do ccNUMA globalna pamięć  

dzielona nie występuje.

Typowe systemy reprezentujące architektury COMA to:

SUN S3.MP

Kendall Square Research (KSR) AllCache

ZALETY

Dostarcza mechanizmu który pozwala na migracje od nic-niedzielącej architektury MPP do modelów programowania na systemach dzielących  

wspólną pamięć

WADY

1. Złożony podsystem zarządzania pamięci wirtualnej bazujący na migracji stronic pamięci i ich replikacji.

2. Wymaga kosztownych zmian kontrolerów pamięci poszczególnych węzłów.

Jednym z pomysłów zmierzających do przełamania tego fatum jest wykorzystanie głównej pamięci każdego procesora jako dużej pamięci 

podręcznej. Istotną cechą opartych na tym pomyśle wieloprocesorów, oznaczanych akronimem COMA (Cache Only Memory Access, dostęp 

wyłącznie  przez  pamięć  cache),   jest  rezygnacja  z  przypisywania  poszczególnych  fragmentów  (stron)   fizycznej  przestrzeni  adresowej  do  

określonych procesorów macierzystych, jak w przypadku maszyn NUMA; tak naprawdę strony te w ogóle tracą swe znaczenie. W zamian 

fizyczna przestrzeń adresowa podzielona zostaje na linie cache, które mogą na żądanie migrować po systemie. Bloki odpowiadające liniom 

cache nie mają macierzystych procesorów, podobnie jak nomadowie w niektórych krajach Trzeciego Świata mają swe domy tam, gdzie się  

aktualnie  znajdują.  Pamięć  zawierająca  potrzebny  wiersz (blok)  nosi  nazwę pamięci  oddziaływania  (attraction  memory).   Wykorzystanie 

pamięci głównej jako wielkiego cache znacząco zwiększa prawdopodobieństwo trafienia, a w konsekwencji wydajność.

Zestaw C

 

1.   Zaprojektować   strukturę   układu   adresowania   (sekwensera)   w   mikroprogramowanej   jednostce   sterującej   umożliwiającej 

realizację zadanych metod adresowania mikrorozkazów.

 

2. Przedstawić schemat przetwarzania potokowego zadanej sekwencji rozkazów dla podanej struktury procesora.

 

3. Zaprojektować budowę rozkazu procesora RISC o zadanych parametrach.

 

4. Zoptymalizować zadany fragment programu dla przetwarzania superskalarnego o podanych parametrach.

 

5. Przedstawić stan poszczególnych bloków pamięci podręcznej stosującej protokół MESI dla zadanej architektury SMP i podanego 

scenariusza sekwencji odczytów/zapisów z/do pamięci.

background image

 

6.   Zaprojektować   optymalny   schemat   przetwarzania   równoległego   i   optymalną   architekturę   wieloprocesorową   dla   zadanego 

problemu obliczeniowego