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