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í
podpora 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 ...
schematic1 : 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
...
Ná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...
Programová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...
Honda 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...