# Ćwiczenia 6, grupa cz. 12-14, 14. kwietnia 2022
###### tags: `SYK21` `ć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 |
| ----------------------:| ----- | --- | --- | --- | --- | --- | --- | --- | --- |
Daniel Boguszewski | | | | | | | | | |
Adam Ciężkowski | | | | | | | | | |
Jacek Długopolski | X | X | | | | | | | |
Jakub Fila | X | X | | | | | | | |
Krzysztof Grynkiewicz | | | | | | | | | |
Michał Hetnar | x | x | x | x | x | | | | |
Hubert Jabłoński | x | x | x | x | x | | x | | |
Antoni Kamiński | | | | | | | | | |
Paweł Karaś | X | ==X== | X | X | X | X | X | | |
Emil Kisielewicz | x | x | x | x | x | | | | |
Kacper Komenda | ==X== | X | X | X | | X | | | |
Filip Komorowski | x | x | x | ==x== | x | x | x | x | |
Piotr Piesiak | x | x | x | x | x | x |x | x | x |
Artur Krzyżyński | x | x | x | x | x | x | x | x | x |
Patryk Mazur | X | X | | | | | | | |
Szymon Mleczko | X | X | X | | | X | | | |
Michał Mróz | X | X | X | X | X | | | | |
Dominik Olejarz | | | | | | | | | |
Magdalena Słonińska | X | X | X | X | | | | | |
Oleś Kulczewicz | X | X | | X | | | | | |
Adam Szeruda | X | X | X | X | X | X | X | X | X |
Kamil Tasarz | X | X | | X | X | X | | | |
Michał Zieliński | X |==X==| X | X | X | X | X | X | X |
:::
**Tutaj można do-deklarować zad. 11. z listy 5:**
* Filip Komorowski
* Piotr Piesiak
* Adam Szeruda
* Artur Krzyżyński
* Michał Mróz
:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::
## Zadanie 1
:::success
Autor: Kacper Komenda
:::


## Zadanie 2
:::success
Autor: Paweł Karaś
:::


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

## Zadanie 4
:::success
Autor: Filip Komorowski
:::
https://miro.com/app/board/uXjVO8vekU8=/
## Zadanie 5
:::success
Autor: Kamil Tasarz

Early branch execution bazuje na tym, że warunek "x relop y" jest prosty do sprawdzenia i nie potrzebuje ALU. Można zatem wykonanie porównania przenieść wcześniej. W fazie dekodowania danych sprawdzany jest warunek i odpowiednia informacja wysyłana jest do jednostki sterującej i dalej do licznika instrukcji. Tym sposobem, kara za niepoprawne przewidzenie skoku jest równa 1 instrukcji (1 cyklowi zegara).

a)

b)
E: s1 = t + 5
s0 = *(s1 + 1)
if s0==s1 goto E


:::
## Zadanie 6
:::success
Autor: Szymon Mleczko
:::

Oprertacje skoku wystépjá w programach 25% istrukcji a koszt błędu wynosi 1 bo brak hazardów i wczesne wykonania skoku
ze strony instrukcji cykli 1 bo tracimy jeden cykl a procesor w naszym rozumowaniu pobiera 1 instrukcje.
1) always taken
błędne predykcje 55%
CPI : 0,25 * 0,55 * 1 = 0,1375
2) always not taken
błędne predykcje 45%
CPI : 0,25 * 0,45 * 1 = 0,1125
3) predykator 2-bit
błędne predykcje 15%
CPI : 0,25 * 0,15 * 1 = 0,0375
4) zastąpienie arytmetycznymi działaniami
operacji skoku 12,5%
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: Michał Zieliński
:::
### Prolog
Rozważmy następujący program:
```
*(s3 + 12) = s5
s5 = *(s3 + 8)
s4 = s2 - s1
if s4 == 0 goto Label
s2 = s0 + s1
s2 = s6 - s1
```
gdzie Label jest pewną etykietą w programie.
Zmodyfikowaliśmy procesor potokowy w ten sposób, że występuje w nim tylko jeden układ pamięci roboczej, przeznaczony dla dostępu do danych i instrukcji jednocześnie. Spowoduje to powstanie nowego typu hazardu — hazardu strukturalnego, w każdym cyklu, w którym procesor będzie jednocześnie pobierał nową instrukcję z pamięci i wykonywał dostęp do pamięci na rzecz instrukcji już wykonującej się. W takiej sytuacji należy wstrzymać potok.
### a
#### Polecenie
Narysuj diagram wykonania dla powyższego kodu.
#### Diagram

### b
#### Polecenie
Czy można zredukować liczbę cykli w których potok jest wstrzymany zmieniając kolejność instrukcji w programie (z zachowaniem jego semantyki)?
#### Odpowiedź
Nie jest to możliwe
### c
#### Polecenie
Czy kompilator może radzić sobie z tego typu hazardami przez wstawienie do programu instrukcji nop? Czy też problem musi być rozwiązany przez sam procesor?
#### Odpowiedź
Instrukcja nop nie jest odpowiednim sposobem radzenia sobie z tego typu hazardem. Nop też jest instrukcją, więc też wymaga dostępu do pamięci - źródła omawianego hazardu.
## Zadanie 8
:::success
Autor: Artur Krzyżyński
:::

Każda instrukcja z dostępem do pamięci uniemożliwia rozpoczęcie kolejnej instrukcji 3 cykle później, ponieważ nie możemy wtedy wczytać instrukcji, bo mamy tylko jeden układ pamięci roboczej przeznaczony do dostępu do danych i instrukcji. Także rozpoczęcie instrukcji odczytu lub zapisu wstrzymuje o jeden cykl, więc dla naszego rozkładu w zadaniu, mamy 25% + 11% = 36% dodatkowych cykli.
## Zadanie 9
:::success
Autor: Adam Szeruda
:::
> Załóżmy, że wszystkie instrukcje dostępu do pamięci są postaci `x = *y` lub `*x = y`. Dzięki temu żadna instrukcja nie używa jednocześnie faz EX i MEM potoku. Fazy te można zatem połączyć uzyskując czterofazowy potok. W jaki sposób ta modyfikacja wpłynie długość cyklu procesora? Czy wpływ na wydajność będzie jednoznacznie pozytywny?
Wpływ pozytywny: zmniejszenie CPI, przesunięcie fazy MEM wcześniej potencjalnie skraca czas oczekiwania (stalling).
Wpływ negatywny: jak w zad. 11 z listy 5: zamiana większości pojedynczych instrukcji dostępu do pamięci na dwie instrukcje.
Forwarding (?):


```
y = *(x+imm)
t = x + imm
y = *t
```
```
x = *y
z = x + 5
```