---
# System prepended metadata

title: 'Ćwiczenia 6, grupa cz. 14-16, 14. kwietnia 2022'
tags: [SYK21, pwit, ćwiczenia]

---

# Ćwiczenia 6, grupa cz. 14-16, 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   |
| ----------------------:| ----- | --- | --- | --- | --- | --- | --- | --- | --- |
Kamil Banaś              |       |     |     |     |     |     |     |     |     | 
Mateusz Burdyna          |       |     |     |     |     |     |     |     |     |
Dariusz Ciesielski       |   X    |     |     |     |     |  X   |     |     |     |
Dawid Dudek              |   X   |  X  | X   |  X  |  X  |  X  |==X==|  X  |     |
Mikołaj Dworszczak       |       |     |     |     |     |     |     |     |     |
Przemysław Grochal       |   X   |  X  |  X  |  X  |  X  |  X  |     |     |     |
Adam Jarząbek            |   X    |   ==X==  |   X  |   X  |     |     |     |     |     |
Anna Karykowska          |   X   |  X  |  X  |  X  |     |  ==X==  |  X  |  X  |     |
Oleś Kulczewicz          |       |     |     |     |     |     |     |     |     |
Pola Marciniak           |   X   |  X   |  X   |  X   |     |  X   |  X   |==X==   |     |
Mikołaj Mroziuk          |  X    |  X  |  X  |  X  |     | X    |  X  |  X  |     |
Marcelina Oset           |   X   |  X  |  X  |  X  |     |     |     |     |     |
Natalia Piasta           |    X   |  X   |  X   |  X   |     |  X   |  X   |   X  |     |
Krzysztof Piekarczyk     |    X   |     |     |     |     |   X  |     |     |     |
Marcin Płaza             |  X  |  X   |  X   |     |     | X    |     |     |     |
Paweł Richert            |   ==X==   |  X  |  X  |  X  |    |   X|   X  |  X   |   |
Rafał Starypan           |   X    |  X   |   X  |     X|     |     |     |     |     |
Dawid Strojek            |   X   |  X  |     |     |     |  X  |     |  X  |     |
Mateusz Suszek           |   X    |  X   |  ==X==   |  X   |     |  X 
   |     |     |     |
Wojciech Śniady          |   X   |  X   |  X   |  X   |     |  ==X==   |     |     |     | 
Volha Tsekalo            |   X    | X    |  X   |  X   |     |  ==X==   |     |     |     |
Yana Vashkevich          |   X    |  X   |  X   |    |     |  X |     |     |     |
Konrad Woźniak           |   X    |  X   |  X   |  X   |     |  X   |     |     |     |
Natalia Czerep           |       |     |     |     |     |     |     |     |     |
Joanna Stachowicz        |   X   |  X  |     |     |     |  X  |     |     |     |
:::





:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::




## Zadanie 1
:::success
Autor: Paweł Richert
![](https://i.imgur.com/L4kQZe9.png)

:::

## Zadanie 2
:::success
Autor: Adam Jarząbek
:::
![](https://i.imgur.com/YLU5NHQ.png)
![](https://i.imgur.com/f00Wueb.png)
![](https://i.imgur.com/qyBU16q.png)

![](https://i.imgur.com/a2myHMZ.png)


## Zadanie 3
:::success
Autor: Mateusz Suszek
:::
![](https://i.imgur.com/6rlnAxZ.png)

![](https://i.imgur.com/QFIjOkE.png)


## Zadanie 4
:::success
Autor: Marcelina Oset

![](https://i.imgur.com/RtetkOb.png)


a)
![](https://i.imgur.com/jmRqnwj.png)


b)
![](https://i.imgur.com/3vHK1QL.png)

:::

## Zadanie 5
:::success
Autor: Przemysław Grochal
:::
Wczesne wykonywanie skoku, jak nazwa wskazuje, polega na podjęcie decyzji o skoku i obliczeniu adresu następnej instrukcji wcześniej, przed fazą MEM. Zamiast tego, następuje to w fazie odczytu rejestru. Motywacją stojącą za taką decyzją projektową jest próba ograniczenia liczby niepotrzebnie wykonywanych instrukcji, wywołanych błędnym przewidywaniem skoku, które trzeba później "odwołać" (flushować), co jest dla nas kosztowne.

**a)**
1. $LOOP: s_0 = *s3$
2. $s_1 = *(s_3 + 8)$
3. $s_2 = s_0 + s_1$
4. $s_3 = s_3 - 16$
5. $if\quad s_2\neq0\quad goto\quad LOOP$
![](https://i.imgur.com/5PL9PgP.png)

**b)**
1. $s_0 = s_1 + s_2$
2. $if\quad s_0\neq0\quad goto\quad SOMEWHERE$

![](https://i.imgur.com/hAjsTSL.png)


## Zadanie 6
:::success
Autor: Anna Karykowska
:::
![](https://i.imgur.com/lzFkr0c.png)
![](https://i.imgur.com/Bq0HVjn.png)

operacje skoku: 25%
#### a) always-taken
błędna predykcja skoku: 55%
przyrost CPI: 25% * 55% * 1 = 0.1375

#### b) always-not-taken
błędna predykcja skoku: 45%
przyrost CPI: 25% * 45% * 1 = 0.1125

#### c) predyktor 2-bitowy
błędna predykcja skoku: 15%
przyrost CPI: 25% * 15% * 1 = 0.0375

#### d) redukcja liczby skoków
operacje skoku: 0.5 * 25% = 12.5%
Przyrost CPI będzie o połowę mniejszy.

## Zadanie 7
:::success
Autor: Mikołaj Mroziuk
:::
a)

![](https://i.imgur.com/KOCR76D.png)

b)
Dostęp do pamięci instrukcji jest potrzebny w każdej instrukcji. Instrukkcje używające pamięci zawsze zatrzymają działanie programu.

c)
Instrukcja nop jest pusta, musi być zapisana w pamięci instrukcji. Hazard strukturalny jest spowodowany dostępem do pamięci instrukcji więc dodanie instrukcji nop nie poprawi działania
## Zadanie 8
:::success
Autor: Pola Marciniak
:::

![](https://i.imgur.com/PJY4Zmy.png)

Jak widać z poprzedniego zadania w procesorze z jednym układem pamięci roboczej cykle będą tracone podczas wykonywania instrukcji x=*(y+imm) oraz *(x+imm)=y.
Każde polecenie odłoży pozostałe na 1 cykl (dla instrukcji oddalonej o 3).
Liczbę utraconych cykli możemy wyrazić jako (rozkład pierwszej + rozkład drugiej instrukcji) * #wykonywanych instrukcji

#utraconych cykli = (0,25+0,11) * #wykonywanych instrukcji=0,36 * #wykonywanych instrukcji

## Zadanie 9
:::success
Anna Karykowska
:::

![](https://i.imgur.com/c1qTmOn.png)

Rysunek prezentujący forwarding:
![](https://i.imgur.com/cYofUC6.png)

Forwarding przy złączonych fazach EX i MEM:
![](https://i.imgur.com/ZdQJf7s.png)

Nie ma problemów jeżeli chodzi o kształt potoków, nowe hazardy itd. Jedyne problemy (raczej mało istotne przy znanych nam architekturach) dotyczą tego, że przerabiając program, aby mieć instrukcje dostępu do pamięci tylko w postaci 'x = *y' i '*x = y', uzyskamy więcej instrukcji (bo musimy niektóre instrukcje rozbić na 2).

Wniosek: zmiana wpływa pozytywnie na wydajność.


