Optimalizace a profilování

Transkript

Optimalizace a profilování
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

Fedora 12 Constantine

Fedora 12 Constantine Spin down pro disky

Více

Red Hat - Linuxhall 2006

Red Hat - Linuxhall 2006 Podpora v dalších aplikacích, doinstalování kodeků, fontů, clipartu a dalších aplikací

Více

podpora začínajících podnikatelů jako součást sociální

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 ...

Více

schematic1 : page1

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 ...

Více

Nástroje pro vývoj aplikací a jejich vazba na CASE

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...

Více

Programování v Linuxu

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...

Více

Honda Silver wing Návod k obsluze ČR

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...

Více