---
# System prepended metadata

title: Raport do zadania opt-texture
tags: [ASK]

---

###### tags: `ASK`

# Raport do zadania opt-texture

### Autor: Piotr Stokłosa

Konfiguracja
---

Informacje o systemie:

 * Dystrybucja: Ubuntu 18.04.1
 * Jądro systemu: Linux 5.3.0
 * Kompilator: gcc 7.5.0
 * Procesor: Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz (Coffee Lake)
 * Liczba rdzeni: 6

Pamięć podręczna:

 * L1d: 32 KiB, 8-drożny (per rdzeń), rozmiar linii 64B
 * L2: 256 KiB, 4-drożny (per rdzeń), rozmiar linii 64B
 * L3: 9 MiB , 12-drożny (współdzielony), rozmiar linii 64B

Pamięć TLB:

 * L1d: 4 KiB strony, 4-drożny, 64 wpisy
 * L2: 4 KiB + 2 MiB strony, 12-drożny, 1536 wpisów

Informacje o pamięciach podręcznych uzyskano na podstawie wydruku programu
`x86info`, `lscpu`, `getconf`.

Wyniki eksperymentów
---

Porównanie obu implementacji index_0 oraz index_1 dla t = 65536 oraz bloku $2^6$.


| Implementacja | Czas     |  IPC  | L1 Data Cache miss ratio | L2 Data Cache miss ratio | L3 Cache miss ratio | Data TLB miss ratio | 
|:-------------:| -------- |:-----:|:------------------------:| ------------------------ | ------------------- |:-------------------:|
|    index_0    | 2.231310 | 0.763 |         95.526%          | 142.820%                 | 105.440%            |       69.460%       |
|    index_1    | 1.367902 | 2.147 |         73.584%          | 154.683%                 | 95.035%             |       1.977%        |

Porównanie wykonanych instrukcji na jeden element (Instrukcje na jeden element = Total instructions/Scanned elements).


| Implementacja | instrukcji na jeden element |
|:-------------:| --------------------------- |
|    index_0    | 13.26                       |
|    index_1    | 25.76                       |

Porównanie czasów i IPC przy zmianie wielkości bloków ($2^{n}$).

| Blok |   Czas   |  IPC  |
| ---- |:--------:|:-----:|
| 2    | 2.483187 | 1.162 |
| 3    | 2.306786 | 1.251 |
| 4    | 1.676091 | 1.722 |
| 5    | 1.388984 | 2.126 |
| 6    | 1.366802 | 2.149 |
| 7    | 1.843279 | 1.597 |
| 8    | 2.130802 | 1.317 |
| 9    | 2.494855 | 1.193 |

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

Wnioski
---

* Czemu zmiana organizacji danych spowodowała przyspieszenie?

Zmiana organizacji danych spowodowała przyspieszenie (IPC wzrosło prawie trzykrotnie). Widać to na tabeli w wynikach eksperymentów. Nowa implementacja lepiej korzysta z pamięci podręcznej, dzięki czemu mamy mniej chybień, a co za tym idzie lepszą lokalność odwołań do pamięci. 

* Czy translacja adresów ma zauważalny wpływ na wydajność przeglądania tekstury?

Translacja adresów ma wpływ na wydajność przeglądania tekstury, ale korzyści są na tyle duże (w przypadku index_1), że nie jest ona zuważalna.

* Jaki jest optymalny rozmiar kafla?

Po przeanalizowaniu tabeli oraz wykresu w wynikach eksperymentów najbardziej optymalny rozmiar kafla to $2^6$ (64), lecz rozmiar $2^5$ (32) jest również optymalny.

* Czy zoptymalizowana wersja wykonuje więcej instrukcji na jeden element?

Tak, zoptymalizowana wersja wykonuje więcej instrukcji na jeden element. Widać to w tabeli w wynikach eksperymentów. Wykonywane instrukcje na jeden element wzrosły z 13.26 do 25.76 (to prawie dwukrotna różnica).

* Jak zmieniło się IPC?
IPC zmieniło się średnio z 0.763 do 2.147. Jest to prawie trzykrotna różnica!


Ostatnia wersja jest najlepsza, bo dzięki zaimplementowaniu wersji z blokami poprawłem lokalność odwołań do pamięci. Daje to duże zyski w wydajności programu, co jasno wynika z danych (z pierwszej tabeli umieszczonej w wynikach eksperymentów).