---
# System prepended metadata

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

---

# Ć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
:::
![](https://i.imgur.com/ItELoHp.jpg)

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


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

![](https://i.imgur.com/wPsYX4p.png)
![](https://i.imgur.com/r7Tp9TB.jpg)


## Zadanie 3
:::success


Autor: Michał Hetnar
:::
![](https://i.imgur.com/FlenCDw.jpg)


## Zadanie 4
:::success
Autor: Filip Komorowski
:::

https://miro.com/app/board/uXjVO8vekU8=/

## Zadanie 5
:::success
Autor: Kamil Tasarz


![](https://imgur.com/gJpAaPl.png)
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).
![](https://imgur.com/k4ZRHG8.png)

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

b)
E: s1 = t + 5
  s0 = *(s1 + 1)
  if s0==s1 goto E
![](https://imgur.com/VQDQWfZ.png)

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

## Zadanie 6
:::success
Autor: Szymon Mleczko
:::
![](https://i.imgur.com/aCSLd4Z.jpg)


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
![](https://i.imgur.com/n5Bpvr7.jpg)

### 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
:::
![](https://i.imgur.com/XolmSNJ.png)

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 (?):

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

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

```
y = *(x+imm)

t = x + imm
y = *t
```

```
x = *y
z = x + 5
```
