• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak sprawdzić, gdzie program spędza najwięcej czasu?

Object Storage Arubacloud
0 głosów
478 wizyt
pytanie zadane 2 grudnia 2019 w C i C++ przez kkasia12345 Początkujący (410 p.)
Hej,

potrzebuję zrobić analizę kodu w programie, tzn. sprawdzić, w którym miejscu program spędza najwięcej czasu (konkrena linijka? pętla?). Niestety nie mogę znaleźć, jak można taką analizę wykonać - najlepiej na Windowsie, ale może być też Linux. Program jest napisany w C, nie jest skomplikowany - to w zasadzie trochę pętli i warunków.

Próbowałam z gprof na Linuxie, ale nie mam praktycznie żadnych wyników.

2 odpowiedzi

+2 głosów
odpowiedź 2 grudnia 2019 przez adrian17 Ekspert (344,860 p.)
wybrane 26 stycznia 2020 przez kkasia12345
 
Najlepsza

najlepiej na Windowsie

Jeśli programujesz w Visual Studio, to ma on wbudowany profiler.

konkrena linijka? pętla?).

Program jest napisany w C, nie jest skomplikowany - to w zasadzie trochę pętli i warunków.

Próbowałam z gprof na Linuxie, ale nie mam praktycznie żadnych wyników.

Zgaduję, że masz 99% wolnego kodu w jednej funkcji? To trzeba profilować na poziomie linii.

Najbardziej out of the box jest gcov, który jest instalowany razem z GCC więc powinieneś już go mieć: https://en.wikipedia.org/wiki/Gcov#Example

Natomiast zwróć uwagę, że takie narzędzia (callgrind chyba też, nie wiem czy da się zmienić) liczą ile razy dana linia została wykonana, a nie ile czasu faktycznie zajęła. 1000000 iteracji dodawania zmiennoprzecinkowego lub operacji na pamięci zajmą więcej czasu niż 1000000 iteracji dodawania dwóch liczb całkowitych. Powyższe narzędzia prawdopodobnie będą wystarczyły, ale do analizy faktycznego czasu osobiście preferuję profilery samplujące jak google-perftools i bodajże ten Visuala.

komentarz 2 grudnia 2019 przez adrian17 Ekspert (344,860 p.)
edycja 2 grudnia 2019 przez adrian17

Dla porównania, tak wygląda zliczanie linii (gcov, podobnie w callgrind):

        1:    3:int main(){
        2:    4:	std::vector<int> data(4, 1000);
        -:    5:
        1:    6:	int a = 0;
500000001:    7:	for (int i = 0; i < 500000000; ++i) {
500000000:    8:		a += i%777;
        -:    9:	}
        1:   10:	int b = 0;
500000001:   11:	for (int i = 0; i < 500000000; ++i) {
500000000:   12:		b += data[i%777];
        -:   13:	}
        1:   14:}

A tak samplowanie (google-perftools):

     .      .    3: int main(){
     .      .    4: 	std::vector<int> data(4, 1000);
     .      .    5: 
     .      .    6: 	int a = 0;
    42     42    7: 	for (int i = 0; i < 500000000; ++i) {
    83     83    8: 		a += i%777;
     .      .    9: 	}
     .      .   10: 	int b = 0;
    52     52   11: 	for (int i = 0; i < 500000000; ++i) {
   113    169   12: 		b += data[i%777];
     .      .   13: 	}
     .      .   14:

(Choć zazwyczaj nie mam potrzeby schodzić do tego poziomu, porównanie na poziomie graficznego grafu funkcji mi zazwyczaj wystarczy :) )

PS nie dodałem: ogólnie profilowanie linia po linii zazwyczaj robi się znacznie mniej precyzyjne, gdy włącza się optymalizacje... a zazwyczaj chce się mierzyć wydajność z optymalizacjami :/ Więc to trochę utrudnia pomiary.

komentarz 2 grudnia 2019 przez gagyn Stary wyjadacz (11,050 p.)
Ten wbudowany w Visual Studio jest bardzo przyjemny w obsłudze i widać naocznie, którym miejscu jest duże wykorzystanie procesora, jak i Ramu. Więc również polecam się zainteresować.
0 głosów
odpowiedź 2 grudnia 2019 przez reaktywny Nałogowiec (40,990 p.)

CallGrind  i  KCacheGrind.

Podobne pytania

0 głosów
1 odpowiedź 315 wizyt
0 głosów
1 odpowiedź 94 wizyt
0 głosów
5 odpowiedzi 404 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...