Optimalizace a profilování
Transkript
Optimalizace Optimalizace Profilování Gprof Gcov Oprofile Callgrind Intel Vtune AMD CodeAnalyst Cvičení Hlavní využití počítačů Vývoj paralelního algoritmu je nutné chápat jako optimalizaci. 1. nejprve vždy vyvíjíme co nejjednodušší sekvenční algoritmus bez optimalizací I I I za každou cenu se vyhýbáme předčasné optimalizaci ta může zcela zbytečně poničit čístý návrh algoritmu bez základní jenoduché verze kódu nemůžeme poměřit přínos optimalizace 2. máme-li základní funkční kód, který není dostatečně výkonný, přistupujeme k optimalizacím I I I pomocí profilování kódu určíme kritické části, kde se tráví nejvíce CPU času následně většinou optimalizujeme sekvenční kód pokud to nepostačuje, přikročíme k paralelizaci 3. během implementace optimalizací provádíme průběžné testy a kontrolujeme, zda optimalizovaný kód dává stále správné výsledky 4. nakonec poměřujeme přínos optimalizace/paralelizace tj. výslednou efektivitu paralelizace Profilování kódu I jde o proces, kdy se snažíme zjistit, kolik z celkového času běhu programu zaberou jednotlivé části kódu I to lze provést bud’ přidáním měřícího kódu nebo pomocí tzv. profilerů I čím přesnější měření chceme mít, tím více ovlivníme samotný výpočet Profilery Jsou dva základní přístupy: I statistické profilování (samplování) I I I I instrumentace (instrumentation) I I I I v pravidelných intervalech se sonduje, jaká část kódu se momentálně provádí výsledek není přesný, obzvlášt’ krátké funkce nemusí být vůbec zachyceny nezpomaluje příliš běh profilovaného programu do kódu se přidají pomocné instrukce, kterými se sleduje zpracování kódu ani krátké funkce se tak nepřehlédnou běh programu se tím značně zpomalí dynamická instrumentace I I I instrumentaci neprovádí překladač, ale profiler těsně před spuštěním profiler vlastně funguje jako virtuální stroj s JIT překladem výpočet se hodně zpomalí, ale výsledek je velmi přesný Gprof GNU gprof https://sourceware.org/binutils/docs/gprof/ I I tento profiler spolupracuje s překladačem gcc, který dělá instrumentaci program nejprve musíme přeložit s volbou -pg tj. I I g++ -O3 -pg -o program main.cpp provádímeli linkování zvlášt’, je potřeba přidat tento přepínač i linkeru I následně program spustíme I po ukončení běhu máme v pracovním adresáři soubor gmon.out I ten slouží jako základ analýzy programem gprof Gprof I flat profile I I I gprof -p program gmon.out u každé funkce ukáže, kolik času s v ní strávilo výpočtem call graph I I I gprof -q program gmon.out vidíme tabulku, kde jsou jednotlivé položky oddělené řádkou pomlček v každé položce je primární řádka ta, která obsahuje index v hranatých závorkách I I I I položka called říká, kolikrát z celkového počtu proběhnutí daná funkce volala primární funkci řádky pod primární řádkou popisují funkce volané danou funkcí I I udává primární funkci, kterou tato část popisuje řádky nad primární řádkou popisují funkce, které danou funkci volají položka called říká, kolikrát z celkového počtu proběhnutí primární funkce volala danou funkci source code annotations I I g++ -O3 -g -pg -o program main.cpp gprof -A program gmon.out Gcov GNU Gcov I I tento program umí napočítat, kolikrát byla daná řádka kódu provedena nejprve přeložíme náš program I g++ -O0 -fprofile-arcs -ftest-coverage -o program main.cpp -lgcov I následně program spustíme v adresáři se zdrojovým kódem se objeví soubory s příponami .gcda .gcno použijeme příkaz I I otevřeme si soubor main.cpp.gcov nebo použijeme program lcov I I I I I I I I I gcov main.cpp lcov --capture --directory . --output-file coverage.info genhtml coverage.info --output-directory coverage cd coverage firefox index.html pozor, lcov udává pokrytí jednotlivých souborů, což neodpovídá času zpracování řádky s největším počtem provedení budou ale zřejmě odpovídat kritickým částem aplikace Oprofile Oprofile http://oprofile.sourceforge.net/about/ I I I jde o statistický (samplovací) profiler není nutné dělat zvláštní překlad kódu zadáme příkazy I I I chceme graf volání funkcí, pak I I I operf program arguments opreport -l operf program arguments opreport -l chceme-li propojení se zdrojovým kódem I I I g++ -O0 -g -o program main.cpp operf program arguments opannotate --source --search-dirs . --output-dir=annotated Callgrind Callgrind http://valgrind.org/docs/manual/cl-manual.html I I I I I je součástí nástroje Valgrind – valgrind.org jde o skupinu dynamických instrumentačních nástrojů callgrind generuje velice přesný graf volání náš kód přeložíme s přepínačem -g a spustíme pomocí příkazu I I I výpočet je výrazně pomalejší v průběhu výpočtu lze valgring sledovat pomocí I I I I valgrind --tool=callgrind program argumenty callgrind_control -b -e callgrind_control -s po skončení běhu programu vznikne soubor callgrind.out.<pid> ten lze zpracovat pomocí příkazů I I callgrind_annotate callgrind.out.<pid> kcachegrind callgrind.out.<pid> Intel Vtune Intel Vtune https://registrationcenter.intel.com/RegCenter/StuForm.aspx?ProductID=1822&pass=yes I I jde o profiler s dynamickou instrumentací nejprve provedeme I sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope I profiler spustíme příkazem I /opt/intel/vtune_amplifier_xe_2015/bin64/amplxe-gui AMD CodeAnalyst http: //developer.amd.com/tools-and-sdks/archive/amd-codeanalyst-performance-analyzer/ Cvičení Cvičení: I I I I vyberte si některý svůj kód a proved’te na něm profilování pomocí zmíněných nástrojů najděte kritické části kódu, kde procesor tráví nejvíce času zamyslete se nad možnou optimalizací kódu než začnete jakékoliv optimalizace provádět, založte si gitovský repozitář pro možnost ukládání různých verzí kódu I I http://git-scm.com/ http://kmlinux.fjfi.cvut.cz/~zabkavit/git/
Podobné dokumenty
Red Hat - Linuxhall 2006
Podpora v dalších aplikacích, doinstalování kodeků, fontů, clipartu a dalších aplikací
Vícepodpora začínajících podnikatelů jako součást sociální
Na začínající podnikatele v České republice zpravidla není nahlíženo jako na skupinu, která si zaslouží speciální pozornosti a není tomu dokonce ani v případě, že jde o osoby, které se vstupem do ...
Víceschematic1 : page1
PGED1/AN2/RB0 AN10/SCK1/RB14 PGEC1/AN3/RB1 AN11/RB13 AN4/SDA2/RB2 VUSB3V3 AN5/SCL2/RB3 PGEC2/RB11 Vss PGED2/RB10 OSC1/CLKI/RA2 VCAP OSC2/CLKO/RA3 Vss SOSCI/RB4 SDA1/RB9 SOSCO/T1CK/RA4 SCL1/RB8 VDD ...
VíceNástroje pro vývoj aplikací a jejich vazba na CASE
modelů s konkrétní implementací návrhu. Jestliže analytik případně designér provede změnu v modelu (např. v diagramu tříd změní nebo přidá atribut, metodu u některé z tříd), zanese se tato změna au...
VíceProgramování v Linuxu
zjistíme, že velkou řada problémů lze řešit velice elegantně a rychle na úrovni skriptů, byť za cenu pomalejšího zpracování. To ovšem bývá bohatě nahrazeno velkou rychlostí implementace Dále je nut...
VíceHonda Silver wing Návod k obsluze ČR
s vozovkou dopravním prost%edkem, kter# reaguje na Va!e p%íkazy tak, jako "ádn# jin#. Na rozdíl od automobilu, nemáte kolem sebe kovovou kabinu. Podobn$ jako v letadle, prohlídka p%ed jízdou a prav...
Více