###### 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).