# Ćwiczenia 7, grupa cz. 10-12, 11 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 |
| ----------------------:| -----| --- | --- | --- | --- | --- | --- | --- | --- |
Borys Adamiak | X | X | | | | | | | X |
Michał Chawar | X | X | X | X | | | | | X |
Julia Cygan | X | X | | | | | | | X |
Maciej Dengusiak | ==X== | X | X | | | X | X | X | X |
Patryk Flama | X | X | | | | X | | | X |
Szymon Fluder | X | X | X | X | X | X | X | X |==X==|
Aleksandra Jędrzejak | X | X | X | X | X | | | | |
Mikołaj Karapka | X | ==X== | X | X | | X | | | X |
Viktoriia Kashpruk | X | X | X | X | X | X | | | X |
Wiktor Małek | X | X | X | X | X | X | X | X | X |
Błażej Molik | X | X | X | X | | X | | | |
Andrzej Morawski | | | | | | | | | |
Konrad Oleksy | | | | | | | | | |
Lucjan Pucelak | | | | | | | | | |
Aleksandra Sęk | | | | | | | | | |
Radosław Śliwiński | | | | | | | | | |
Piotr Traczyński | X | X | X | X | X | X | X | X | X |
Katarzyna Trzos | | | | | | | | | |
Piotr Warząchowski | X | X | | | | | | | X |
Olga Zaborska | X | X | X | | | X | | | |
:::
:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::
## Zadanie 1
:::success
Autor: Maciej Dengusiak



:::
## Zadanie 2
:::success
Autor: Mikołaj Karapka (punkty a i b), Aleksandra Jędrzejak (punkty c i d)

**a)**
```
s1 = s2 + 5
t0 = t1 - t2
t3 = *(s1 + 15)
*(t0 + 72) = t5
t2 = s4 & s5
```

**b)**
```
s0 = t0 + t1
s1 = t2 - t3
s2 = s0 & s1
s3 = t4 | t5
s4 = s2 + s3
```

:::
**c)**

**d)**

## Zadanie 3
:::success
Autor: Michał Chawar
:::


I po skoku mamy dalej:

Procesor nie wykonuje użytecznej pracy w miejscach oznaczonych $\color{red}{STALL}$ i $\color{cyan}{FLUSH}$. Ponadto również fazy oznaczone przez $\color{green}{(A)}$ okazują się być nieistotne dla dalszej pracy, bo została podjęta decyzja o skoku.
## Zadanie 4
:::success
Autor: Błażej Molik
:::

a) always-taken, czyli zakładamy, że zawsze wykona się skok pętli, a z zadania 3 mamy 2 iteracje, więc jest to to samo, co w zadaniu 3

b) always-not-taken, czyli zakładamy, że skok pętli się nie wykona. W przypadku, w którym okaże się, że instrukcja skoku jednak zostanie wykonana, flushujemy instrukcje, które były po pętli.

## Zadanie 5
:::success
Autor: Wiktor Małek
:::
early branch execution - jest to dodanie kolejnego układu, który zaraz po dereferencji A1, A2 w fazie decode (wyjście RD1, RD2) porówna RD1 i RD2 czy są takie same, jeśli są to skok zostanie wykonany
### a)

### b)
```
s = a1 + a2
if s != 0 goto LOOP
```
W momencie gdy zdereferencjonujemy s w fazie decode w instrukcji ifa dostaniemy starą wartość s, bo ta z poprzedniej linii nie zdąży się jeszce policzyć.
## Zadanie 6
:::success
Autor: Piotr Traczyński
:::

Zważając, że procesor używa wczesnego wykonywania skoków i w programi nie ma hazardów danych to każda błędna instrukcja skoku zwiększy sumaryczną ilość cykli o 1.
a)
Prostym rachunkiem:
$CPI = \frac{C_0 + I \cdot 0.25 \cdot (1 - P(goto))}{I} = \frac{C_0 + I \cdot 0.1375}{I} = \frac{C_0}{I} + 0.1375$
otrzymujemy, że zwiększy CPI o 0.1375.
b)
$0.45 \cdot 0.25 = 0.1125$
c)
$0.15 \cdot 0.25 = 0.0375$
d)
W każdym z przypadku w oczywisty sposób przyrost CPI zmniejszy się o połowę.
## Zadanie 7
:::success
Autor: Maciej Dengusiak


Redukcja liczby cykli w których potok jest wstrzymany jest niemożliwa.
Kompilator nie ma jak sobie z tym poradzić.
Procesor radzi sobie z tym problem wstawiając `stall`
:::
## Zadanie 8
:::success
Autor: Wiktor Małek
:::

Czyli mamy zliczyć sytuacje, w których będzie trzeba uzyskać dostęp do pamięci.

Widzimy, że 36% instrukcji potrzebuje dostępu do pamięci, każda taka instrukcja wstrzyma potok na jeden cykl, czyli będzie 36% cykli więcej.
(gdy jedna instrukcja potrzebuje uzyskać dostęp do pamięci inna nie może zostać wczytana)
## Zadanie 9
:::success
Autor: Szymon Fluder

Jest to identyczna sytuacja do tej z zadania 11 z listy nr.6.
Zmiana ta wpłynie pozytywnie na czas cyklu procesora - skróci on się, gdyż skróciliśmy czas najdłuższej instrukcji (`lw`).
Zmiana ta nie będzie jednoznacznie pozytywna. Skrócimy czas cyklu, lecz teraz za każdym razem, gdy będziemy chcieli użyć instrukcji typu `x = *(y + imm)`, to będzie ona musiała być rozbita na dwie instrukcje, których sumaryczny czas wykonania jest dłuższy, niż oryginalny czas `lw`. Wydajność procesora będzie w dużej mierze zależała od programów jakie będzie on wykonywał (głównie jak dużo będzie w nich dostępów do pamięci z offsetem).
:::