# Ćwiczenia 6, grupa śr. 10-12, 5 kwietnia 2023
###### tags: `SYK23` `ć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 |
| ----------------------:| ----- | --- | --- | --- | --- | --- | --- | --- | --- |
Mateusz Biłyk | x | | x | | | x | | | |
Mikołaj Dworszczak | | | | | | | | | |
Kacper Jóźwiak | X | X | | | | | | | |
Dominik Kiełbowicz | | | | | | | | | |
Michał Kolasa | | | | | | | | | |
Konrad Kowalczyk | X | X | | | | | | | |
Oskar Kropielnicki | X | X | X | | |==X==| | | X |
Anna Krysta | X | X | X | X | X | X | X | X | X |
Jakub Krzyżowski | | | | | | | | | |
Oskar Kubkowski | X | ==X== | X | | | X | X | X | |
Mateusz Mazur | X | X | X | X | | X | | | |
Barbara Moczulska | X | X | X | X | X | X | | | |
Kacper Sojda | | | | | | | | | |
Marta Strzelec | ==x== | x | x | x | | | x | x | |
Mikołaj Swoboda | X | X | X | X | X | | X | | |
Filip Szczepański | X | X | | | | X | X | X | |
Julian Włodarek | X | X | | | | X | X | X | |
Beata Łakoma | x | x | x | x | x | x | x | x | |
Michał Łukasik | X | X | X | X | X | | | | |
:::
:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::
## Zadanie 1
:::success
Autor: Marta Strzelec
:::


$s0 = 22 + 5 = 27$
$s2 = 11 + 22 = 33$ (s0 jest nadal niewyliczone w 1. instrukcji)
$s3 = 11 + 15 = 26$ (s0 jest nadal niewyliczone w 1. instrukcji)
$s4 = 27 + 27 = 54$ (s0 już wyliczone)
Wyniki powinny być takie:
$s0 = 22 + 5 = 27$
$s2 = 27 + 22 = 49$
$s3 = 27 + 15 = 42$
$s4 = 27 + 27 = 54$

## Zadanie 2
:::success
Autor: Oskar Kubkowski
:::





## Zadanie 3
:::success
Autor: Michał Łukasik
:::

Na czerwono zaznaczony podpunkt b)

## Zadanie 4
:::success
Autor: Mateusz Mazur
:::

### Always taken
Rysunek podobny jak w 3
### Always not taken

## Zadanie 5
:::success
Autor: Barbara Moczulska
:::

**early branch execution** - (Wczesne wykonywanie skoków) decyzja o skoku jest podejmowana jak najwcześniej w potoku procesora, zanim wszystkie poprzedzające instrukcje zostały ukończone.
W fazie dekodowania instrukcji (nie w ALU) procesor analizuje warunek skoku i podejmuje decyzję o skoku lub nie skoku. Jeśli procesor podejmuje decyzję o skoku, licznik rozkazów jest aktualizowany, aby wskazywał na adres docelowy instrukcji, która zostanie wykonana następnie. W przeciwnym przypadku, kolejna instrukcja jest pobierana i wykonana. W ten sposob chcemy ograniczyć liczbę niepotrzbnych instrukcji które są wykonane przy błędnym przewidywaniu decyzji o skoku.

a)

b)

## Zadanie 6
:::success
Autor: Oskar Kropielnicki
:::




:::spoiler fajny slajd

:::
### a
$\text{CPI}_{\text{lw}} = 1(1) + 2(0) = 1$
$\text{CPI}_{\text{beq}} = 1(0.45) + 2(0.55) = 1.55$
$\text{Average CPI} = 1(0.45) + 1.55(0.25) + 1(0.25) + 1(0.05) = 1.1375$
### b
$\text{CPI}_{\text{lw}} = 1(1) + 2(0) = 1$
$\text{CPI}_{\text{beq}} = 1(0.55) + 2(0.45) = 1.45$
$\text{Average CPI} = 1(0.45) + 1.45(0.25) + 1(0.25) + 1(0.05) = 1.1125$
### c
$\text{CPI}_{\text{lw}} = 1(1) + 2(0) = 1$
$\text{CPI}_{\text{beq}} = 1(0.85) + 2(0.15) = 1.15$
$\text{Average CPI} = 1(0.45) + 1.15(0.25) + 1(0.25) + 1(0.05) = 1.0375$
### d
| | |
|-|-|
|`if x relop y goto L`|57,5%|
|`x = y binop z` |12,5%|
#### a
$\text{CPI}_{\text{lw}} = 1(1) + 2(0) = 1$
$\text{CPI}_{\text{beq}} = 1(0.45) + 2(0.55) = 1.55$
$\text{Average CPI} = 1(0.575) + 1.55(0.125) + 1(0.25) + 1(0.05) = 1.06875$
#### b
$\text{CPI}_{\text{lw}} = 1(1) + 2(0) = 1$
$\text{CPI}_{\text{beq}} = 1(0.55) + 2(0.45) = 1.45$
$\text{Average CPI} = 1(0.575) + 1.45(0.125) + 1(0.25) + 1(0.05) = 1.05625$
#### c
$\text{CPI}_{\text{lw}} = 1(1) + 2(0) = 1$
$\text{CPI}_{\text{beq}} = 1(0.85) + 2(0.15) = 1.15$
$\text{Average CPI} = 1(0.575) + 1.15(0.125) + 1(0.25) + 1(0.05) = 1.01875$
## Zadanie 7
:::success
Autor: Beata Łakoma
:::
a)

b)Nie.
Każda instrukcja musi wykonać dostęp do pamięci, z tego jeśli instrukcja wykonuje dwa dostępy to zawsze zablokuje dostęp do pamięci w trzecim cyklu zatrzymując potok.
c)Nie.
Nop też jest instrukcją więc też zostaje zablokowany jeśli instrukcje poprzednie wykonują dostęp do pamięci.
## Zadanie 8
:::success
Autor: Filip Szczepański
:::

25% + 11% = 36% Każda instrukcja z dostępem do pamięci 3 cykle po rozpoczęciu uniemożliwia wczytanie kolejnej instrukcji co kosztuje nas 1 cykl. Operacje z dostępem do pamięci stanowią 36% programu, zatem tyle będzie dodatkowych cykli wywołanych wstrzymaniami potoku.
## Zadanie 9
:::success
Autor: Anna Krysta
:::
Modyfikacja polegająca na użyciu instrukcji dostępu do pamięci w postaci x=*y lub *x=y możliwi połączenie faz EX i MEM w jedną fazę, w wyniku czego powstaje potok czterofazowy zamiast typowego pięciofazowego.
Łączenie tych faz może potencjalnie skrócić długość cyklu potoku, ponieważ jest o jedną fazę mniej do skończenia wykonywania instrukcji. Będzie to jednocześnie oznaczać, że będziemy potrzebować czasami dodać jeden cykl wykonania spowodowany wykonaniem instrukcji *(x + imm) = y lub y = *(x + imm). W tych obu przypadkach będziemy potrzebować dwóch cyklu do wykonania instrukcji. W zależności od tego, w jakiej części te instrukcje będą występować w programie, wydajność procesora może się różnić od tradycyjnego procesora z pięcioma cyklami. Jednak to skrócenie długości cyklu niekoniecznie musi prowadzić do znacznej poprawy wydajności. Wynika to z faktu, że ogólna wydajność procesora potokowego zależy nie tylko od długości cykli, ale także od złożoności wykonywania instrukcji i potencjalnych.
Jeśli modyfikacja ta spowoduje skrócenie długości cyklu bez wprowadzenia nowych hazardów i zwiększenia głębokości potoku (opóźnienia), to wpływ na wydajność może być pozytywny. Jeśli jednak modyfikacja wprowadzi nowe hazardy lub zwiększy złożoność potoku, wpływ na wydajność może być negatywny.