# 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$ ![](https://i.imgur.com/VZH1DJ3.png) [Wikipedia Hazardy](https://en.wikipedia.org/wiki/Hazard_(computer_architecture)) ## Zadanie 2 ![](https://i.imgur.com/o07E0zk.png) 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. ![](https://i.imgur.com/CtcRa6G.png) 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$| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |