IAG39 Meeren í Ccasu, profilovaní a meéření výkonu Měření času výpočtu Optimalizace není možní bez znalosti, co optimalizovat Potřebujeme znat údaje o behu programu ■ Čas výpoCtu ceieho programu: príkazy time a timex ■ Čas výpoCtu Castí programu: profilovaní ■ Srovnaní systemu: benchmarking IA039 2 Jaro 2010 Příkaz time ■ User time ■ Čas procesoru strávený uživatelskými procesy ■ System time ■ Čas procesoru strávený obsluhou funkcí jádra ■ Elapsed time ■ celkový cas výpoctu ČPU time = user time + sýstem time IA039 3 Jaro 2010 Příkaz time - další údaje ■ Dostupné pro time v prostředí C shellu ■ Sdílený pamétový prostor ■ Privátní (unshared) pamétový prostor ■ Počet block input operací ■ Počet block output operací ■ Pocet page faultu ■ Pocet swapu IA039 4 Jaro 2010 Příkaz timex (System V) Údaje o čase ■ real, user a system time DalSí Údaje ■ Mean memory size ■ Kčore-minutes ■ Přenesena bloky a znaky VyuZíva sar accounting IA039 5 Jaro 2010 Příklady - time time netscape http://www.pgroup.com/ppro_cc_desc.html 7.3u 3.1s 1:31 11°/„ 0+0k 272+36io 125pf+0w IA039 6 Jaro 2010 Příklady - timex timex -opkmt netscape http://www.pgroup.com/ppro_cc_desc.html real 2:33.61 user 9.20 sys 3.50 START AFT: Mon May 4 10:21:19 1998 END BEFOR: Mon May 4 10:23:53 1998 COMMAND START END REAL NAME USER TTYNAME TIME TIME (SECS) netstat ludek pts/5 10:21:26 10:21:27 1.26 netscape ludek pts/5 10:21:19 10:23:52 153.60 CPU (SECS) CHARS BLOCKS MEAN KCORE SYS USER TRNSFD READ SIZE(K) MIN 0.09 0.85 577536 32 3.40 8.34 7045120 486 CHARS TRNSFD = 7622656 BLOCKS READ = 518 104.34 1.63 1144.37 223.91 IA039 7 Jaro 2010 Profiling ■ Snaha získat informace o částech programu ■ Doba stravena v'jednotiivých blocích ■ Doba stravena jednotlivými příkazy ■ Pocet opakovaní biokU/príkazU ■ Primární pozornost zamerena na procedury ■ Profil: graf ■ Osa X: jednotiive procedury ■ Osa Y: Doba výpoctu IA039 8 Jaro 2010 Typy profilu ■ Ostrý profil ■ Píký odpovídají dominujícícm procedurám ■ Numerické aplikace, technické výpoCtý s maticemi atd. ■ „Snadno" optimalizovatelne ■ Plochý profil ■ Program traví cas rovnomerne ve vSech procedúrach ■ Zpravidla databaze, informacní sýstemý, sýstemove programý ■ ObtíZne optimalizovatelne ■ Amdahlovo pravidlo platí i zde IA039 9 Jaro 2010 Profilery ■ Nástroje pro tvorbu profilů ■ Samozrejme možne i „ručne" ■ Procedurove orientovane ■ prof ■ gprof ■ Blokove (rádkove) orientovane ■ pixie ■ tcov ■ Iprof IA039 10 Járo 2010 Použití profilem ■ Dve fáze: ■ Instrumentováný beh programu (s nebo bez opetneho překladu) ■ Vlastní zprává o výsledcích (report) ■ Prístup ke zdrojovemu kódu ■ Znalost struktury programu IA039 11 Jaro 2010 Procedurově orientované profilery ■ Typický predstavitel: prof ■ Instrumentace ■ Nový preklad programu ■ Zpravidla dostupný pres přepínac překladace -p ■ Výpocet ■ Instrumentovaný program výtvaří zaznam o výpoctu ■ Soubor mon.out ■ Výtvoření zpravý ■ Vlastní beh programu prof IA039 12 Jaro 2010 prof - další informace ■ Okročilé procesory a operační systémy nepotřebují zvláštní překlad ■ Např. SGI IRIX 6.x (procesory MIPS R1X000) ■ Instrumentace za behu - SpeedShop * Program spousten príkazem ššrun -exptype * Vypočet generuje soubor .. * exptype definuje typ profilu IA039 13 Jaro 2010 SpeedShop - typy profilu ■ usertime - uživatelský čas ■ [f]pcsamp[x] - vzorkovaní ■ ideal (pixie) - blokový profiler ■ fpe - pohýbliva radova čarka ■ prof_hwc - hardwarove čitače f gLhwc, [f]cý_hwc, [f]ic_hwc, [f]isc_hwc, [f]dc_hwc, [f]dsc_hwc, [f]tlb_hwc, [f]gfp_hwc IA039 14 Jaro 2010 gprof Poskytuje call graf ■ Kdo koho vola PoCty volaní procedur Kumulovane Casy vypoCtu vetví IA039 15 Jaro 2010 Přesnost měření ■ Meření casu ■ Absolutní cas vstupu a'výstupu procedury * Vnorene procedury * Kratke procedury ■ Sbeer hodnoty citace instrukcí v pravidelnych intervalech * Přesnost vysledku zavisla na vzorkovaní (sampling interval) IA039 16 Jaro 2010 Blokovej orientované profilery ■ Poskytují informace o průchodech základními bloky ■ tcov a Iprof ■ PoCet průchodů kaZdym příkazem (rádkem) ■ pixie ■ Pocet cyklů procesorů straveny v kaZdem príkazu IA039 17 Jaro 2010 Příklad 1: static void foo(), bar(), baz(); 2: 3: main() 4: { int l; 5: for (l=0; l <1000; 6: { if ( l == 2*(l/2) ) 7: foo(); 8: bar(); 9: baz(); 10: } 11: } 12: 13: void foo() 14: { int j; 15: for (j=0; j<200; 16: } 17: void bar() 18: { int j; 19: for (j=0; j<200; 20: } 21: void baz() 22: { int j; 23: for (j=0; j<300; 24: } IA039 18 Jaro 2010 SpeedShop - usertime usertime: index °/0Samples self descendents total name [1] 100.0°° 0.00 0.03 1 main [2] 100.0°° 0.03 0.00 1 bar IA039 19 Jaro 2010 SpeedShop - vzorkování pcsamp: samples 2 1 1 fpcsamp: samples 18 12 12 time(%) cum time(%) procedure 0.02s( 50.0) 0.01s( 25.0) 0.01s( 25.0) 0.02s( 50.0) foo 0.03s( 75.0) bar 0.04s(100.0) baz time(%) 0.02s( 41.9) 0.01s( 27.9) 0.01s( 27.9) cum time(%) procedure 0.02s( 41.9) baz 0.03s( 69.8) bar 0.04s( 97.7) foo IA039 20 Jaro 2010 SpeedShop - blokový přístup ideal: cycles(%) cum % 3918000(49.63) 49.63 2618000(33.16) 82.80 1309000(16.58) 99.38 47024( 0.60) 99.98 secs instrns alls procedure 0.03 2111000 1000 baz 0.02 1411000 1000 bar 0.01 705500 500 foo 0.00 25017 1 main IA039 21 Jaro 2010 SpeedShop - blokový přístup II ideal -h: cycles(%) cum % times line procedure 3907858(49.50%) 49.50% 300000 23 baz 2607858(33.04%) 82.54% 200000 19 bar 1303930(16.52%) 99.06% 100000 15 foo 14000( 0.18%) 99.24% 1000 6 main 13009( 0.16%) 99.40% 1000 5 main 8000( 0.10%) 99.50% 1000 9 main 8000( 0.10%) 99.60% 1000 8 main 7000( 0.09%) 99.69% 1000 24 baz 7000( 0.09%) 99.78% 1000 20 bar 4000( 0.05%) 99.83% 500 7 main 3500( 0.04%) 99.88% 500 16 foo 3142( 0.04%) 99.92% 1000 18 bar 3142( 0.04%) 99.96% 1000 22 baz 1570( 0.02%) 99.98% 500 14 foo IA039 22 Jaro 2010 tcov tcov: 1 -> for (l=0; l <1000; 1000 -> { if ( l == 2*(l/2) ) 500 -> foo(); 1000 -> bar(); baz(); void foo() 500 -> for (j=0; j<200; void bar() 1000 -> for (j=0; j<200; void baz() 1000 -> for (j=0; j<300; IAG39 23 Jaro2G1G tcov - pokračování Top 10 Blocks Line Count 6 1000 8 1000 19 1000 23 1000 7 500 15 500 5 1 7 Basic blocks in this file 7 Basic blocks executed 100.00 Percent of the file executed 5001 Total basic block executions 714.43 Average executions per basic block IA039 24 Jaro 2010 Zjištovaní vykonu - benchmarking Snaha o porovnaní systémů ■ Hardware i software spolecne Neexistůje Zadne „zazracne" řesení Zakladní prístůpy ■ Průmyslove („profesionalní") benchmarky * Porovnatelnost, nezávislost na vyrobcích ■ „Privatní" benchmarky * Konkrétní (specificke) pozadavky IA039 25 Jaro 2010 Mysteriózní MIPS a MFLOPS ■ Srovnaní na zaklade poctu instrukcích vykonanych za sekundu ■ MIPS - milion celocíselnych instrukcí za sekundu ■ MFLOPS - milion operací s pohyblivou řadovou carkou za sekundu ■ Problemy ■ Jake instrukce? ■ V jake posloupnosti? ■ Umele, nevypovídající IA039 26 Jaro 2010 Celočíslené benchmarky ■ VAX MIPS ■ Dhrystones IA039 27 Jaro 2010 Benchmarky s pohyblivou řádovou čárkou ■ Whetstone (umělý mix, skalární) ■ Linpack (daxpý, vektorizace) ■ 100*100 ■ 1000*1000 IA039 28 Jaro 2010 SPEC benchmarks ■ Nezávislá organizace ■ Standard Performace Evaluation Corporation ■ Standardizovaná benchmarky pro rUzne architektury ■ Vychazí z tzv. kernel kodů ■ Cely nebo cast existujícího programu ■ Dostupne ve zdrojovém koodU * Je mozno „doladit" IA039 29 Jaro 2010 SPEC skupiny ■ Open Systems Group (OSG) ■ High Performance Group (HPG ■ Graphics Performance Characterization Group (GPC) IA039 30 Jaro 2010 SPEC OSG podskupiny ■ CPU ■ SPECmarks a CPU benchmarks ■ JAVA ■ JVM98, JBB2005, Java client a server benchmarky ■ MAIL ■ SPECmail2001 - SFS ■ Systemy souborů (SFS97) ■ WEB ■ WEB99, WEB99 SSL, WEB2005 IA039 31 Jaro 2010 CPU2000 ■ Aktuální CPU benchmark ■ Deiení ■ CINT2000 - celoCíselne výpoCty ■ CFP2000 - výpoCty s pohyblivou řádovou Cárkou IA039 32 Jaro 2010 CINT2000 ■ Jednotlivé 164.gzip 175. vpr 176. gcc 181.mcf 186.crafty 197.parser 252. eon 253. perlbmk 254. gap 255. vortex 256. bzip2 300.twolf součásti Compression FPGA Circuit Placement ánd Routing C Programming Language Compiler Combinatorial Optimization Gáme Pláying: Chess Word Processing Computer Visualization PERL Programming Language Group Theory, Interpreter Object-oriented Database Compression Pláče ánd Route Simulator IA039 33 Jaro 2010 CFP2000 ■ Jednotlivé 168.wupwise 171. swim 172. mgrid 173. applu 177. mesa 178. galgel 179. art 183.equake 187. facerec 188. ammp 189.lucas 191.fma3d 200.sixtrack 301.apsi souCasti Physics / Quantum Chromodynamics Shallow Water Modeling Multi-grid Solver: 3D Potential Field Parabolic / Elliptic Partial Differential Equations 3-D Graphics Library Computational Fluid Dynamics Image Recognition / Neural Networks Seismic Wave Propagation Simulation Image Processing: Face Recognition Computational Chemistry Number Theory / Primality Testing Finite-element Crash Simulation High Energy Nuclear Physics Accelerator Design Meteorology: Pollutant Distribution IA039 34 Jaro 2010 Transakční benchmarky Vykon databazí ■ TPC-A * Testuje interakci s ATM (6 pozadavku za minutu) * 1 TPS znamena, ze 10 ATM soucasne vyda pozadavek a vysledek dostane do 2 s (s 90% ucinností) ■ TPC-B * Jako TPC-A, ale testuje se přímo, ne přes (pomalou) síř TPC-C * Komplexní, transakce jsou objednavky, platby, dotazy s jistym procentem zamernych chyb vyzadujících automatickou korekci IA039 35 Jaro 2010 Sítové benchmarky ■ netperf ■ iperf ■ End to end meření ■ Pozor na to, co skutečne v síti meeríme IA039 36 Jaro 2010 Vlastní benchmarky ■ Specifické (konkrétní) požadavky ■ Důležité parametry: ■ Co testovat ■ Jak dloůho testovat ■ Požadavky na velikost pameti ■ Typy benchmarků ■ Jednodůchy proůd (opakovaní) ■ Propůstnost (benchmark stone wall) IA039 37 Jaro 2010 Kontroly ■ Nezbýtna soucast pouzívaní benchmarku ■ Meeříme opravdu to, co chceme? ■ Mozne príciný ovlivnení ■ Pouzita optimalizace ■ Velikost pameti ■ Přítomnost jiných procesu ■ Co je třeba explicitne kontrolovat ■ CPU cas a cas nastených hodin ■ Výsledký! ■ Srovnaní se „znamým" standardem IA039 38 Jaro 2010