Co to jest dobry, łatwy w użyciu program profilujący dla C ++ w systemie Linux? [Zamknięte]

79

Muszę sprofilować kod działający w C ++ w systemie Linux. Czy możecie polecić jakieś profilery?

shergill
źródło
1
Powinieneś dodać tagi Linux i C ++. Prawdopodobnie uzyskasz lepszą odpowiedź i zakres opinii.
Duck
2
Wygląda na duplikat stackoverflow.com/questions/375913/… .
Michael Myers
np. likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop
Shan.
Zobacz to pytanie na slant
ideasman42

Odpowiedzi:

37

Użyj gprof.

Po prostu skompiluj z -pgflagą (myślę (ale nie jestem pewien), że musisz wyłączyć optymalizacje.) I użyj gprof do analizy pliku gmon.out, który następnie utworzy twój plik wykonywalny.

na przykład:

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

To samo z g ++ i cpp.

smcameron
źródło
32
Profilowanie niezoptymalizowanego kodu jest trochę bezcelowe, prawda? Podobnie, kod profilujący, który został mocno zmodyfikowany za pomocą -pg, często wprowadza Cię w błąd w optymalizacji niewłaściwych miejsc.
federalny
1
-pg jest opcją konsolidatora, a nie kompilatorem
Slug Pue
24

Valgrind to dobrze znany program do profilowania Linuksa

dfa
źródło
myślałem, że Valgrind był bardziej do sprawdzania wycieków pamięci. Próbuję zobaczyć, które funkcje są wywoływane itp.
shergill
14
użyj narzędzia suite nazwie "callgrind"
dfa
2
Valgrind to po prostu framework do budowania narzędzi dynamicznych. Chociaż stało się synonimem Memcheck, narzędzia zbudowanego na Valgrind. Callgrind jest całkiem niezły w profilowaniu.
Falaina
13

Zoom z RotateRight ( http://www.rotateright.com ) jest tym, czego używam. Ma widok motyla na funkcje i możesz dwukrotnie kliknąć dowolną funkcję, aby zanurzyć się w kodzie źródłowym lub ASM. Kompiluj z informacjami debugowania (-g), aby zobaczyć źródło, ale nadal powinieneś budować i profilować kod zoptymalizowany .

XWare
źródło
1
Właśnie dałem szansę temu programowi, jest naprawdę całkiem niezły! Obecnie mój ulubiony program do profilowania w systemie Linux; jednak warto wspomnieć, że wymaga to zbudowania kodu, -fno-omit-frame-pointeraby skutecznie profilować.
Nik Reiman
1
Link wygląda na martwy. Czy ktoś wie, gdzie (lub czy) można go znaleźć gdzie indziej?
Simon F
12

Jestem fanem Oprofile . Obejmuje instalację modułu jądra i wymaga trochę nauki, ale jest dość potężny i działa bardzo dobrze dla zoptymalizowanych programów / programów bez symboli debugowania.

Vtune to kolejny bardzo potężny program do profilowania stworzony przez firmę Intel. Uważam, że wersja dla systemu Linux jest bezpłatna dla oprogramowania niekomercyjnego.

Istnieje również zestaw narzędzi Valgrind proponowany przez dfa. Callgrind prawdopodobnie byłby tym, co Cię najbardziej interesuje. Cachegrind (którego zestaw funkcji jest podzbiorem Callgrinda) i Massif również są interesujące, ale nie mam doświadczenia z tym drugim.

Falaina
źródło
+1 dla oprofile, to nie jest „łatwe narzędzie”
dfa
1
Haha, prawda. Prawdopodobnie nie powinienem sprawiać, by brzmiało to tak łatwo :) Z pewnością nie jest to tak proste, jak „uruchamianie programu pod nim”, jak narzędzia Vtune i Valgrind, ale wydaje mi się, że przyzwyczajasz się do tego dość szybko.
Falaina
oprofile wygląda interesująco - czy obsługuje x86_64?
LiraNuna
VTune nie jest niestety darmowy do żadnych zastosowań.
rustyx
5

Spójrz na KCacheGrind, który jest graficzną nakładką na valgrind i sprawia, że ​​jest naprawdę łatwy w użyciu.

Milan Babuškov
źródło
5

Google ma również fajny profiler jako część google-perftools - które są zawarte w Debianie / Ubuntu i prawdopodobnie innych dystrybucjach.

Dirk Eddelbuettel
źródło
2

gprof to standardowe narzędzie GNU do profilowania.

twk
źródło
2

Spójrz na Sysprof . Twoja dystrybucja najprawdopodobniej już jest dostępna.

Zauważ, że wszystkie wymienione programy profilujące działają najlepiej, jeśli Twoja aplikacja jest skompilowana ze wskaźnikami ramek. Oznacza to, że powinieneś użyć -fno-omit-frame-pointer w linii poleceń gcc.

Søren Sandmann
źródło
1

To jest to, czego używam.

Mike Dunlavey
źródło
po prostu opierasz swoją ocenę wąskiego gardła na 10 próbkach pobranych ręcznie, zamiast 1000 próbek zebranych przez prof.
Dmitrij Grigoriew
1
@DmitryGrigoryev: Dobrze, i to faktycznie mówi ci, co powinieneś naprawić. Wyjaśnienie statystyczne jest tutaj . W rzeczywistości pierwszym błędem, jaki popełniają ludzie, jest myślenie, że szukają raczej „wąskiego gardła” niż doskonale dobrego, ale marnotrawnego kodu ;-)
Mike Dunlavey
Niezła lektura, dzięki. Całkowicie rozumiem, że optymalizacja jest znacznie łatwiejsza, gdy widzisz rzeczywiste wywołanie funkcji w debugerze. I rozumiem, że „wąskie gardło” nie oznacza „dobrego celu optymalizacji”, tylko potencjalny. Mimo to myślę, że warto zacząć od tego, co i proftak: jeśli widzę, że f()jest to najbardziej problematyczna funkcja statystycznie, zatrzymam program kilka razy, aż wyląduję, f()zamiast po prostu zaczynać od losowej funkcji, w której najpierw zatrzymałem się.
Dmitrij Grigoriew