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 (L2­3)
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)
 sekcyjno­skojarzeniowe, 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 + (1­h) 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 3­poziomową 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 macierz­wektor): • 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

Podobne dokumenty