# SYK 7
## Zadanie 1
`Hazard sterowania` występuje wtedy, gdy skok został błędnie przewidziany.
`Hazard strukturalny` występuje wtedy, gdy 2 instrukcje chcą skorzystać z tego samego układu jednocześnie.
a) Nie może wystąpić żaden hazard
**Hazard sterowania** nie wystąpi, bo najpierw zakończy się instrukcja obliczająca warunek skoku, a dopiero potem zacznie się kolejna instrukcja
**Hazard strukturalny** nie może wystąpić, ponieważ w każdym cyklu wykonywana jest tylko 1 faza jednej instrukcji
**Hazad danych** nie wystąpi, bo instrukcje wykonywane są zgodnie z kolejnością, nic nie dzieje się równolegle
b) Może wystąpić
**hazard sterowania** przy skokach
**hazard strukturalny** jeżeli jakieś 2 fazy współdzielą jakiś układ
**hazard danych RAW**
$t0=s1+1$
$t1=t0*2$ (t0 jest odczytywane po nadpisaniu)
**hazard danych WAR**
Nie wystąpi ponieważ każda instrukcja ma tyle samo faz i faza
WB (writeback występuje na samym końcu, więc odczyt zawsze nastąpi wcześniej niż nadpisanie)
**hazard danych WAW**
Nie wystąpi ponieważ instrukcje są wykonywane po kolei każda ma tyle samo faz i fazy WB będą następować w odpowiedniej kolejności
c) Może wystąpić
**hazard sterowania** przy skokach
**hazard strukturalny** jeżeli jakieś 2 fazy współdzielą jakiś układ
**hazard danych WAR**
Nie wystąpi ponieważ odczyt nastąpi szybciej niż zapis
**hazard danych WAW**
$instrukcja\ 1a$
$instrukcja\ 1b$
$t0=s1/s2$
$t0=s1+s2$ (te dwie instrukcje są wykonywane równolegle)
$instrukcja\ 3a$
$instrukcja\ 3b$

[Wikipedia Hazardy](https://en.wikipedia.org/wiki/Hazard_(computer_architecture))
## Zadanie 2

W tablicy scoreboard przechowujemy informacje o pobranych instrukcjach.
Po pobraniu instrukcji następuje sprawdzenie, czy w potoku znajduje się instrukcja odczytująca docelowy rejestr. Jeśli tak następuje wstrzymanie potoku, a instrukcja oczekuje na wykonanie w buforze. W kolejnym cyklu następuje ponowne sprawdzenie powyższej sytuacji.
Następnie sprawdzane są rejestry używane jako argumenty w instrukcji. Jeśli któryś z nich jest zapisywany przez instrukcję w potoku, to również następuje wstrzymanie potoku.
Powyższe kroki pozwalają uniknąć hazardów RAW i WAR. Po ich pomyślnym wykonaniu następuje wykonanie instrukcji.
Obliczony wynik może zostać zapisany do docelowego rejestru dopiero wtedy, gdy wszystkie wcześniejsze instrukcje zapisujące do tego samego rejestru zostaną ukończone. W ten sposób unikamy hazardu WAW.
## Zadanie 3
Przetwarzanie potokowe przy uzyciu reorder buffera:
Pomysł polega na buforowaniu wyników działania instrukcji w kolejce. W register file trzymamy dodatkowy bit informujący o tym, czy dana wartość jest aktualna, oraz adres w ROB. Jeśli okaże się, że nie jest ona aktualna, patrzymy pod odpowiedni adres w ROB i jeśli tam dana wartość została już zapisana, to możemy z niej skorzystać. Jeśli w głowie kolejki znajdują się już poprawnie zapisane wartości, to wysyłamy je do RF i kolejka ROB przesuwa się do przodu.

Hazardy WAW i WAR nie występują
Hazard RAW nadal występuje, wtedy algorytm czeka (?) aż odpowiednia wartość zostanie zapisana do ROB
Wydajność reorder buffera jest lepsza niż scoreboardingu
przyspieszenie wynika z tego że wartość może zostać odczytana z ROB, a w scoreboardingu trzeba by uzyć stallingu
## Zadanie 4
### Podpunkt a)
| t | |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
| ------------- | - |-|-|-|-|-|-|-|-|-|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |
|$r3 = r1 * r2$ | |F|D|1|2|3|4|5|6|W| | | | | | | | | | | | | | | | | | | | | |
|$r5 = r4 + r3$ | | |F|.|.|.|.|.|.|D|1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | | | |
|$r6 = r4 + r1$ | | | | | | | | | |F|D |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | | |
|$r7 = r8 * r9$ | | | | | | | | | | |F |D |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | |
|$r4 = r3 + r7$ | | | | | | | | | | | |F |. |. |. |. |. |. |D |1 |2 |3 |4 |5 |6 |W | | | | | |
|$r10 = r5 * r6$| | | | | | | | | | | | | | | | | | |F |D |1 |2 |3 |4 |5 |6 |W | | | | |
26 cykli
### Podpunkt b)
| t | |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
| ------------- | - |-|-|-|-|-|-|-|-|-|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |
|$r3 = r1 * r2$ | |F|D|1|2|3|4|5|6|W| | | | | | | | | | | | | | | | | | | | | |
|$r5 = r4 + r3$ | | |F|.|.|.|.|.|.|D|1 |2 |3 |4 |W | | | | | | | | | | | | | | | | |
|$r6 = r4 + r1$ | | | | | | | | | |F|D |1 |2 |3 |4 |W | | | | | | | | | | | | | | | |
|$r7 = r8 * r9$ | | | | | | | | | | |F |D |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | |
|$r4 = r3 + r7$ | | | | | | | | | | | |F |. |. |. |. |. |. |D |1 |2 |3 |4 |W | | | | | | | |
|$r10 = r5 * r6$| | | | | | | | | | | | | | | | | | |F |D |1 |2 |3 |4 |5 |6 |W | | | | |
26 cykli
### Podpunkt c)
| t | |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
| ------------- | - |-|-|-|-|-|-|-|-|-|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |
|$r3 = r1 * r2$ | |F|D|1|2|3|4|5|6|W| | | | | | | | | | | | | | | | | | | | | |
|$r5 = r4 + r3$ | | |F|D| | | | | |1|2 |3 |==4== |W | | | | | | | | | | | | | | | | | |
|$r6 = r4 + r1$ | | | |F|D|1|2|3|==4==| | | | | |W | | | | | | | | | | | | | | | | |
|$r7 = r8 * r9$ | | | | |F|D|1|2|3|4|5 |==6== | | | |W | | | | | | | | | | | | | | | |
|$r4 = r3 + r7$ | | | | | |F|D| | | | | | |==1== |2 |3 |4 |W | | | | | | | | | | | | | | |
|$r10 = r5 * r6$| | | | | | |F|D| | | | | |==1== |2 |3 |4 |5 |6 |W | | | | | | | | | | | |
19 cykli
Forwarding oznaczono symbolicznie przez "==...=="
Hazardy strukturalne mogą wystąpić w przypadku gdy fazy "W" oraz "D" współdzielą pewien obszar procesora. Taki hazard byłby widoczny w a) (cykl 9 i 18), b) (cykl 9 i 18), w c) by nie wystąpił.
## Zadanie 5
### Podpunkt a)
Wykonujemy analogicznie jak w zadaniu 4.
| t | |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|
| ------------- | - |-|-|-|-|-|-|-|-|-|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |
|$r3 = r1 * r2$ | |F|D|1|2|3|4|5|6|W| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r5 = r4 + r3$ | | |F|.|.|.|.|.|.|D|1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | | | | | | | | | | | | | |
|$r7 = r2 + r6$ | | | | | | | | | |F|D |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | | | | | | | | | | | | |
|$r10 = r8 + r9$ | | | | | | | | | | |F |D |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | | | | | | | | | | | |
|$r11 = r7 * r10$| | | | | | | | | | | |F | | | | | | |D |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | | | | |
|$r5 = r5 * r11$ | | | | | | | | | | | | | | | | | | |F | | | | | | |D |1 |2 |3 |4 |5 |6 |W | | | | | | | | |
32 cykle
### Podpunkt b)
| t | |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|
| ------------- | - |-|-|-|-|-|-|-|-|-|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |
|$r3 = r1 * r2$ | |F|D|1|2|3|4|5|6|W| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r5 = r4 + r3$ | | |F| | | | | | |D|1 |2 |3 |4 |W | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r7 = r2 + r6$ | | | | | | | | | |F|D | | | |1 |2 |3 |4 |W | | | | | | | | | | | | | | | | | | | | | | |
|$r10 = r8 + r9$ | | | | | | | | | | |F |D | | | | | | |1 |2 |3 |4 |W | | | | | | | | | | | | | | | | | | |
|$r11 = r7 * r10$| | | | | | | | | | | |F | | | | | | | | | | |D |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | |
|$r5 = r5 * r11$ | | | | | | | | | | | | | | | | | | | | | | |F | | | | | | |D |1 |2 |3 |4 |5 |6 |W | | | | |
36 cykli
### Podpunkt c)
| t | |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|
| ------------- | - |-|-|-|-|-|-|-|-|-|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |
|$r3 = r1 * r2$ | |F|D|1|2|3|4|5|6|W| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r5 = r4 + r3$ | | |F|D| | | | | |1|2 |3 |4 |W | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r7 = r2 + r6$ | | | |F|D|1|2|3|4| | | | | |W | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r10 = r8 + r9$ | | | | |F|D| | | | | | | |1 |2 |3 |4 |W | | | | | | | | | | | | | | | | | | | | | | | |
|$r11 = r7 * r10$| | | | | |F|D| | | | | | | | | | |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | | | | | | | |
|$r5 = r5 * r11$ | | | | | | |F|D| | | | | | | | | | | | | | | |1 |2 |3 |4 |5 |6 |W | | | | | | | | | | | |
29 cykli
Hazardy strukturalne mogą wystąpić w przypadku gdy fazy "W" oraz "D" współdzielą pewien obszar procesora. Taki hazard byłby widoczny w a) (cykle 9, 18 i 25), b) (cykl 9, 22 i 29), w c) by nie wystąpił.
---
---
---
## Inne
| t | |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|
| ------------- | - |-|-|-|-|-|-|-|-|-|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |- |- |- | -|- |
|$r3 = r1 * r2$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r5 = r4 + r3$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r6 = r4 + r1$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r7 = r8 * r9$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r4 = r3 + r7$ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|$r10 = r5 * r6$| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |