Wydajność systemów a organizacja pamięci
Transkrypt
Wydajność systemów a organizacja pamięci
Wydajność systemów a organizacja pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Motywacja - „memory wall” Krzysztof Banaś, Obliczenia wysokiej wydajności. 2 Organizacja pamięci Organizacja pamięci: pojedynczy procesor wielopoziomowa pamięć podręczna pamięć wirtualna maszyny wieloprocesorowe pamięć wspólna (UMA, NUMA, ccNUMA) pamięć rozproszona W ostatnich latach wydajność systemów komputerowych coraz częściej ograniczana jest przez wydajność pamięci (dostęp do danych) 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 oznacza to możliwość przesłania do procesora ok. kilkudziesięciu MB danych na sekundę 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 Hierarchia pamięci • Czas wykonania pojedynczej operacji procesora: ~0.4ns • Czas dostępu do pojedynczej zmiennej w pamięci DRAM: ~40ns • Konieczność wprowadzenia szybszej niż DRAM pamięci pośredniej, pomiędzy rejestrami i pamięcią główną • 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 Krzysztof Banaś, Obliczenia wysokiej wydajności. < 1ns ok. 1 ns kilka ns kilkadziesiąt ns kilka ms ~$2000/GB ~$20/GB ~$0.2/GB 6 Pamięć podręczna AK 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. 7 Pamięć podręczna AK 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. 8 Pamięć podręczna - AK Krzysztof Banaś, Obliczenia wysokiej wydajności. 9 Pamięć podręczna AK 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. 10 Pamięć podręczna - AK 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. 11 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ń Optymalne wykorzystanie pamięci podręcznej ma kluczowe znaczenie dla wydajności programów. Krzysztof Banaś, Obliczenia wysokiej wydajności. 12 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. 13 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. 14 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. 15 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. 16 Opóźnienie versus przepustowość Krzysztof Banaś, Obliczenia wysokiej wydajności. 17 Opóźnienie versus przepustowość Krzysztof Banaś, Obliczenia wysokiej wydajności. 18 Przepustowość pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 19 Skalowalność hierarchii pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 20 Skalowalność pamięci głównej Krzysztof Banaś, Obliczenia wysokiej wydajności. 21 Rzeczywisty czas dostępu do pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 22 Rzeczywisty współczynnik trafień Współczynnik trafień w programach SPEC_int Krzysztof Banaś, Obliczenia wysokiej wydajności. 23 Rzeczywisty czas dostępu do pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 24 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. 25