Model pr II(TAK9)


z
Wykład
Temat:
Model programowy komputera, część II.
Zawartość wykładu:
1. Cykl rozkazowy i jego realizacja w komputerze
2. Realizacja programu w komputerze
3. Potokowe wykonywanie operacji obliczeniowych
4. Potokowe wykonywanie rozkazów
z
Cykl rozkazowy i jego realizacja w komputerze
Rozkazy wewnętrzne komputera są wykonywane w procesorze w ramach tzw.
cyklu wykonania rozkazu, który składa się z dwu faz: pobrania rozkazu i
wykonania rozkazu.
Start
Pobranie
następnego Faza pobierania
rozkazu
Wykonanie
Faza wykonania
rozkazu
Stop
z
Następny
1 rozkaz
Wprowadzenie
adresu rozkazu
2
Pobranie rozkazu
3
Dekodowanie
kodu operacji rozkazu
4
Obliczenie
adresu argumentu
Aańcuch
lub
wiele argumentów wektor
5Pobranie argumentu
6
Operacja na danych
7
Obliczenie
adresu wyniku
wiele wyników
8
Zapisanie wyniku
Składniki faz w cyklu wykonania rozkazu.
Faza pobierania
Faza wykonania
z
Fazy należące do cyklu wykonania rozkazu mają długości czasowe określone
przez sygnały taktujące pochodzące z zegara.
W każdej fazie generator sygnałów sterujących dostarcza odpowiednich
sygnałów, które powodują realizację operacji przewidzianych w tych fazach.
Odbywa się to metodą otwarcia odpowiednich dróg przesyłania informacji w
komputerze (np. szyn) i aktywacji odpowiednich działań w układach
wykonawczych (np. ALU  dodanie/ odjęcie, układ następnika licznika
rozkazów, itp.).
z
Realizacja programu w komputerze
Realizację wykonania prostego programu rozważymy w uproszczonym
komputerze składającym się mikroprocesora i pamięci operacyjnej
podłączonej do niego za pomocą szyny systemowej ( szyna danych, szyna
adresowa i szyna sterująca).
Program , którego wykonanie rozpatrzymy składa się z 4 rozkazów
zapisanych pod kolejnymi adresami w pamięci od 0 do 3 oraz z 3 danych dla
których przeznaczono komórki o adresach od 4 do 6.
z
Program składa się z następujących rozkazów, (rozkazy zapisujemy za
pomocą typowch skrótów języka asemblera) :
move 4 - pobierz daną z pamięci spod adresu 4 do rejestru akumulatora,
add 5 - dodaj do akumulatora daną spod adresu 5,
store 6 - zapamiętaj zawartość akumulatora w pamięci pod adresem 6,
stop - zatrzymaj wykonanie programu.
Po wykonaniu programu wynik obliczeń znajduje się w komórce pamięci
operacyjnej o adresie 6.
z
Podłączenie mikroprocesora do pamięci operacyjnej zawierajacej
program.
Pamięć operacyjna
Szyna danych
Nr komórki Zawartość
0 move 4
1 add 5
store 6
2
3 stop
4 10
Mikroprocesor 5 20
6 0
Dekoder Sterowanie
adresu pamięcią
Szyna adresowa
Szyna sterowania
z
Założona strukturą blokową procesora.
Szyna danych
Pamięć operacyjna
0
Zawartość
Selektor 0 A Nr komórki
Kod
RBD
Adres RR
move 4
operacji 0
add 5
1
store 6
2
stop
3
ALU
Dekoder
LR 0 4 10
5 20
6 0
ą1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
Szyna adresowa
0
Szyna sterowania
RR  rejestr rozkazów LR  licznik rozkazów
A  rejestr akumulatora Warunki  rejestr warunków (flagi)
RBD  rejestr buforowy danych RBA  rejestr buforowy adresu
Taktowanie
z
Pamięć operacyjna zawiera komórki, które symbolicznie są przedstawione
w postaci wierszy składających się z numeru komórki i pola zawartości
komórki. W rzeczywistości komórka zawiera tylko pole zawartości.
Adres jest podawany do pamięci z zewnątrz (z procesora prze szynę adresów)
i po zdekodowaniu przez dekoder adresu, powoduje uaktywnienie (wybranie)
komórki o podanym adresie.
Może być wykonany odczyt lub zapis zawartości (rodzaj operacji
zależy od sygnału podanego przez szynę sterującą do układu sterowania
pamięci).
z
Sposób wykonania kolejnych rozkazów komputera można omawiać
wykorzystując symboliczny zapis operacji, czyli :
tzw. język przesłań między-rejestrowych (ang. register transfer language).
Nazwa języka pochodzi od tego, że podstawową operacją wyrażalną w tym
języku są przesłania informacji między rejestrami, komórkami pamięci i
blokami funkcjonalnymi (obliczeniowymi) w komputerze.
Języki takie należą do większej grupy języków służących do opisu sprzętu
komputera i sposobu jego działania, tzw. języków opisu sprzętu (ang.
hardware description languages).
z
Język przesłań między-rejestrowych wykorzystuje reprezentacje elementów
pamięciowych lub bloków obliczeniowych komputera (rejestrów, pamięci
operacyjnej, pamięci pomocniczej, jednostki arytmetyczno-logicznej) w
postaci ich nazw, np. A, RR , LR, pamięć, P, ALU, itp..
Zawartość elementów pamięciowych lub wyjściowe dane z bloku
obliczeniowego (rozumiane jako ciąg bitów) symbolizuje nazwa elementu
wzięta w nawias prostokątny, np. [A], [RR], [RBD], [ALU].
z
Adresowanie informacji wewnątrz elementu pamięciowego lub słowa
wyjścia z bloku obliczeniowego opisuje się za pomocą nazwy elementu, po
którym występuje specyfikacja wybranego fragmentu zawartości w nawiasie
okrągłym.
Przykłady:
RR (Kod Operacji)  pole rejestru RR o nazwie Kod Operacji,
RR (Adres)  pole rejestru RR o nazwie Adres,
ALU (bity 10  24)  bity od 10 do 24 słowa stanowiącego wynik operacji
ALU.
z
Komórki pamięci mogą być opisane przy pomocy nazwy całej pamięci np. P
dla pamięci operacyjnej oraz specyfikacji adresu w nawiasie okrągłym
Przykłady
P (999)  komórka pamięci P o adresie 999,
P (RBA)  komórka pamięci P o adresie zawartym w rejestrze RBA,
P (LR) ( Kod Operacji)  pole Kod Operacji w komórce pamięci P o adresie
zawartym w rejestrze LR.
z
Na zawartościach elementów pamięciowych można wykonać operacje, które
symbolizowane są operatorami, np. prześlij, + dodaj, - odejmij, itp.
Przykłady
[A] P (1024)  oznacza prześlij zawartość rejestru A do komórki pamięci o
adresie 1024,
[RR (Adres)] LR  prześlij zawartość pola Adres rejestru RR do rejestru
LR,
[A (0-15)] + [LR] LR  dodaj zawartość bitów od 0 do 14 rejestru A do
zawartości LR i wynik zapisz do LR.
z
Przesyłanie zawartości bitowej odbywa się z wpisywaniem bitów na te same
pozycje w elemencie docelowym ( bit na pozycji zero elementu zródłowego
wpisuje się na pozycje zero w elemencie docelowym), chyba, że jest to
określone inaczej.
Przykład
[RR (Adres)] LR (14  31)  przesłanie pola Adres z rejestru RR na bity
14-31 rejestru LR.
z
Wykonanie przykładowego programu opisane za pomocą
języka przesłań miedzy-rejestrowych
" Dla prezentacji użyty będzie schemat blokowy komputera
" Elementy komputera, które biorą udział w opisywanej operacji zaznaczać
będziemy na czerwono.
" Pod schematem blokowym podany jest opis operacji w języku przesłań
między-rejestrowych
z
Faza pobrania rozkazu
Przed wykonaniem każdego programu, adres komórki pamięci operacyjnej,
która zawiera pierwszy rozkaz programu musi być wprowadzony do licznika
rozkazów LR.
Wykonuje to system operacyjny na podstawie odpowiedniej dyrektywy
użytkownika np. Wykonaj program o nazwie alfa. .
We współczesnych komputerach taka dyrektywa jest nazwa zbioru
zawierającego wykonywalny kod binarny programu, a więc alfa.exe.
Nazwa jest zamieniana na adres pierwszego rozkazu programu o nazwie alfa.
W przypadku naszego przykładowego programu jest to adres 0. Jest on
wprowadzony do rejestru LR przed wykonaniem programu.
z
0
Selektor 0 A Nr komórki Zawartość
Kod
RBD
Adres RR
operacji 0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 0 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
0
Operacja [LR] RBA
W tej operacji zawartość licznika rozkazów LR jest przesłana do rejestru
buforowego pamięci operacyjnej RBA. Odbywa się to pod wpływem
sygnałów sterujących wysyłanych z układu sterującego, a ściślej jego
generatora sygnałów.
Taktowanie
z
0
Selektor 0 A Nr komórki Zawartość
Kod RBD
Adres RR
move 4
operacji 0
1 add 5
store 6
2
stop
3
ALU
Dekoder
LR 1 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
0
Operacja [LR] + 1 LR
Jako następna operacja jest wykonany następnik na zawartości licznika
rozkazów LR. W ten sposób LR zawiera adres potencjalnego następnego
rozkazu do wykonania. O ile pobrany rozkaz nie zmieni zawartości LR, to
zawartość LR postała w wyniku operacji następnika będzie adresem
następnego rozkazu. W naszym przypadku będzie to adres 1. Operacja
następnika na LR w fazie pobierania rozkazu jest charakterystyczną cechą
komputera o modelu von Neumana.
Taktowanie
z
Selektor 0 A Nr komórki Zawartość
Kod RBD
Adres RR
move 4
operacji 0
1 add 5
store 6
2
stop
3
ALU
Dekoder
LR 0 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
0
Operacja [P (RBA)] RBD
Kolejna operacja w fazie pobrania rozkazu jest odczyt komórki pamięci o
adresie zawartym w RBA do rejestru buforowego RBD. Generator sygnałów
sterujących podaje wtedy do układu sterowania pamięcią sygnał  odczyt
pamięci (ang. memory read). Po odczycie, rejestr RBD zawiera rozkaz
 move 4 .
Move 4
Taktowanie
z
Selektor 0 A Nr komórki Zawartość
RBD
Move 4 RR
0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 1 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
0
Operacja [RBD] RR
Następna operacja polega na przepisaniu zawartości rejestru RBD do rejestru
rozkazów RR. Pole  Kod operacji rejestru RR zawiera kod binarny rozkazu
 move a pole adresowe  Adres zawiera liczbę binarną 4. Ta operacja
kończy fazę pobrania pierwszego rozkazu naszego programu. Następna faza
cyklu rozkazu to faza wykonania.
Move 4
Taktowanie
z
Faza wykonania rozkazu
Selektor 0 A Nr komórki Zawartość
RBD
Move 4 RR
move 4
0
1 add 5
store 6
2
stop
3
ALU
Dekoder
LR 1 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
0
Dekodowanie rozkazu  move 4
Faza wykonania rozkazu rozpoczyna się od zdekodowania rozkazu a ściślej
od zdekodowania pola  Kod operacji rejestru RR.
Generator sygnałów sterujących wysyła sygnały, który otwierają:
1) drogę z pola  kod operacji rejestru RR do Dekodera rozkazów
2) drogę z Dekodera rozkazów do Generatora sygnałów sterujących
Move 4
Taktowanie
z
Te dwie drogi w układzie sterującym pozostaną otwarte już do końca
wykonania rozkazu.
Dekoder rozkazów podaje na wejście Generatora sygnałów sygnały
odpowiadające kodowi  move .
Sygnały z dekodera są kombinowane logicznie w Generatorze sygnałów z
sygnałami zegarowymi Taktowanie.
W wyniku kombinacji logicznej powstają sygnały sterujące, które w
kolejnych chwilach czasowych są wysyłane do wszystkich układów
komputera, aby umożliwić tam wykonanie odpowiednich operacji
składających się na wykonanie rozkazu  move .
Część tych sygnałów jest wysyłana z powrotem do układu zegarowego, aby
wytwarzał sygnały  Taktowanie odpowiednie dla rozkazu  move .
z
Selektor 0 A Nr komórki Zawartość
RBD
Move 4 RR
0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 1 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
4
[RR (Adres)] RBA
Następuje obecnie przesłanie zawartości pola adresowego  Adres rejestru
rozkazów RR do rejestru buforowego adresu pamięci RBA. Liczba binarna 4
znajdzie się w RBA aby posłużyć w następnym takcie czasowym do wybrania
komórki pamięci dla odczytu określonego w rozkazie  move .
Move 4
Taktowanie
z
Przy przesłaniu zawartości pola  Adres z rejestru RR następuje
wykorzystanie tylko części linii wewnętrznej szyny danych.
Na wyjściu z wewnętrznej szyny danych do zespołu rejestrów znajduje się
układ Selektor, który otwiera drogę do potrzebnego rejestru, w tym przypadku
rejestru RBA.
Operacją sterują odpowiednie sygnały z Generatora sygnałów sterujących.
W przypadku np. rozkazu  jump lub  call układ Selektor otworzyłby drogę
z pola  Adres rejestru RR do licznika rozkazów LR.
z
Selektor 0 A Nr komórki Zawartość
RBD
Move 4 RR
0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 1 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
4
Operacja [P (RBA)] RBD
Nastepuje taraz odczyt z pamięci słowa o adresie 4 wskazanym przez rejestr
buforowy adresu RBA i wpisanie tego słowa do rejestru buforowego danych
pamięci RBD.
Generator sygnałów sterujących wysyła do pamięci sygnał  odczyt pamięci
oraz sygnał otwierający zewnętrzną szynę danych do rejestru RBD.
W ten sposób dana binarna 10 znajdzie się w rejestrze RBD.
10
Taktowanie
z
Selektor 10 A Nr komórki Zawartość
RBD
Move 4 RR
0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 1 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
0
Operacja [RBD] A
Następna operacja to przesłanie poprzez wewnetrzną szynę danych zawartości
rejestru RBD do rejestru akumulatora A. Ta operacja kończy wykonanie
rozkazu  move 4 .
10
Taktowanie
z
Generator sygnałów sterujących wyśle teraz sygnały sterujące, które
spowodują pobranie do rejestru rozkazów RR następnego rozkazu do
wykonania.
Jest to rozkaz  add 5 . Jego adres 1 czeka już w liczniku rozkazów LR.
Pobranie składać się będzie z takich samych operacji jak pobranie rozkazu
 move 4 ale dotyczyć będzie innego adresu pobranego z licznika rozkazów
LR.
Operacje te są następujące:
[LR] RBA
[LR] + 1 LR
[P (RBA)] RBD
[RBD] RR
z
Po odczycie z pamięci rozkaz  add 5 znajdzie się w rejestrze rozkazów RR.
Pole  Kod operacji rozkazu  add 5 zawiera więc kod binarny  add
Pole  Adres zawiera liczbę binarną 5.
Jednocześnie w liczniku rozkazów LR mamy adres następnego rozkazu do
wykonania, liczbę binarną 2.
z
Wykonanie rozkazu  add 5
Pomijamy rysunek przedstawiający otwarcie dekodera na dekodowanie części
operacyjnej rozkazu  add 5 .
Rozkaz  add 5 ma dodać zawartość rejestru akumulatora do zawartości
komórki pamięci o adresie 5 i zapisać wynik w akumulatorze.
z
Selektor 10 A Nr komórki Zawartość
RBD
Add 5 RR
0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 2 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
5
Operacja [RR(Adres)] RBA
Rysunek przedstawia pierwszą po zdekodowaniu rozkazu operację, która
składa się na wykonanie  add 5 . Jest to przesłanie adresu 5 z pola  Adres
rejestru rozkazów RR do rejestru buforowego adresu RBA.
Add 5
Taktowanie
z
Selektor 10 A Nr komórki
RBD Zawartość
Add 5 RR
0
move 4
1
add 5
2 store 6
3 stop
ALU
Dekoder
LR 2 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
5
Operacja [P(5)] RBD
Kolejna operacja to odczyt słowa pamięci spod adresu 5 do rejestru
buforowego danych RBD przez zewnętrzną .szynę danych. Generator
sygnałów sterujących generuje sygnał  odczyt pamięci i otwiera wyjście z
pamięci na szynę i wyjście z szyny do rejestru RBD. RBD zawiera po tej
operacji dana binarną 20.
20
Taktowanie
z
Selektor 10 A Nr komórki Zawartość
RBD
Add 5 RR
move 4
0
1 add 5
store 6
2
stop
3
ALU
Dekoder
LR 2 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
5
Operacja {[A], [RBD]} ALU
Następuje teraz dodanie danych w jednostce arytmetyczno-logicznej ALU.
Zauważmy, że akumulator zawiera daną 10 pobrana w poprzednim rozkazie.
Generator sygnałów sterujących wysyła sygnały, które otwierają wyjście z
rejestru A oraz wyjście z RBD na wewnętrzną szynę danych i wejścia ALU.
Sygnały te trwają tak długo, jak długo trwa operacja dodawania w sumatorze
ALU.
20
Taktowanie
z
Selektor 30 A Nr komórki
RBD Zawartość
Add 5 RR
0
move 4
1
add 5
2 store 6
3 stop
ALU
Dekoder
LR 2 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
5
Operacja [ALU] A i wpisanie warunków
Gdy wynik dodawania jest gotowy, następuje zamknięcie dostępu do wejść
ALU ze strony wyjścia z rejestru A i wewnętrznej szyny danych oraz
zamknięcie wyjścia z rejestru RBD na wewnętrzną szynę danych.
W tej samej chwili następuje otwarcie wyjścia ALU na wewnętrzną szynę
danych i wejścia z tej szyny do rejestru akumulatora A.
20
Taktowanie
z
Otwarcie wejścia do A trwa tylko tak długo jak to jest potrzebne do zapisania
w nim wyniku z ALU.
Wynik z ALU utrzymuje się jeszcze stabilnie przez ten czas, ze względu na
opóznienie reakcji ALU na stan swoich wejść spowodowane propagacją
sygnałów u układach logicznych.
Jednocześnie z wpisaniem wyniku z ALU do A, zostają wpisane wyniki
testów wyniku ALU do rejestru warunków - Warunki. Ta operacja kończy
wykonanie rozkazu  add 5 .
Przed pobraniem następnego rozkazu, bit  Nadmiar ALU rejestru warunków
jest analizowany w Generatorze sygnałów sterujących.
" Jeśli wystąpił nadmiar ALU wykonywanie programu jest przerywane i
pobierany jest rozkaz programu obsługi przerwania wewnętrznego
(wyjątku), który sygnalizuje użytkownikowi błąd arytmetyczny. Generator
sygnałów sterujących emituje niezbędne dla tego sygnały sterujące.
" Jeśli nadmiar ALU nie wystąpił, następuje pobranie następnego rozkazu
naszego programu. Jest to rozkaz  store 6 zapisany w pamięci pod adresem
2. Pobranie zostaje dokonane w znany już nam sposób, zgodnie z
zawartością licznika rozkazów LR równą 2.
z
Wykonanie rozkazu  store 6
Podobnie jak przy poprzednim rozkazie nie rysujemy rysunku dekodowania
rozkazu.
Po pobraniu rozkazu pole  kod operacji rejestru RR zawiera kod  store a
pole  Adres RR zawiera liczbę 6.
Rozkaz  store 6 ma zapisać do komórki pamięci o adresie 6 zawartość
rejestru akumulatora A.
z
Selektor 30 A Nr komórki Zawartość
RBD
Store 6 RR
0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 3 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
6
Operacja [RR (Adres)] RBA
Pierwszą operacją po zdekodowaniu rozkazu jest przesłanie zawartości pola
 Adres rejestru RR do rejestru buforowego adresu RBA. W ten sposób adres
binarny 6 potrzebny dla wykonania rozkazu  store znajdzie się w RBA.
Store 6
Taktowanie
z
Selektor 30 A Nr komórki Zawartość
RBD
Store 6 RR
0 move 4
1 add 5
store 6
2
3 stop
ALU
Dekoder
LR 2 4 10
5 20
ą 6 0
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
6
Operacja [A] RBD
Następna operacja jest przesłanie zawartości rejestru A do rejestru
buforowego danych RBD, aby można było wyprowadzić te zawartość na
zewnętrzna szynę danych wiodąca do pamięci operacyjnej. W ten sposób
liczba 30 znajdzie się w RBD.
30
Taktowanie
z
Selektor 30 A Nr komórki Zawartość
RBD
Store 6 RR
move 4
0
1 add 5
store 6
2
stop
3
ALU
Dekoder
LR 2 4 10
5 20
ą 6 30
1
Warunki Dekoder Sterowanie
Generator
RBA
adresu pamięcią
sygnałów
6
Operacja [RBD] P (RBA)
Ostatnią operacją składową rozkazu  store 6 jest zapis danej 30 z rejestru
buforowego danych do komórki pamięci o adresie 6 wskazywanej przez
zawartość rejestru RBA.
Generator sygnałów sterujących podaje do układu sterowania pamięcią sygnał
 zapisz pamięć oraz otwiera drogi (szynę adresową i danych) dla przesłania
adresu z rejestru RBA oraz danych z rejestru RBD.
30
Taktowanie
z
Potokowe wykonywanie operacji obliczeniowych
Potokowe przetwarzanie danych (ang. pipelined processing) polega na
zorganizowaniu wykonywania operacji w komputerze, w sposób podobny do
wytwarzania produkowania wyrobów w fabryce przy pomocy taśmy
produkcyjnej.
Taśma produkcyjna (ang. production pipeline) jest to urządzenie, które
przesuwa wytwarzane produkty między kolejnymi stanowiskami, na których
wykonywane są kolejne składowe operacje na produktach potrzebne do
wytworzenia całego wyrobu.
Stanowiska są ustawione w szereg wzdłuż taśmy w kolejności odpowiadającej
kolejnym fazom procesu produkcyjnego.
z
Przed każdym przesunięciem taśmy na jej początek wstawia się kolejny
nieobrobiony przez taśmę produkt inicjalny (mogą to być surowce lub produkt
w stanie inicjalnym).
Produkt jest przesuwany następnie przez wszystkie stanowiska robocze.
Na każdym stanowisku produkt jest wzbogacany o wyniki wykonanych na
nim odpowiednich operacji.
Po przejściu przez wszystkie stanowiska produkt zamienia się w gotowy
wyrób.
Czas wykonania operacji na wszystkich stanowiskach na taśmie jest w
przybliżeniu taki sam.
W czasie między kolejnymi przesunięciami taśmy, muszą zakończyć się
operacje na wszystkich stanowiskach, by taśma mogła być przesunięta o jedno
stanowisko w kierunku ostatniej operacji w procesie produkcyjnym.
Podczas pracy taśmy produkcyjnej na której jest n stanowisk, obrabianych jest
jednocześnie n produktów.
z
Po każdym przesunięciu taśmy schodzi z niej gotowy produkt, o ile na
początek taśmy stale podawane są produkty w stanie inicjalnym.
Przy produkcji taśmowej na n stanowiskach, szybkość uzyskiwania
gotowych wyrobów jest n razy większa w porównaniu z taką organizacją
produkcji, gdzie nie ma przesuwającej się taśmy a cały wyrób jest
wytwarzany od początku do końca na jednym stanowisku.
z
W informatyce taśmowe wykonywanie operacji obliczeniowych jest
nazywane przetwarzaniem potokowym.
Aby operacje obliczeniowe mogły być wykonywane w sposób potokowy
musimy zbudować układ wykonawczy, który będzie działał podobnie jak
taśma produkcyjna.
z
W celu zaprojektowania potokowego wykonania danej operacji obliczeniowej
należy:
" podzielić operację obliczeniową na pewną liczbę n operacji składowych,
wykonywanych sekwencyjnie - jedna po drugiej, takich, że czas wykonania
wszystkich operacji składowych jest w przybliżeniu identyczny,
" zbudować dla każdej operacji składowej odrębny układ wykonawczy  tzw.
stopień potoku (ang. pipeline stage),
" połączyć stopnie potoku w taki sposób, aby wyjście z poprzedniego stopnia
było podawane na wejście następnego stopnia,
" zbudować układ synchronizacji przekazywania danych między stopniami,
aby dane przekazywane były między wszystkimi stopniami jednocześnie, w
odstępach czasu równych czasowi wykonania operacji składowych,
zwanych taktami potoku,
z
" zapewnić, aby w chwili przekazywania danych miedzy stopniami na
wejście pierwszego stopnia podawane były nowe argumenty operacji
obliczeniowej,
" odbierać co każdy takt wyniki z ostatniego stopnia potoku, stanowiące
wyniki wykonania całej operacji obliczeniowej.
z
Rzadko udaje się podzielić operacje obliczeniową na dokładnie równe
czasowo operacje składowe.
Dlatego, między stopniami potoku wstawia się układy buforowe, do których
wpisuje się wyniki działania stopni (patrz rysunek poniżej po prawej stronie).
Każdy układ buforowy stanowi układ dwu rejestrów: rejestru wyjściowego
stopnia poprzedniego i rejestru wejściowego stopnia następnego.
Rejestr wyjściowy służy do asynchronicznego zapamiętania wyniku stopnia
poprzedniego.
Rejestry w obrębie jednego bufora są połączone ze sobą równolegle, w taki
sposób, że co takt potoku następuje przepisanie zawartości rejestru
wyjściowego do wejściowego.
Przepisanie następuje we wszystkich buforach równocześnie, co zapewnia
układ sterowania potoku.
z
Wyznacza się najdłuższy czas wykonania operacji wśród wszystkich stopni,
włączając w to zapis wyniku stopnia do wyjściowego rejestru buforowego i
ten czas przyjmuje się za długość taktu potoku.
Wyniki działania stopni przekazuje się ze wszystkich buforów na wejście
następnego stopnia w odstępach czasu równych przyjętemu taktowi potoku,
równemu najdłuższemu czasowi działania stopnia.
Pojedyncze rejestry buforowe umieszcza się również na wejściu pierwszego
stopnia i wyjściu ostatniego stopnia potoku.
Tak zbudowany potok pozwala na wykonanie przetwarzania potokowego
również dla operacji, które nie dają się podzielić na dokładnie równe czasowo
operacje składowe.
z
Struktura potoku dla wykonania operacji obliczeniowej
rejestr we
Stopień 1 (operacja 1)
bufor 1
Sterowanie
Stopień 2 (operacja 2)
przesłaniem danych
między stopniami
bufor 2
Stopień n-1 (operacja n-1)
bufor n-1
Stopień n (operacja n)
rejestr wy
z
Budowa bufora między stopniami potoku
Z poprzedniego stopnia
Rejestr buforowy wy
Sterowanie
przesłaniem danych
Rejestr buforowy we
między stopniami
Do następnego stopnia
z
Aatwo zauważyć, że przez n-1  pierwszych taktów działania potoku na
wyjściu potoku nie pojawi się żaden wynik.
Pierwszy wynik operacji pojawi się po n-tym takcie i odtąd po każdym takcie
będziemy odbierać wynik operacji obliczeniowej.
Pomijając początkowe opóznienie, potok obliczeniowy zawierający n stopni
przyspiesza więc wykonanie operacji obliczeniowej n krotnie.
z
Potokowe wykonywania rozkazów
Ideę przetwarzania potokowego można z powodzeniem zastosować do
wykonania rozkazów w procesorze.
Jak wiadomo cykl wykonawczy rozkazu można podzielić na następujące
operacje składowe:
" Pobranie rozkazu
" Zdekodowanie rozkazu
" Wyznaczenie adresu argumentów
" Pobranie argumentów
" Wykonanie operacji
" Zapis wyników do pamięci
z
Sprzęt wykonawczy komputera możemy zbudować w ten sposób, że każda z
podanych operacji składowych cyklu rozkazu będzie wykonana przez odrębny
układ wykonawczy.
Układ ten jest wstawiony jako stopień do potoku wykonania rozkazu, jak
pokazano na rysunku poniżej.
Założymy, że takt potoku ustalimy równy czasowi wykonania najdłuższej z
powyższych operacji składowych.
Między stopniami potoku wstawimy buforowe układy pamiętające, które będą
przechowywać wyniki wykonania stopnia poprzedniego jako wejście dla
stopnia następnego.
Na wejście potoku będziemy podawać adresy kolejne rozkazy programu
wykonywanego przez procesor.
z
Stopnie potoku wykonującego rozkazy komputera
adres rozkazu
Pobranie rozkazu
Zdekodowanie rozkazu
Wyznaczenie adresu arg.
Pobranie argumentu
Wykonanie rozkazu
Zapis wyniku
z
W kolejnych taktach potoku coraz to nowe adresy rozkazów będą
wprowadzane do pierwszego stopnia potoku i pobierane będą z pamięci
operacyjnej kolejne rozkazy programu.
Po 6-tym takcie potoku otrzymamy wykonanie pierwszego rozkazu programu
i po każdym następnym takcie będziemy mięć wykonany kolejny rozkaz
programu, o ile potok będzie pracował bez przestojów - tzn. każdy stopień
potoku będzie miał w każdym takcie gotowe dane wejściowe .
Potok wykonania rozkazów zawierający 6 stopni, pracujący bez przestojów,
przyspiesza wykonanie programu 6-ciokrotnie.
Dzieje się tak dlatego, że przy pomocy potoku wykonanie programu zostaje
zrównoleglone.
Każdy stopień potoku pracuje dla innego rozkazu.
z
Wykonanie potokowe rozkazów
takty zegara
Stopnie potoku:
1 2 3 4 5 6 7 8
pobranie rozkazu
1 2 3 4 5 6 7 8
zdekodowanie rozkazu
1 2 3 4 5 6 7
wyznaczenie adresu operandów
1 2 3 4 5 6
pobranie argumentów
1 2 3 4 5
wykonanie operacji rozkazu
1 2 3 4
zapis wyniku
1 2 3
nr rozkazu
z
Przy wykonywaniu programów metodą potokową występują problemy z
wykonaniem pewnych typów rozkazów oraz z wykonaniem programów o
pewnych strukturach następstwa rozkazów.
Rozkazy te powodują tzw. przestoje w potoku, z powodu braku danych na
wejściu stopni potoku.
Brak danej wejściowej uniemożliwia pracę danego stopnia, brak wyniku do
przesłania do następnego stopnia a w konsekwencji, z pewnym opóznieniem,
brak wyniku na wyjściu potoku.
Jeśli brak danych wejściowych trwa więcej niż jeden takt, powoduje to
zatrzymanie pracy całego potoku (jego końcowego stopnia) na tyle taktów, dla
ilu brak było danych wejściowych.
z
Problem rozkazów skoku
Pierwszym typem rozkazów, które powodują przestoje w potoku wykonania
rozkazów są rozkazy skoku.
Wynikiem rozkazu skoku jest wprowadzenie do licznika rozkazów adresu
następnego rozkazu do wykonania tj. adresu wytworzonego (lub zawartego) w
tym rozkazie.
z
Przykład
adres rozkazu
czas Pobranie rozkazu
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Zdekodowanie rozkazu
r1
Wyznaczenie adresu arg.
r2
rozkaz skoku
Pobranie argumentu
r3
r4
Wykonanie rozkazu
r5
Zapis wyniku
r6
Dla pobrania rozkazu R4, jego adres powinien znalezć się w liczniku
rozkazów już w chwili 3. Natomiast rozkaz skoku R3 dostarczy ten adres
dopiero w chwili 8. Tak więc, pierwszy stopień potoku nie będzie mógł
pracować w chwilach od 3 do 7, powodując w konsekwencji przestoje
dalszych stopni potoku i brak wyników na wyjściu potoku.
z
Sytuację tę można poprawić w trakcie kompilacji programu.
Kompilator umieszcza w programie za rozkazem skoku odpowiedniej liczby
rozkazów  nic nie rób , które zastepuje nastepnie rozkazami obliczeniowymi
obojętnymi z punktu widzenia miejsca ich wykonania w programi.
W ten sposób lukę w ciągłej pracy potoku może być wypełniona.
Metoda ta nosi nazwę opóznionych skoków (ang. delayed branches).
z
Problem wzajemnej zależności kolejnych rozkazów
Inna sytuacją w programie, w której potok zostaje wstrzymany jest
bezpośrednia zależność kolejnych rozkazów ze względu na dane.
Dzieje się tak, gdy następny rozkaz wykonuje operację na wyniku
poprzedniego.
Przykład
M (125) = M (125) + R1 (ADD)
R2 := R2 " M (125) (MUL)
gdzie: ADD, MUL oznacza rozkazy dodaj, pomnóż;
M(125), R1, R2 oznaczają odpowiednio zawartości: komórki pamięci o
adresie 125, rejestru R1, rejestru R2.
z
adres rozkazu
Pobranie rozkazu
czas
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Zdekodowanie rozkazu
r1
Wyznaczenie adresu arg.
Przestój potoku
z powodu braku
r2
Pobranie argumentu
danej M (125)
ADD
wytworzonej
r3
Wykonanie rozkazu
przez ADD
MUL
r4
Zapis wyniku
r5
Przestój potoku w wyniku zależności sąsiednich instrukcji
Na rysunku wykonania programu powyżej, widzimy przerwę długości 2
taktów potoku w wykonywaniu instrukcji MUL z powodu braku wyliczonego
i odesłanego do pamięci wyniku dodawania ADD.
z
Przerwa ta może być wypełniona przez wykonanie dwu obojętnych instrukcji
obliczeniowych, wstawionych przez kompilator do programu bezpośrednio po
instrukcji ADD.
Podsumowanie
Na wstępie wykładu omówiono organizację cyklu wykonania rozkazów w
komputerze o modelu architekturalnym von Neumana. W wykładzie
przedstawiono sposób wykonywania rozkazów w prostym programie.
Następnie przedstawiono zasady potokowego wykonywania operacji w
komputerach. W ostatniej części wykładu, omówiono metody potokowego
wykonywania rozkazów w programach komputerowych.
Przedstawiono problemy związane z uzyskaniem pełnej wydajności potoku
rozkazowego.
z
Spis literatury do wykładu
1. Organizacja i architektura komputerów, B.S. Chalk, WNT, 1996,
2. Podstawy budowy i działania komputerów, A. Skorupski, WKA, 2000.
3. Architektura komputerów, J. Biernat, Oficyna Wydawnicza Politechniki
Wrocławskiej, 1999.
4. Organizacja i architektura systemu komputerowego, W. Stallings, WNT,
2000.


Wyszukiwarka

Podobne podstrony:
2005 MAJ OKE PR II
biologia model PR (2)
2005 GRUDZIEŃ OKE PR II ODP
wos model PR
hiszpanski pr ii 13
matematyka model PR
rosyjski PR II
model Arkusz II
2006 MAJ OKE PR II
fizyka model pr
2011 MAJ OKE PR II

więcej podobnych podstron