Jak mogę zadzwonić clock()
w C++
?
Na przykład chcę sprawdzić, ile czasu zajmuje wyszukiwanie liniowe, aby znaleźć dany element w tablicy.
c++
benchmarking
clock
dato datuashvili
źródło
źródło
perf stat -d ./a.out
Odpowiedzi:
źródło
clock()
iclock_t
pochodzą z nagłówka biblioteki C Standard Librarytime.h
, a zatem nie potrzebują używaniastd
przedrostków przestrzeni nazw po włączeniu ich bibliotek.<ctime>
otacza tę wartość i funkcję zstd
przestrzenią nazw, ale nie jest to wymagane. Sprawdź tutaj szczegóły implementacji: en.cppreference.com/w/cpp/header/ctimeAlternatywnym rozwiązaniem, które jest przenośne i zapewnia większą precyzję, dostępne od C ++ 11, jest użycie
std::chrono
.Oto przykład:
Uruchomienie tego na ideone.com dało mi:
źródło
using Clock=std::chrono::high_resolution_clock;
. Zobacz alias typu .std::chrono::high_resolution_clock
nie jest monotoniczny we wszystkich implementacjach biblioteki standardowej. Z cppreference - Generalnie należy po prostu użyć std :: chrono :: steady_clock lub std :: chrono :: system_clock bezpośrednio zamiast std :: chrono :: high_resolution_clock: użyj steady_clock do pomiaru czasu trwania i system_clock do zegara ściennego.clock()
zwraca liczbę tyknięć zegara od momentu uruchomienia programu. Istnieje powiązana stała,CLOCKS_PER_SEC
która mówi, ile tyknięć zegara występuje w ciągu jednej sekundy. W ten sposób możesz przetestować dowolną operację, taką jak ta:źródło
timeInSeconds
zawsze0.000000
po mnie przychodzi . Jak mam to naprawić?long double
aby uzyskać większą precyzję.Przynajmniej w systemie Windows jedynym praktycznie dokładnym mechanizmem pomiarowym jest QueryPerformanceCounter (QPC). std :: Chrono jest realizowany przy użyciu go (od VS2015, jeśli używasz tego), ale to nie dokładne w tym samym stopniu, jak przy użyciu QueryPerformanceCounter bezpośrednio. W szczególności twierdzenie, że raportowanie o ziarnistości 1 nanosekundy jest absolutnie niepoprawne. Tak więc, jeśli mierzysz coś, co zajmuje bardzo mało czasu (a Twój przypadek może być takim przypadkiem), powinieneś użyć QPC lub odpowiednika dla swojego systemu operacyjnego. Natknąłem się na to podczas pomiaru opóźnienia pamięci podręcznej i zanotowałem kilka uwag, które mogą okazać się przydatne, tutaj; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
źródło
źródło
Prawdopodobnie możesz być zainteresowany takim timerem: H: M: S. Msec.
kod w systemie Linux:
źródło
usleep
nie zawsze wróci po dokładnie takiej kwocie, o jaką prosisz. Czasami będzie dłużej. Powinieneś sprawdzić aktualny czas na początku, a następnie sprawdzić aktualny czas i odjąć, aby uzyskać bezwzględny czas od rozpoczęcia każdej pętli.możesz zmierzyć, jak długo działa Twój program. Następujące funkcje pomagają mierzyć czas procesora od początku programu:
moja referencja : Przybornik algorytmów tydzień 1 część kursu ze specjalności struktur danych i algorytmów Uniwersytetu Kalifornijskiego w San Diego i National Research University Higher School of Economics
więc możesz dodać tę linię kodu po algorytmie
Oczekiwany wynik: wyjście reprezentujące liczbę plików
clock ticks per second
źródło