Witam,
czy jest jakiś sposób na dokładniejsze zmierzenie czasu działania kawałka kodu(algorytmu), który będzie precyzyjniejszy niż clock() z time??
Mierzenie czasu dzialania
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
A co Ty tam widzisz nieprecyzyjnego?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 157
clock() i getTickCount()
mają dokładność rzędu 5-15 milisekund
QueryPerformanceCounter()
ma dokładność około 0.8 milisekundy
Opolski Portal Programistyczny
http://programowanie.opole.pl
- Rejestracja: dni
- Ostatnio: dni
no dokładność do milisekundy mnie nie urządza. mamy policzyć czasy działania dodawania/usuwania/przeszukiwania różnych struktur od ilości elementów. Niektóre struktury dla niektórych n (ilość elementów) daje wyniki mniejsze niż milisekunda.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
Raczej większej rozdzielczości nie dostaniesz. Zwiększ ilość elementów po prostu. Zresztą mozesz policzyć jaką złożoność ma dana operacja i sobie na tej podstawie policzyc ile mniej więcej to potrwa.
- Rejestracja: dni
- Ostatnio: dni
Daj taką operacje w pętli milion razy zmierz czas z dokładnością do sekundy podziel czas przez ten milion a dostaniesz czas operacji z dokładnością do milisekundy.
Można jeszcze policzyć czas działania pustej pętli milion razy i przed dzieleniem odjąć tą wartość.
- Rejestracja: dni
- Ostatnio: dni
tylko, ze gdybym chcial liczyc czas milion razy np dla dodawania to musialbym tez usuwam element dodany, aby nie zwiekszac wielkosci struktury ale wtedy trace tez czas na usuniecie elementu
- Rejestracja: dni
- Ostatnio: dni
- Postów: 157
Nie no zależy. Milion to nie jest aż tak dużo... Np. 1 000 000 x 10 bajtów to tylko niecałe 10MB... A co do czasu to dla vectora, czy listy dodawanie do końca listy jest constant time...
A przy dodawaniu milion bez problemu mieści się w longu...
Opolski Portal Programistyczny
http://programowanie.opole.pl
- Rejestracja: dni
- Ostatnio: dni
protechnologia.pl napisał(a)
clock() i getTickCount()
mają dokładność rzędu 5-15 milisekund
bzdura. rozdzielczość to 65536 tyknięć na godzinę, czyli około 55ms (18.(2)Hz).
protechnologia.pl napisał(a)
QueryPerformanceCounter()
ma dokładność około 0.8 milisekundy
jeszcze większa bzdura. rozdzielczość to typowo 100ns, zwykle wystarcza do zmierzenia czasu wykonania nawet jednej iteracji algorytmu. inną sprawą jest to, że czas jednej iteracji a średni czas jednej iteracji mogą od siebie mocno odbiegać, a samo QPC też jest problematyczne.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 157
Sam nie sprawdzałem, tylko napisałem to, co dowiedziałem się ze źródeł. Ty osobiście sprawdzałeś?
Opolski Portal Programistyczny
http://programowanie.opole.pl
- Rejestracja: dni
- Ostatnio: dni
- Postów: 16
Czesc,
poza wymienianymi funkcjami mozesz tez uzyc tez gotowego programu do profilowania, np gprof dla linuxa. Ostatnio pisalem jak go uzywac na moim blogu : http://www.mateuszmidor.com/2011/03/profilowanie-pod-linuxem-wstep/.
Pozdrawiam!