owned this note
owned this note
Published
Linked with GitHub
# Ćwiczenia 7, grupa śr. 12-14, 10 kwietnia 2024
###### tags: `SYK24` `ćwiczenia` `pwit`
## Deklaracje
Gotowość rozwiązania zadania należy wyrazić poprzez postawienie X w odpowiedniej kolumnie! Jeśli pożądasz zreferować dane zadanie (co najwyżej jedno!) w trakcie dyskusji oznacz je znakiem ==X== na żółtym tle.
**UWAGA: Tabelkę wolno edytować tylko wtedy, gdy jest na zielonym tle!**
:::danger
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| ----------------------:| -----| --- | --- | --- | --- | --- | --- | --- | --- |
Mikołaj Balwicki | X | X | X | X | X | X | | | |
Małgorzata Galińska | X | ==X== | X | X | | X | | | |
Maria Hreniak | X | X | ==X== | X | X | X | | | |
Jakub Jankowski | X | X | X | | | X | | | |
Mikołaj Kalitka | X | X | X | X | | X | | | |
Julia Konefał | X | X | X | | | ==X== | | | |
Julia Kulczycka | ==X== | X | X | X | X | X | | | |
Cecylia Łyjak | | | | | | | | | |
Adam Majchrowski | X | X | X | ==X== | X | X | | | |
Piotr Mańkowski | | | | | | | | | |
Piotr Salamon | X | X | X | | | | | | |
Maciej Szałasz | X | X | X | X | X | X | | | |
:::
:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::
## Zadanie 1
:::success
Autor:Julia Kulczycka
:::
**Hazard** to sytuacja, w której kolejne operacje odczytuje wartość zmiennej zanim poprzednia operacja przypisze jej nową wartość.
![image](https://hackmd.io/_uploads/SyDDojQgA.png)
### Oczekiwane wartości:
```
s0 = 22 + 5 = 27
s2 = 27 + 22 = 49
s3 = 27 + 15 = 42
s4 = 27 + 27 = 54
```
### Rzeczywiste wartości
Popatrzmy na diagram:
![image](https://hackmd.io/_uploads/HJSuRoXgC.png)
Zauważmy, że "nowa" wartość s0=27 (której wyliczanie zaczęło się w pierwszej operacji), zostanie zapisana dopiero w pierwszej połowie 5 cyklu. Dlatego do końca 4 będziemy mieć s0=11.
```
s0 = 22 + 5 = 27
s2 = 11 + 22 = 33
s3 = 11 + 15 = 26
s4 = 27 + 27 = 54
```
### Rozwiązanie z NOP
Nowej wartości s0 pierwszy raz potrzebowaliśmy w drugiej połowie 3 cyklu. Zatem opóźnijmy kolejne operacje o 2 cykle, żeby użyć jej dopiero, gdy będzie "gotowa":
```
s0 = s1 + 5
NOP
NOP
s2 = s0 + s1
s3 = s0 + 15
s4 = s0 + s0
```
![image](https://hackmd.io/_uploads/SJy3MnQlC.png)
## Zadanie 2
:::success
Autor: Małgorzata Galińska (punkty a i b), Jakub Jankowski (punkty c i d)
:::
![image](https://hackmd.io/_uploads/H1rlPeEeC.png)
![image](https://hackmd.io/_uploads/Syp9dk4xA.png)
![image](https://hackmd.io/_uploads/Hy6f9k4x0.png)
## Zadanie 3
:::success
Autor: Maria Hreniak
:::
![image](https://hackmd.io/_uploads/HyRTOyElA.png)
forward -> turkusowe strzałki
stall -> żółte
![image](https://hackmd.io/_uploads/BkGCFyNl0.png)
## Zadanie 4
:::success
Autor: Adam Majchrowski
a)
![image](https://hackmd.io/_uploads/HJycuyNgC.png)
b)
![image](https://hackmd.io/_uploads/Skns_kNx0.png)
:::
## Zadanie 5
:::success
Autor: Mikołaj Balwicki
:::
![image](https://hackmd.io/_uploads/rJzN9kVlA.png)
![image](https://hackmd.io/_uploads/r1Bg5JExC.png)
![image](https://hackmd.io/_uploads/BkBtUeElR.png)
## Zadanie 6
:::success
Autor: Julia Konefał
![Screenshot from 2024-04-10 12-24-13](https://hackmd.io/_uploads/Sk5yYJElR.png)
Jaki jest przyrost wartości CPI wywołany błędnie
przewidzianymi skokami dla ...
$25$% instrukcji to if
a)
always taken
błędne predykcje $55$%
CPI : $0,25 * 0,55 * 1 = 0,1375$
b)
always not taken
błędne predykcje $45$%
CPI : $0,25 * 0,45 * 1 = 0,1125$
c)
predykator 2-bit
błędne predykcje $15$%
CPI : $0,25 * 0,15 * 1 = 0,0375$
d)
zastąpienie arytmetycznymi działaniami operacji skoku
$12,5$% instrukcji to if => przyspieszenie będzie zawsze o połowę
always taken
błędne predykcje $55$%
CPI : $0,125 * 0,55 * 1 = 0,06875$
always not taken
błędne predykcje $45$%
CPI : $0,125 * 0,45 * 1 = 0,05625$
predykator 2-bit
błędne predykcje $15$%
CPI : $0,125 * 0,15 * 1 = 0,01875$
:::
## Zadanie 7
:::success
Autor: Jakub Jankowski
![image](https://hackmd.io/_uploads/S1duf7TlR.png)
![image](https://hackmd.io/_uploads/ryGjMQ6gC.png)
:::
## Zadanie 8
:::success
Autor: Mikołaj Balwicki
:::
![image](https://hackmd.io/_uploads/H1AyE7TgR.png)
Każda instrukcja musi zostać pobrana z rejestru instrukcji. W związku z tym każda (poza dwoma ostatnimi) instrukcja odczytu lub zapisu do pamięci poskutkuje opóźnieniem potoku. Może ono jednak wystąpić w tym samym czasie co opóźnienie inną instrukcją, wtedy jest negowane.
Zatem OP = 36% * (100% - P)
![image](https://hackmd.io/_uploads/rJ6YpQpeR.png)
P = *wiersz 3 to skok* 12% + *wiersz 3 to binop albo load* (25% + 52% )(12%+(25% * 52%) + *wiersz 3 to write* 11% * (12% * 25% + 11% * 52%)
P = 12% + 77% *(12% + 13%) + 11% *(3% + 63%)
P = 12% + 19,25% + 7,26% = 38,51%
OP = 36% * (100% - 38,51%) = 36% * 61,49% = ~22,14% = ~0.22/instrukcję
## Zadanie 9
:::success
Autor: Jakub Jankowski
![image](https://hackmd.io/_uploads/SyYtzX6lC.png)
:::