Softwaremethodes ter verbetering van datalokaliteit en cachegedrag

advertisement
Softwaremethodes ter verbetering
van datalokaliteit en cachegedrag
Kristof Beyls
Promotor: prof. Erik D’Hollander
Doctoraatsverdediging
18 juni 2004
2
Samenwerking processor-geheugen
Voorbeeld: BTW-berekening:
€ 930 x 1,21 = ?
Processor
Geheugen
Lees
Lees
Reken
Schrijf
nettoprijs
percentage
prijs x percentage
brutoprijs
3
Samenwerking processor-geheugen
I D I D I
R
I D
Processor
1125,3
Geheugen
930
Lees
Lees
Reken
Schrijf
nettoprijs
percentage
prijs x percentage
brutoprijs
1,21
Samenwerking processor-geheugen
4
I D I D I
R
I D
1975
2004
I
D
I
D
I
R
I
D
5
Oplossing: cache
Pentium4 2.66GHz
Processor
Cache (8 KiB)
Cache (512 KiB)
1 kloktik
2 kloktikken
16 kloktikken
309 kloktikken
RAM-geheugen (524288 KiB)
Samenstelling uitvoeringstijd
6
Beter cachegedrag
Slecht cachegedrag
100%
rekenen
andere bottlenecks
data cache misser
percentage uitvoeringstijd
80%
60%
40%
20%
0%
programma
7
Kernvraag



Hoe kan er voor gezorgd worden
dat de processor minder op het
geheugen moet staan wachten?
Door gegevens vaker in snelste
cache te vinden.
Maar hoe zorg je ervoor dat
gegevens in de snelste cache
gevonden worden?
8
INFO
Wanneer moet de bediende naar de
kast gaan?
9
De twee meest recent aangevraagde folders
liggen op de tafel
LRU
(Least
Recently
Used)
Kast
Tafel
Kast
Kast
Kast
Tafel
Tafel
Kast
Wanneer moet de bediende naar de
kast gaan?
10
Folder op tafel

hergebruiksafstand
< tafelgrootte
Maat voor lokaliteit
0
Kast
2
Tafel
Kast
Kast
1
Kast
1
Tafel
2
Tafel
Kast
11
Wanneer moet de bediende naar de
kast gaan?
Folder op tafel

hergebruiksafstand < tafelgrootte
Voorwaartse
hergebruiksafstand
=1
Achterwaartse
hergebruiksafstand
=2
Kast
Tafel
Kast
Kast
Kast
Tafel
Tafel
Kast
12
Wanneer moet de bediende naar de
kast gaan?
Folder op tafel

hergebruiksafstand < tafelgrootte
Achterwaartse
hergebruiksafstand
=∞
Kast
Tafel
Kast
Kast
Kast
Tafel
Tafel
Kast
Hoe zou de bediende sneller kunnen
bedienen?
13
Folder op tafel

hergebruiksafstand < tafelgrootte
1.
2.
3.
Grotere tafel?
Toeristen in andere volgorde
bedienen: hergebruiksafstand
verkleinen?
Andere keuze van welke folder
vervangen moet worden?
Verbeterd vervangingsbeleid
14
= Blijft op tafel tafelgrootte
liggen tot volgende aanvraag
tafelgrootte
tafelgrootte
0
1
2
3
voorwaartse
hergebruiksafstand
0
1
2
3
voorwaartse
hergebruiksafstand
0
1
2
3
voorwaartse
hergebruiksafstand
15
Wanneer moet de bediende naar de
kast gaan?
LRU:
5x kast
Nu:
4x kast
Kast
Tafel
Kast
Kast
Tafel
Tafel
Tafel
Kast
Kast
Tafel
Kast
Kast
Kast
Tafel
Tafel
Kast
16
Computer – toeristisch bureau:
gelijkenissen



Cache: LRU
Doel: zo veel mogelijk de
gevraagde data vinden in de
cache.
Folderinop
tafel
Data
cache

cachegrootte
hergebruiksafstand < tafelgrootte
Hoe zou de cache beter benut kunnen
worden?
17
Folder op tafel/data in cache

hergebruiksafstand < tafel/cache
1.
2.
3.
Grotere tafel?
1.
Toeristen in andere
2.
volgorde bedienen:
hergebruiksafstand
verkleinen?
Andere keuze van
3.
welke folder vervangen
moet worden?
Grotere cache?
Berekeningen in
andere volgorde:
hergebruiksafstand
verkleinen?
Andere keuze van
welke data vervangen
moet worden?
18
Overzicht


Probleemstelling & metafoor
Vervangingsbeleid verbeteren

Statische cache hints
Doelhints
 Bronhints


Dynamische doelhints


Bereken hergebruiksafstand
Herordenen berekeningen
(Lokaliteit verhogen)
Vervangingsbeleid in cache kan
gestuurd worden?
19

Ja, met cache hints (in IA-64)
bijv. load.nt1
L1
L2
L3
Alloc? Keep? Alloc? Keep?




.nt1




.nt2



.nta

.t1


Alloc? Keep?
20
Doelhints en Bronhints
Load_C2.nta
Processor
L1-cache
L2-cache
1 kloktik
2 kloktikken
16 kloktikken
309 kloktikken
RAM-geheugen
21
Programma-uitvoering
B
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
A
1
1
1
0
23
23
23
0
5
5
5
0
1
1
1
0
12
12
12
0
22
Hergebruiksafstand opmeten per
instructie
Cachegrootte 10
.t1
Cachegrootte 25
.nt1
.nt2
_C3 .t1
Load _C?.nt?
0
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
10
20
30
∞
voorwaartse hergebruiksafstand
_C1
0
_C2
10
20
_C3
30
achterwaartse hergebruiksafstand
∞
Cache hints: snelheidswinst
23
1,6
1,5
Versnelling Doelhints
1,4
Versnelling Bronhints
1,3
Versnelling Bron+Doelhints
1,2
1,1
G de l
e m de
id
de
ld
e
gr
id
ec
95
fp
ge
m
id
de
M
ld
e
p
Ts
Sw
To im
m
ca
tv
A
pp
lu
W
av
e5
Sp
O
ld
en
ge
m
id
s
rim t
et
er
Po
w
Tr e r
ee
ad
d
M
Pe
B
is
0,9
or
t
Em
3d
H
ea
lth
1,0
B
h
Versnelling
Spec95fp
programma's
Olden programma's
24
Statische cache hints: beperking
N=2
0
10
20
30
∞
voorwaartse hergebruiksafstand
for i:= 1 to N
.t1
.nt1
.nt2
for j:= 1 to 2
B(i,j) := A(i)
endfor
N=10
endfor
for k:= 1 to N
0
10
20
30
A(k):=0
voorwaartse hergebruiksafstand
endfor
∞
25
Overzicht


Probleemstelling & metafoor
Vervangingsbeleid verbeteren

Statische cache hints
Doelhints
 Bronhints


Dynamische doelhints


Bereken hergebruiksafstand
Herordenen berekeningen
(Lokaliteit verhogen)
26
Hergebruiksafstand berekenen in
functie van iteratie en parameters
1.
2.
3.
Directe hergebruiken berekenen
Aangesproken data tussen gebruik
en hergebruik berekenen
Aantal elementen tussen gebruik
en hergebruik berekenen.
27
Stap 1: hergebruiken berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
?
for k:= 1 to N
A(k):=0
endfor
2
j
1
2
3
i
1
2
3
k
28
Stap 1: hergebruiken berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
?
for k:= 1 to N
A(k):=0
endfor
2
j
1
2
?
3
i
1
2
3
k
29
Stap 1: hergebruiken berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
2
3
i
1
2
3
k
30
Stap 1: hergebruiken berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
2
3
i
1
2
3
k
31
Stap 1: hergebruiken berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
2
3
i
1
2
3
k
32
Stap 1: hergebruiken berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
2
3
i
1
2
3
k
33
Stap 2: Aangesproken data berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
B
2
3
i
1
2
3
k
A
34
Stap 2: Aangesproken data berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
B
2
3
i
1
2
3
k
A
35
Stap 2: Aangesproken data berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
B
2
3
i
1
2
3
k
A
36
Stap 2: Aangesproken data berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
B
2
3
i
1
2
3
k
A
37
Stap 2: Aangesproken data berekenen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
2
j
1
B
2
3
i
1
2
3
k
A
38
Stap 3: Tel aantal aangesproken
elementen
N-i
i-1
2N-2i
+
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
3N-2i
for k:= 1 to N
A(k):=0
endfor
2
3N-2i
j
1
2
7
3
5
i
1
3
B
1
2
3
k
A
39
Stap 3: Tel aantal aangesproken
elementen
1
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
3N-2i
for k:= 1 to N
A(k):=0
endfor
1
1
2
3
i
1
2
j
1
7
1
5
3
1
2
3
k
40
Meer gedetailleerde hergebruiksinformatie dankzij berekening
1
3N-2i
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
N=2 0
als j=1
als j=2
10
20
30
∞
voorwaartse hergebruiksafstand
.t1
.nt1
.nt2
N=10
0
10
20
30
∞
voorwaartse hergebruiksafstand
41
Dynamische cache hints
for i:= 1 to N
for j:= 1 to 2
if (j=1) FRD_A(i)=1
if (j=2) FRD_A(i)=3*N-2i
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
;; FRD_A in register r2
Load r1 = A(i), frd=r2
42
Dynamische cache hints:
reductie van overhead
for i:= 1 to N
for j:= 1 to 2
if (j=1) FRD_Ai=1
if (j=2) FRD_Ai=3*N-2i
B(i,j) := A(i), FRD_Ai
endfor
endfor
FRD_A1:=1
FRD_A2:=3*N
for i:= 1 to N
B(i,1) := A(i), FRD_A1
FRD_A2 += -2
B(i,2) := A(i), FRD_A2
endfor
40%
statische hints
dynamische hints
30%
20%
10%
-30%
gemiddelde
tomcatv
jacobi
liv18
gauss-jordan
-20%
cholesky
-10%
mxm
0%
vpenta
reductie cachemissers
43
Statische vs. dynamische hints
44
Overzicht


Probleemstelling & metafoor
Vervangingsbeleid verbeteren

Statische cache hints
Doelhints
 Bronhints


Dynamische doelhints


Bereken hergebruiksafstand
Herordenen berekeningen
(Lokaliteit verhogen)
45
Hergebruik op lange afstand verkorten




Compileroptimalisaties slagen er
niet in om langeafstandshergebruiken te verkorten.
Niet-automatisch: programmeur
optimaliseert programma.
Het is echter niet duidelijk waar in
de broncode de cachemissers zitten.
Daarom: cachemissers visualiseren.
Visualisatie
46
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
endfor
for k:= 1 to N
A(k):=0
endfor
20
10
for i:= 1 to N
for j:= 1 to 2
B(i,j) := A(i)
endfor
A(i):=0
endfor
20
10
0
0
0
10
20
30
hergebruiksafstand
∞
0
10
20
30
hergebruiksafstand
∞
Resultaten SPEC2000 programma’s
47
100%
rekenen
andere bottlenecks
data cache misser
60%
40%
20%
ak
eo
pt
ak
e
eq
u
programma
eq
u
ar
t
op
t
2
2
ar
t
1
op
t
ar
t
ar
t
m
cf
op
t
1
0%
m
cf
percentage uitvoeringstijd
80%
Resultaten SPEC2000 programma’s
Versnelling
48
12
11
10
9
8
7
6
5
4
3
2
1
0
mcf
art
equake
AthlonXP
Alpha
Itanium
49
Samenvatting
1.
Hergebruiksafstand


2.
Opmeten [PDCS01]

Toepasbaar op alle programma’s
Berekenen [ODES04]

Voor alle mogelijke programma-invoer

Voor iedere afzonderlijke toegang
Cache Hints


Statische [EURO-PAR02]

Doelhints (4% snelheidswinst)

Bronhints (5% snelheidswinst)
Dynamische (verwijdert twee maal meer
missers dan statische hints) [EPIC02, JSA04]
50
Samenvatting
3.
Visualisatie van langeafstandshergebruik

4.
Portabele snelheidswinst
[IV01, PDCS02, ICCS04]
Cache remapping

Na het wegwerken van de
capaciteitsmissers, ook conflictmissers
verwijderen. [EURO-PAR00, J.UCS00]
Softwaremethodes ter verbetering
van datalokaliteit en cachegedrag
Kristof Beyls
Promotor: prof. Erik D’Hollander
Doctoraatsverdediging
18 juni 2004
52

Cache Remapping



Reuse Distance Metric





Yu, Y.; Beyls, K.; D'Hollander, E. Visualizing the Impact of the Cache on Program Execution.
Proceedings of Fifth International Conference on Information Visualization. IEEE Computer Society.
Information Visualization. Vol. 1 (1). 2001. pp. 336-341
Beyls, K.; D'Hollander, E.; Yu, Y. Visualization Enables the Programmer to Reduce Cache Misses.
Proceedings of the 14th IASTED International Conference on Parallel and Distributed Computing and
Systems. ACTA Press. 2002. pp. 781-786 (Best Paper Award)
Beyls, K.; D'Hollander, E. Platform-Independent Cache Optimization by Pinpointing LowLocality Reuse. Computational Science - ICCS 2004: 4th International Conference, Proceedings, Part
III. Springer-Verlag Heidelberg. Lecture Notes in Computer Science. Vol. 3038. 2004. pp. 448-455
Polytope counting and analytical reuse distance calculation


Beyls, K.; D'Hollander, E. Reuse Distance-Based Cache Hint Selection. Proceedings of the 8th
International Euro-Par Conference. Springer-Verlag. Lecture Notes in Computer Science. Vol. 2400.
2002. pp. 265-274
Beyls, K.; D'Hollander, E. Compile-Time Cache Hint Generation for EPIC Architectures.
Proceedings of the 2nd workshop on Explicitly Parallel Instruction Computing Architectures and
Compiler Techniques. 2002 (Best Paper Award)
Visualization


Beyls, K.; D'Hollander, E. Reuse Distance as a Metric for Cache Behavior. Proceedings of the
IASTED International Conference on Parallel and Distributed Computing and Systems. IASTED. 2001.
pp. 617-622
Cache Hints


Beyls, K.; D'Hollander, E. Cache Remapping to Improve the Performance of Tiled Algorithms.
Proceedings of the 6th International Euro-Par Conference. Springer. Lecture Notes in Computer
Science. 2000. pp. 998-1007
Beyls, K.; D'Hollander, E. Compiler Generated Multithreading to Alleviate Memory Latency.
Journal of Universal Computer Science. Springer Pub. Co.. Vol. 6 (10). 2000. pp. 968-993
Verdoolaege, S.; Beyls, K.; Bruynooghe, M.; Seghir, R.; Loechner, V. Analytical Computation of
Ehrhart Polynomials and its Applications for Embedded Systems. 2nd Workshop on
Optimizations for DSP and Embedded Systems. 2004.
Parallelization of Java

Beyls, K.; D'Hollander, E.; Yu, Y. JPT: A Java Parallelization Tool. Proceedings of the 6th European
PVM/MPI Users` Group Meeting. Springer. 1999. pp. 173-180
53
Onderdelen uitvoeringstijd
rekenen
41%
data cache
misser
46%
andere
bottlenecks
13%
Hergebruikafstanden voor SPEC95FP
Billions
54
30
hits
20
misses
10
0
0
5
10
15
log2(reuse distance)
20
Compiler kan moeilijk lange
hergebruiksafstanden verkorten
55
cumul. aantal missers
1E+10
1E+10
1E+10
8E+09
6E+09
misses (original)
misses (optimized)
4E+09
2E+09
log2(hergebruiksafstand)
30
27
24
21
18
15
9
6
12
[PDCS01]
3
0
0E+00
Download