80 trafień
Transkrypt
80 trafień
Wydajność systemów a organizacja pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Wydajność obliczeń Dla wielu programów wydajność obliczeń można traktować jako wydajność pobierania z pamięci i przetwarzania przez procesor W rzeczywistości często występują algorytmy (programy), w których wydajność jest ograniczana wyłącznie przez wydajność procesora lub wyłącznie przez wydajność układu pobierania danych z pamięci Ta ostatnia sytuacja jest w ostatnich latach coraz powszechniejsza Krzysztof Banaś, Obliczenia wysokiej wydajności. 2 „Memory wall” Krzysztof Banaś, Obliczenia wysokiej wydajności. 3 Szacowanie wydajności pamięci Jak szacować czas realizacji operacji pobierania z pamięci (w algorytmach o wydajności ograniczanej przez pamięć ten czas służy do określania ostatecznej wydajności przy realizacji algorytmu): tmem = liczba_dostępów * czas_dostępu Czas dostępu do pojedynczej danej (pojedynczego argumentu) jest często podawany jako parametr pamięci i dla pamięci RAM wynosi ok. kilkudziesięciu ns Krzysztof Banaś, Obliczenia wysokiej wydajności. 4 Szacowanie wydajności pamięci Przykład oszacowania dla algorytmu mnożenia macierz razy wektor (rozmiar macierzy nxn): liczba_dostępów - 2n2 czas_dostępu – 100ns 2 -9 t = 200n x 10 ns mem Dla porównania czas wykonania 2n2 operacji algorytmu w przypadku uwzględnienia teoretycznych możliwości czterodrożnego procesora o częstotliwości 2.5GHz 2 -9 t = 0.2n x 10 ns proc Pamięć spowalnia wykonanie zadania 1000 razy ? Krzysztof Banaś, Obliczenia wysokiej wydajności. 5 Pamięć podręczna Przyczyna nr 1 skrócenia rzeczywistego czasu dostępu – pamięć podręczna Przybliżone przykładowe rozmiary i czasy dostępu dla różnych rodzajów pamięci: rejestry podręczna (L1) podręczna (L23) główna dyskowa kilkaset B kilkanaście kB kilka MB kilka GB kilkaset GB < 1ns ok. 1 ns kilka ns kilkadziesiąt ns kilka ms Optymalne wykorzystanie pamięci podręcznej ma kluczowe znaczenie dla wydajności programów. Krzysztof Banaś, Obliczenia wysokiej wydajności. 6 Pamięć podręczna Orientacyjne rozmiary pamięci różnych poziomów i czasy dostępu (tym razem w liczbie taktów) Krzysztof Banaś, Obliczenia wysokiej wydajności. 7 Pamięć podręczna Działanie pamięci podręcznej: procesor zgłasza chęć dostępu do komórki pamięci sprawdzana jest odpowiadająca jej linia pamięci podręcznej (lub zbiór linii): trafienie (hit) – wartość jest udostępniana chybienie (miss) – przeładowywana jest zawartość całej linii pamięci odczyt lub zapis komórki z pamięci podręcznej jeśli procesor dokonuje zapisu konieczna jest strategia utrzymywania spójności pamięci podręcznej (w stosunku do pamięci głównej) Krzysztof Banaś, Obliczenia wysokiej wydajności. 8 Pamięć podręczna Organizacja pamięci podręcznej: linie pamięci o pojemności kilku słów (np. 64B, 128B) odwzorowanie obszarów (bloków) pamięci głównej w linie pamięci podręcznej statyczne – bezpośrednie, direct mapped (każdy blok ma swoją linię) dynamiczne: skojarzeniowe, fully associative (każdy blok może być odwzorowany w dowolną linię całej pamięci) sekcyjnoskojarzeniowe, set associative (każdy blok może być odwzorowany w dowolną linię z pewnej grupy) architektura harvardzka: osobna pamięć podręczna dla danych, osobna dla kodu (dla unikania hazardu zasobów) Krzysztof Banaś, Obliczenia wysokiej wydajności. 9 Pamięć podręczna Krzysztof Banaś, Obliczenia wysokiej wydajności. 10 Pamięć podręczna Działanie pamięci podręcznej: strategie podmiany linii w dynamicznych pamięciach podręcznych: losowo FIFO – najdłużej przechowywana LRU (least recently used) – najdawniej użyta LFU (least frequently used) – najrzadziej używana Krzysztof Banaś, Obliczenia wysokiej wydajności. 11 Pamięć podręczna Strategia korzystania z hierarchii pamięci w procesorach Opteron L2 do przechowywania linijek usuniętych z L1 Odczyt z RAM z pominięciem L2 Krzysztof Banaś, Obliczenia wysokiej wydajności. 12 Lokalność odniesień Przydatność pamięci podręcznej zależy od stopnia lokalności odniesień do danych w programie lokalność czasowa: dane raz użyte niedługo zostaną użyte ponownie (warto je zachować w szybszej pamięci) lokalność przestrzenna: jeśli w programie użyto jakichś danych to za chwile zostaną użyte dane sąsiadujące w pamięci (warto pobierać do pamięci podręcznej całe bloki) Miarą lokalności odniesień w trakcie wykonywania programu jest współczynnik trafień (hit ratio) – proporcja trafień do chybień Krzysztof Banaś, Obliczenia wysokiej wydajności. 13 Lokalność odniesień Zastosowanie pamięci podręcznej przynosi zazwyczaj wzrost wydajności, ponieważ wiele programów ma w sposób naturalny wysoki stopień lokalności odniesień (w praktyce stosunek trafień do chybień sięga nawet powyżej 90%) Chcąc zwiększać wydajność programów dzięki optymalnemu wykorzystaniu pamięci podręcznej należy maksymalizować stopień lokalności odniesień w kodzie (grupować odniesienia do tych samych i sąsiadujących danych w jedno miejsce) Ciekawą alternatywą są tzw. cache oblivious algorithms Krzysztof Banaś, Obliczenia wysokiej wydajności. 14 Czas dostępu do pamięci Obliczenie średniego czasu dostępu do danej w pamięci dla konkretnego programu: tc – czas dostępu do pamięci podręcznej (czas obsługi trafienia) tm – czas dostępu do pamięci głównej (czas obsługi chybienia) h – współczynnik trafień w pamięci podręcznej tav średni czas dostępu do danej dla programu tav = h tc + (1h) tm Czas dostępu może być wyrażany w liczbie taktów zegara, należy go wtedy odpowiednio przeliczyć. Krzysztof Banaś, Obliczenia wysokiej wydajności. 15 Czas dostępu do pamięci Dla pamięci podręcznej wielopoziomowej można stosować wzór: tav = tc1 + m1 * ( tc2 + m2 * ( tc3 + m3 * tm3 ) tci – czas dostępu do pamięci podręcznej (hit time) poziomu i tmi czas obsługi chybienia w pamięci podręcznej poziomu i (m.in. podmiany linii) – miss time mi – współczynnik chybień w pamięć podręczną poziomu i tav średni czas dostępu do danej dla programu Powyższy wzór zakłada 3poziomową pamięć podręczną o identycznym sposobie działania dla każdego poziomu (co jak wiadomo nie zawsze ma miejsce, np. przypadek victim cache) Krzysztof Banaś, Obliczenia wysokiej wydajności. 16 Czas dostępu do pamięci Przykład (mnożenie macierzwektor): • tc=4ns, tm=100ns • h=0.875 > tav = 16ns spm= 2n2/2n2 = 1 > wydajność 0.0625 GFLOPS • wynik wciąż silnie zależy od bardzo długiego czasu dostępu do pamięci głównej • czas dostępu do pamięci nie uwzględnia technik ukrywania opóźnienia (latency hiding – np. wielobankowość pamięci) i jest z tego względu pesymistyczny Krzysztof Banaś, Obliczenia wysokiej wydajności. 17 Rzeczywisty współczynnik trafień Współczynnik trafień w programach SPEC_int Krzysztof Banaś, Obliczenia wysokiej wydajności. 18 Rzeczywisty czas dostępu do pamięci Access t i me f or At hl on [ ns] Access t i me f or Xeon E5472 [ ns] " DI GI TAL_At hl on_AGH" usi ng 1: 2: 5 " Xeon_E5472" usi ng 1: 2: 5 140 140 120 120 100 80 100 80 60 40 60 40 20 0 26 24 22 20 l og of ar r ay si ze 1 8 16 14 12 20 0 5 10 20 15 l og of st r i de 25 Krzysztof Banaś, Obliczenia wysokiej wydajności. 26 24 22 20 l og of ar r ay si ze 1 8 16 14 12 5 10 20 15 l og of st r i de 19 25 Optymalizacja wydajności pamięci podręcznej Parametry wydajności pamięci podręcznej: czas obsługi trafienia (hit time) współczynnik trafień (hit rate) lub chybień (miss rate) czas obsługi chybienia (miss penalty) rzeczywisty średni czas dostępu do danych może być niższy od uzyskanego z przedstawionej uproszczonej analizy ze względu na współbieżność i równoległość działania pamięci, np. potokowość, wielobankowość itp. Do dyspozycji programisty: maksymalizacja współczynnika trafień redukcja wpływu czasu obsługi chybienia przez pobieranie z wyprzedzeniem (software prefetching) Krzysztof Banaś, Obliczenia wysokiej wydajności. 20 Przydatne wzory Jeśli czas wykonania w całości przeznaczony na dostęp do pamięci (obliczenia „w tle”): Tw = La x tav tav - obliczane na podstawie czasów dostępu do różnych poziomów hierarchii pamięci powinno uwzględniać sposób dostępu (access pattern) w praktyce uzyskiwane eksperymentalnie (np. poprzez wykonanie programu o zbliżonym sposobie dostępu do pamięci i odpowiednie pomiary) w takim wypadku wydajność obliczana z wzoru W = L / T = L / ( L x t ) = spm / tav o w o a av spm = Lo / La - ważny parametr charakteryzujący algorytmy – liczba operacji na jedno pobranie danych Krzysztof Banaś, Obliczenia wysokiej wydajności. 21