2012-10-23 17 views
5

Profiluję mój kod i już znalazłem najdroższą jego część. Jednak dzieje się to w funkcji podkreślonej. Aby zmierzyć wpływ, jaki wymusiłem, funkcja nie była narysowana.Funkcje funkcji wywoływania funkcji Callgrind

Teraz chciałbym podać dokładne dane profilowania. Bez inline mamy masywny narzut (funkcja jest w zasadzie pojedynczą pętlą, ale jest nazywana bardzo, bardzo często).

Zastanawiam się, czy możliwe jest instruowanie valgrind, aby traktował określoną sekcję kodu, ponieważ była to funkcja sama w sobie (jak makros CALLGRIND_START_INSTRUMENTATION, CALLGRIND_STOP_INSTRUMENTATION) bez wymuszania, aby funkcja nie była inline.

Odpowiedz

5
valgrind --tool=callgrind 

jest w stanie pokazać wiele szczegółów na temat gdzie cpu (i inne koszty, takie jak cache) jest wydawana. kcachegrind (narzędzie do wizualizacji) może z łatwością pokazać różne koszty (w tym dla funkcji wbudowanych).

Spróbuj uruchomić np. z:

valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes 

Uwaga: aby wyglądać koszty na poziomie instrukcji, należy użyć kcachegrind

+0

Rzeczywiście działa świetnie. kcachegrind to bardzo ładne narzędzie! – ypnos

-1

Nie jestem pewien, czy to jest to, co chcesz, ale Im nie wiesz to nie jest :):
http://valgrind.org/docs/manual/cg-manual.html#cg-manual.overview

Ponadto, ponieważ jedna instrukcja cache odczytu odbywa się za instrukcją wykonywanego można znaleźć liczba instrukcji wykonywanych na linii , które mogą być przydatne w tradycyjnym profilowaniu.

+0

Tak, czytałem ten wiersz, ale nie mogłem znaleźć jak to zrobić niczego poza funkcją-zakres szczegółowości. – ypnos

0

Może wywołać makro CALLGRIND_TOGGLE_COLLECT tuż przed wywołaniem funkcji i na początku swojej funkcji, to samo ale dla wyjścia swojej funkcji i tuż po wezwaniu swojej funkcji. E.g.

int main() 
{ 
    CALLGRIND_TOGGLE_COLLECT; 
    myFunction(); 
    CALLGRIND_TOGGLE_COLLECT; 
} 

__attribute__((noinline)) 
void myFunction() 
{ 
    CALLGRIND_TOGGLE_COLLECT; 
    //Do stuff 
    CALLGRIND_TOGGLE_COLLECT; 
} 

Powinien załatwić sprawę.

Powiązane problemy