Comment dois - je appeler clock()
à C++
?
Par exemple, je souhaite tester le temps nécessaire à une recherche linéaire pour trouver un élément donné dans un tableau.
c++
benchmarking
clock
dato datuashvili
la source
la source
perf stat -d ./a.out
Réponses:
la source
clock()
etclock_t
sont de l' en- tête de C standard Library oftime.h
, et donc ne nécessitent pas l'utilisation destd
préfixes d'espace de noms après l'inclusion de leurs bibliothèques.<ctime>
encapsule cette valeur et cette fonction avec l'std
espace de noms, mais son utilisation n'est pas obligatoire. Vérifiez ici pour les détails de mise en œuvre: en.cppreference.com/w/cpp/header/ctimeUne solution alternative, portable et plus précise, disponible depuis C ++ 11, consiste à utiliser
std::chrono
.Voici un exemple:
Lancer ceci sur ideone.com m'a donné:
la source
using Clock=std::chrono::high_resolution_clock;
. Voir l' alias de type .std::chrono::high_resolution_clock
n'est pas monotone dans toutes les implémentations std lib. De la cppreference - En général, on devrait simplement utiliser std :: chrono :: regular_clock ou std :: chrono :: system_clock directement au lieu de std :: chrono :: high_resolution_clock: utilisez stabil_clock pour les mesures de durée et system_clock pour l'heure de l'horloge murale.clock()
renvoie le nombre de coups d'horloge depuis le démarrage de votre programme. Il existe une constante associéeCLOCKS_PER_SEC
, qui vous indique le nombre de coups d'horloge en une seconde. Ainsi, vous pouvez tester n'importe quelle opération comme celle-ci:la source
timeInSeconds
vient toujours0.000000
pour moi. Comment le réparerais-je?long double
pour obtenir plus de précision.Sur Windows au moins, le seul mécanisme de mesure pratiquement précis est QueryPerformanceCounter (QPC). std :: chrono est implémenté en l'utilisant (depuis VS2015, si vous l'utilisez), mais il n'est pas aussi précis que l'utilisation directe de QueryPerformanceCounter. En particulier, il est prétendu que le rapport à une granularité de 1 nanoseconde n'est absolument pas correct. Donc, si vous mesurez quelque chose qui prend très peu de temps (et votre cas pourrait bien être un tel cas), vous devriez utiliser QPC, ou l'équivalent pour votre système d'exploitation. Je me suis heurté à cela lors de la mesure des latences de cache, et j'ai noté quelques notes que vous pourriez trouver utiles, ici; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
la source
la source
Vous pourriez probablement être intéressé par une minuterie comme celle-ci: H: M: S. Msec.
le code sous Linux OS:
la source
usleep
ne reviendra pas toujours après exactement le montant que vous demandez. Parfois, ce sera plus long. Vous devez vérifier l'heure actuelle au début, puis vérifier l'heure actuelle et soustraire pour obtenir l'heure absolue depuis que vous avez commencé à chaque fois dans la boucle.vous pouvez mesurer la durée de fonctionnement de votre programme. Les fonctions suivantes permettent de mesurer le temps CPU depuis le démarrage du programme:
ma référence : Algorithms toolbox semaine 1 cours faisant partie de la spécialisation des structures de données et des algorithmes par l'Université de Californie à San Diego et la National Research University Higher School of Economics
afin que vous puissiez ajouter cette ligne de code après votre algorithme
Sortie attendue: la sortie représentant le nombre de
clock ticks per second
la source